Skip to content

Instantly share code, notes, and snippets.

@sharapeco
Created March 29, 2013 02:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sharapeco/5268371 to your computer and use it in GitHub Desktop.
Save sharapeco/5268371 to your computer and use it in GitHub Desktop.
.xyzzy
(require "ni/setup")
(ni-autoload)
;; diff
(setq ed::*diff-command-name*
(map-slash-to-backslash (merge-pathnames "~xyzzy/bin/diff.exe" (user-homedir-pathname))))
(defun diff-selected-buffers ()
(interactive)
(let (file1 file2)
(setq file1 (get-buffer-file-name (selected-buffer)))
(other-window)
(setq file2 (get-buffer-file-name (selected-buffer)))
(diff file1 file2)))
(global-set-key '(#\C-c #\g) 'goto-line)
(setq *keyword-load-path* '("~/~xyzzy/etc"))
;; やっぱヴァーチャル
(global-set-key #\C-a 'beginning-of-virtual-line)
(global-set-key #\C-e 'end-of-virtual-line)
;; ややEmacsちっくに
(global-set-key #\M-% 'query-replace)
(global-set-key #\C-/ 'undo)
(global-set-key #\C-\\ 'redo)
(global-set-key '(#\C-x #\C-w) 'emacs-write-file)
(global-set-key '(#\C-x #\u) 'undo)
(global-set-key #\M-C-\\ 'indent-region)
(require "dabbrev")
(global-set-key #\M-/ 'dabbrev-expand)
(global-set-key #\M-\\ 'dabbrev-popup)
;; コメント
(global-set-key '(#\C-c #\q) 'comment-out-region)
;; clickable-uri
(global-set-key '(#\C-c #\C-o) 'clickable-uri-open)
;; ファイル名も欲しい (C-x C-v)
(setq *find-other-file-requires-file-name* t)
;; twitter-mode
;;(global-set-key '(#\C-c #\C-t) 'twitter-toggle)
;; 漢字コード・改行コードの初期設定
(setq *default-fileio-encoding* *encoding-utf8n*)
(setq *default-eol-code* *eol-crlf*)
;; .xyzzyも
(pushnew '("\\.xyzzy" . lisp-mode) *auto-mode-alist*)
;(load-library "javascript-mode")
(pushnew '("\\.as" . jscript-mode) *auto-mode-alist*)
(pushnew '("\\.mxml" . jscript-mode) *auto-mode-alist*)
;; sql-mode
(in-package "editor")
(add-hook '*sql-mode-hook*
#'(lambda ()
(set-syntax-start-c++-comment *sql-mode-syntax-table* #\-)
(set-syntax-end-c++-comment *sql-mode-syntax-table* #\LFD)))
(in-package "user")
;;; ミニバッファに入ったときIMEをOFFにする
(export '(*ime-mode-into-minibuffer*))
(defvar *ime-mode-into-minibuffer* nil)
(defun ime-state-get-and-setoff (bef-buffer file-name)
(interactive)
(setq *ime-mode-into-minibuffer* (get-ime-mode))
(toggle-ime nil))
(defun ime-state-set (bef-buffer file-name)
(interactive)
(toggle-ime *ime-mode-into-minibuffer*))
(add-hook '*enter-minibuffer-hook* 'ime-state-get-and-setoff)
(add-hook '*exit-minibuffer-hook* 'ime-state-set)
;; 初期ディレクトリ
(cd "~/")
;; ファイラで上向きスクロール
(define-key filer-keymap #\M-v 'filer-backward-page)
(define-key filer-keymap #\M-o 'filer-view-file)
(define-key filer-keymap #\C-l 'filer-reload)
(define-key filer-keymap #\_ 'filer-goto-root)
(define-key filer-keymap #\TAB 'filer-swap-windows)
(define-key filer-keymap #\C-t 'filer-toggle-mark-files)
;; ファイラのガイドテキスト
(setq *filer-guide-text*
'("A:属性 C:コピー D:削除 E:解凍 F:検索 J:DIR移動 \
K:mkdir L:ドライブ M:移動 N:ファイル名 O:圧縮 P:DIR??"
"R:名前変更 S:DIR?? T:ショートカット U:DIRサイズ V:リスト X:実行 .:マスク \
/:マーク *:load C-t:トグル S-Home:クリア C-l:リロード F3:実行"))
;; ファイラの初期ディレクトリ
(setq *filer-primary-directory* (user-homedir-pathname)) ; 左側
(setq *filer-secondary-directory* (user-homedir-pathname)) ; 右側
;; ファイラの初期ファイルマスク
;; 2画面用
(setq *filer-primary-file-mask* '("*")) ; 左側
(setq *filer-secondary-file-mask* '("*")) ; 右側
;; 1画面用
(setq *filer-last-file-mask* '("*"))
;;
(setq *filer-directories*
(list
(cons "0 Home" (user-homedir-pathname))
(cons "1 Desktop" (map-backslash-to-slash (get-special-folder-location :desktop)))
(cons "x xyzzy" (si:system-root))
))
;; ファイラでファイル名をコピーする
(defun filer-get-filenamestring (filename type)
(interactive)
(let (str)
(cond
((= type 1) (setq str (if (file-directory-p filename)
(car (reverse (pathname-directory (concat filename "x"))))
(file-namestring filename))))
((= type 2) (setq str filename))
((= type 3) (setq str (map-slash-to-backslash filename)))
((= type 4) (setq str (concat "file:///" filename))))
str))
(defun my-filer-make-clipboard-string (lst)
(apply #'concat (mapcar #'(lambda (x) (concat x "\n")) lst)))
(defun filer-get-filenames (type)
(interactive)
(let ((selected-files (or (filer-get-mark-files)
(list (filer-get-current-file)))))
(copy-to-clipboard (my-filer-make-clipboard-string
(mapcar #'(lambda (filename) (filer-get-filenamestring filename type)) selected-files)))
(message "ファイル名をコピーしました")))
(defvar *get-filenamestring-menu* nil)
(define-key filer-keymap #\C-Insert
#'(lambda () (interactive)
(unless *get-filenamestring-menu*
(setq *get-filenamestring-menu*
(define-popup-menu
(:item nil "ファイル名のみコピー(&F)"
#'(lambda () (interactive) (filer-get-filenames 1)))
(:item nil "フルパス(/)でコピー(&S)"
#'(lambda () (interactive) (filer-get-filenames 2)))
(:item nil "フルパス(\\)でコピー(&E)"
#'(lambda () (interactive) (filer-get-filenames 3)))
(:item nil "URL表記でコピー(&U)"
#'(lambda () (interactive) (filer-get-filenames 4)))
)))
(track-popup-menu *get-filenamestring-menu*)))
;; バックアップファイルはまとめて
(require "backup")
(setq *backup-directory* (merge-pathnames "~xyzzy/backup" (user-homedir-pathname)))
(setq *hierarchic-backup-directory* nil)
;;; 大文字のファイル名をファイラで一括して小文字へ
(defun filer-downcase-filename ()
(let ((files (filer-get-mark-files)))
(when (and files (yes-or-no-p "小文字にしまっせ"))
(filer-subscribe-to-reload (filer-get-directory))
(mapc #'(lambda (x) (rename-file x (string-downcase x))) files)
(filer-demand-reload)
(filer-goto-file (file-namestring (car files))))
t))
(define-key filer-keymap '(#\C-x #\C-l) 'filer-downcase-filename)
(defun copy-buffer ()
(interactive)
(let ((currentpo (point)))
(selection-whole-buffer)
(copy-selection-to-clipboard)
(start-selection-as-line)
(goto-char currentpo)))
(global-set-key '(#\C-c #\C-a) 'copy-buffer)
(setq c-indent-level 4)
(setq c-brace-offset -4)
(setq c-continued-statement-offset 4)
(setq c-argdecl-indent 4)
(setq c-label-offset -4)
(setq c-brace-imaginary-offset 0)
(load-library "ruby")
(push '("\\.rb$" . ruby-mode) *auto-mode-alist*)
(load-library "myphp-mode")
(pushnew '("\\.php$" . php-mode) *auto-mode-alist*)
;; @規則や!に色付けする。
(load-library "css-mode")
(set-syntax-word ed::*css-mode-syntax-table* #\@)
(set-syntax-word ed::*css-mode-syntax-table* #\!)
;; Sass/LESS
(load-library "sass-mode")
(pushnew '("\\.less$" . sass-mode) *auto-mode-alist*)
(pushnew '("\\.scss$" . sass-mode) *auto-mode-alist*)
(pushnew '("\\.as$" . jscript-mode) *auto-mode-alist*)
(pushnew '("\\.ajp$" . html-mode) *auto-mode-alist*)
(pushnew '("\\.ctp$" . html-mode) *auto-mode-alist*)
(setq *c-mode-hook*
'(lambda ()
(setq c-brace-offset -4)
(setq indent-tabs-mode t)))
(setq *c++-mode-hook*
'(lambda ()
(setq c-brace-offset -4)
(setq indent-tabs-mode t)))
(setq *jscript-mode-hook*
'(lambda ()
(setq c-indent-level 4)
(setq c-brace-offset -4)
(setq c-continued-statement-offset 0)
(setq c-argdecl-indent 4)
(setq c-label-offset 0)
(setq c-brace-imaginary-offset 0)
(setq indent-tabs-mode t)))
(setq *php-mode-hook*
'(lambda ()
(setq c-indent-level 4)
(setq c-brace-offset -4)
(setq c-continued-statement-offset 4)
(setq c-argdecl-indent 4)
(setq c-label-offset -4)
(setq c-brace-imaginary-offset 0)
(setq indent-tabs-mode t)))
(setq *lisp-mode-hook*
'(lambda ()
(setq indent-tabs-mode nil)))
;; TABで選択範囲をインデント
(defun indent-selected-lines ()
(interactive "*")
(let ((start-line-number nil) (end-line-number nil) (do-indent-flag nil))
(selection-start-end (start end)
(goto-char start)
(if (and (bolp) (> start end)) (backward-char 1))
(setq start-line-number (current-line-number))
(goto-char end)
(if (and (bolp) (< start end)) (backward-char 1))
(setq end-line-number (current-line-number))
(if (> start-line-number end-line-number)
(rotatef start-line-number end-line-number)
)
(if (/= (progn (goto-char start) (current-line-number)) (progn (goto-char end) (current-line-number)) )
(progn
(setq do-indent-flag t)
(shift-region start end)
(goto-line start-line-number)
(start-selection 1 t)
(while (<= (current-line-number) end-line-number)
(selection-next-virtual-line)
)
)
(delete-region start end)
)
)
(if (null do-indent-flag) (insert "\t"))
)
)
(defun unindent-selected-lines ()
(interactive "*")
(let ((start-line-number nil) (end-line-number nil))
(selection-start-end (start end)
(goto-char start)
(if (and (bolp) (> start end)) (backward-char 1))
(setq start-line-number (current-line-number))
(goto-char end)
(if (and (bolp) (< start end)) (backward-char 1))
(setq end-line-number (current-line-number))
(if (> start-line-number end-line-number)
(rotatef start-line-number end-line-number)
)
(unshift-region start end)
(goto-line start-line-number)
(start-selection 1 t)
(while (<= (current-line-number) end-line-number)
(selection-next-virtual-line)
)
)
)
)
;キー設定
(global-set-key #\TAB 'indent-selected-lines)
(set-extended-key-translate-table exkey-S-tab #\F20)
(global-set-key #\F20 'unindent-selected-lines)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment