Eclipse+Emacsキーバインドユーザのためのxyzzy設定。

(タイトル変えました (。_。)

Windowsでエディタを使うとき、軽くて機能も十分にそろっているTeraPadを長らく使ってたんだけど、この一年ほどはEmacsライクなキーバインドの使えるxyzzyを使うようになった。が、いろいろ普通にできないことがあったて微妙だったりした。例えば・・・。

  • スクロールしたら選択状態がはずれてしまうのが嫌だ
  • リージョンに色をつけたい
  • インクリメンタルサーチしたい
  • 複数行まとめてインデントさせたい
  • xyzzyでコピーしたものをほかのアプリにペーストしたい
  • 全選択が面倒(クリック5回とかいや)
  • diffをとりたい

しかし、ちょっと真面目に設定を探してみたら、すでにみんなが解決してくれていた。

リージョンに色をつけたい

 以下のサイトからregion-hilight.lをダウンロードして.xyzzyに設定を加えるだけで簡単に使えます。これは、ずっと欲しかった。
 http://www2.ocn.ne.jp/~cheerful/script/xyzzy/mode/regionhilight.html
 ちなみに、ハイライトされた色の設定は「ニセ反転色」に対応しているみたい。

インクリメンタルサーチしたい

 (require "isearch")を書くだけ。なんと、こんな設定があったとわ。これで検索のストレスがなくなります。
 http://t-mse.net/index.php?xyzzy

複数行まとめてインデントさせたい

 xyzzy-Lispで僕色に染まったエディタを作ろうぜ
 変態紳士むけのリージョン選択してインデントを使わせていただきました。

xyzzyでコピーしたものをほかのアプリにペーストしたい

 なんと、元々こんな設定箇所があったのね。
 「共通設定」>「さまざま」>「削除バッファとクリップボードを中途半端に同期する」
 http://xyzzy.s53.xrea.com/qanda/wiki.cgi?p=54bf89b08d70fa735e3fe7e325f40ea8

全選択が面倒(クリック5回とかいや)

 (global-set-key '(#\C-x #\h) 'selection-whole-buffer)
 まさにこれですよ。http://xyzzy.s53.xrea.com/wiki/index.php?%BC%C1%CC%E4%C8%A2%2F11(global-set-key

diffをとりたい

 ここ(xyzzy 関連の覚え書き)にある方法で設定しました。Windows用のdiff.exeを入れて設定を加えるだけっす。diff.exeへのリンクが切れてましたが、生きているのはこれ(プログラミング・ツール(移植ソフト))かな。

ということで、私が設定した内容を。もうちょっとまとめてまた、月曜日くらいにでも・・・。

というわけで、月曜日。
私の設定した、xyzzy.iniと、.xyzzyをご覧ください。

まずは、xyzzyをインストールしたディレクトリの、usr/hironemu/wxp/xyzzy.ini
色の設定は、xyzzy の音 - みんなの楽しい色設定にある、「xyzzyの使い方がわからぬヤシ励ましあえその2 959 さん」の一番上のやつをもとにしています。

[Colors]
textColor=#d0d0d0
backColor=#3c2800
ctlColor=#8080
selectionTextColor=#ffffff
selectionBackColor=#cf8f92
kwdColor1=#98fb98
kwdColor2=#82ddee
kwdColor3=#ffff00
stringColor=#7aa0ff
commentColor=#ffbf80
tagColor=#face87
cursorColor=#c0c0c0
caretColor=#e8cc80
imeCaretColor=#d4eefc
linenum=#ffebc1
reverse=#c4ffff
unselectedModeLineFg=#13000000
unselectedModeLineBg=#10e8e8e8
modeLineFg=#d0d0d0
modeLineBg=#13000000
fg1=#ff
bg1=#ff
fg2=#ff00
bg2=#ff00
fg3=#ffff
bg3=#ffff
fg4=#ff0000
bg4=#ff0000
fg5=#ff00ff
bg5=#ff00ff
fg6=#ffff00
bg6=#ffff00
fg7=#ffffff
bg7=#ffffff
fg8=#0
bg8=#0
fg9=#80
bg9=#80
fg10=#8000
bg10=#8000
fg11=#8080
bg11=#8080
fg12=#800000
bg12=#800000
fg13=#800080
bg13=#800080
fg14=#808000
bg14=#808000
fg15=#808080
bg15=#808080
custColor0=#ffffff
custColor1=#ffffff
custColor2=#ffffff
custColor3=#ffffff
custColor4=#ffffff
custColor5=#ffffff
custColor6=#ffffff
custColor7=#ffffff
custColor8=#ffffff
custColor9=#ffffff
custColor10=#ffffff
custColor11=#ffffff
custColor12=#ffffff
custColor13=#ffffff
custColor14=#ffffff
custColor15=#ffffff
buftabSelFg=#13000000
buftabSelBg=#10f0f0f0
buftabDispFg=#13000000
buftabDispBg=#10f0f0f0
buftabFg=#13000000
buftabBg=#10f0f0f0
tabSelFg=#13000000
tabSelBg=#10f0f0f0
tabFg=#13000000
tabBg=#10f0f0f0
[Misc]
1920x1200=(738,108)-(1934,1067),1
saveWindowSize=1
saveWindowPosition=1
restoreWindowSize=1
restoreWindowPosition=1
windowFlags=#f77
fnkeyLabels=15
foldMode=-1
foldLinenumMode=1
[Font]
Ascii=16,"Courier New",0
Japanese=13,"HGゴシックM",128
Latin=19,"Courier New",0
Cyrillic=19,"Courier New",0
Greek=19,"Courier New",0
GB2312=19,"BatangChe",0
BIG5=19,"MingLiU",0
KSC5601=19,"GulimChe",0
Georgian=19,"BatangChe",0
lineSpacing=0
backslash=0
recommendSize=0
sizePixel=0
[Filer]
textColor=#9000000
backColor=#6ffffff
highlightTextColor=#fffffff
highlightBackColor=#eff9933
cursorColor=#c000c0
columnLeft=121,65,116,44
columnRight=121,65,116,44
1920x1200=(643,340)-(1398,809),1
sortRight=0
sortLeft=0
column=121,65,116,44
s1920x1200=(382,262)-(794,791),1
sort=0

次に、ユーザディレクトリ(C:\Users\ユーザ名\.xyzzy、とかかな。なければ、作りますよ。)にある.xyzzy
まぁ、上の説明には書いてない設定とかもあるけど、参考までに。javascript-modeとかいい感じ。

;; javascript-mode
;; http://xyzzy.s53.xrea.com/wiki/index.php?%B3%C8%C4%A5lisp%2Fjavascript-mode
(load-library "javascript-mode")
(push '("\\.js$" . javascript-mode) *auto-mode-alist*)

;; 全選択 C-x h
;; http://xyzzy.s53.xrea.com/wiki/index.php?%BC%C1%CC%E4%C8%A2%2F11
(global-set-key '(#\C-x #\h) 'selection-whole-buffer)

;; api.lが見つからないのでコメントアウト
;; win32api
;;(require "api")
;; layered-window
;;(require "layered-window")

;; grep 結果からダブルクリックでファイルを開く
;; http://hie.s64.xrea.com/xyzzy/note/search.html#grep-mouse-left-press
;; そもそもF10でも開く
(defun grep-mouse-left-press ()
 (interactive)
 (let ((click (mod *last-mouse-click-count* 6)))
   (if (= click 2)
       (first-error)
     (mouse-left-press))))

(defvar *grep-map* nil)
(unless *grep-map*
 (setq *grep-map* (make-sparse-keymap))
 (define-key *grep-map* #\LBtnDown 'grep-mouse-left-press))
(add-hook 'ed::*grep-hook* #'(lambda () (use-keymap *grep-map*)))
(add-hook 'ed::*grepd-hook* #'(lambda () (use-keymap *grep-map*)))

;; diff
;; http://ohkubo.s53.xrea.com/xyzzy/memo.html
;; Windows 用のdiffをダウンロード
;; http://cetus.sakura.ne.jp/softlab/toolbox1/index.html
(setq ed::*diff-command-name*
     (map-slash-to-backslash (merge-pathnames
"D:/apps/diff272w/diff.exe" (user-homedir-pathname))))

;; diff-detail
;;(require "diff-detail")

;; スクロールしてもセレクションが外れないようにする
(require "keep-selection")

(in-package "editor")

(defun mouse-wheel-scroll (window n lines)
 (or lines
     (setq lines (window-lines window)))
 (with-selected-window
   (set-window window)
   (move-kept-selection #'scroll-window (* n lines))))

(setq mouse-wheel-handler #'mouse-wheel-scroll)

(defun previous-page-kept-selection ()
 (interactive)
 (move-kept-selection #'previous-page))

(in-package "user")

(global-set-key #\PageUp 'previous-page-kept-selection)
(global-set-key #\PageDown 'next-page-kept-selection)

;; インクリメントサーチに
(require "isearch")

;; リージョンのハイライト
;; http://www2.ocn.ne.jp/~cheerful/script/xyzzy/mode/regionhilight.html
;; リージョンの色は「ニセ反転色」で変更
(load-library "region-hilight.l")

;; 一括インデント
;; http://www.quels.net/tatutoki/code/xyzzy.html
; 一括インデント(セレクション/保持) 2008/09/14
(defun indent-selection-hold()
 (interactive "*")
 (save-excursion
   (if (pre-selection-p)
       (selection-start-end (start end)
         (shift-region start end 1)
         (start-selection 2 t)
         ))))
; 一括アンインデント(セレクション/保持) 2008/09/14
(defun unindent-selection-hold()
 (interactive "*")
 (save-excursion
       (if (pre-selection-p)
               (selection-start-end (start end)
                 (unshift-region start end 1)
                 (start-selection 2 t)
                 ))))

;;(global-set-key #\M-\.  'indent-selection-hold)
;;(global-set-key #\M-\,  'unindent-selection-hold)

; 一括インデント(リージョン/保持) 2008/09/14
(defun indent-region-hold()
 (interactive "*")
 (save-excursion
       (if (mark)
               (shift-region (region-beginning) (region-end) 4)
         )))
; 一括アンインデント(リージョン/保持) 2008/09/14
(defun unindent-region-hold()
 (interactive "*")
 (save-excursion
       (if (mark)
               (unshift-region (region-beginning) (region-end) 4)
         )))
; キーバインド
(global-set-key #\M-\. 'indent-region-hold)
(global-set-key #\M-\, 'unindent-region-hold)

;; ruby-mode
;; http://homepage3.nifty.com/Yukimi_Sake/
;; JRuby対応
;; ruby-mode.l
;;   1. 39行目
;;     (defvar *ruby-prog* "ruby")
;;     ->
;;     (defvar *ruby-prog* "jruby")
;;   2. 674行目
;;    (make-process (concat "ruby -r irb -e " irb-start-script )
;;    ->
;;    (make-process (concat "jruby -r irb -e " irb-start-script )
;;   3. バイトコンパイル
;;    修正したruby-mode.lをバイトコンパイルする
;;    M-x: byte-compile-file [ENTER]
;;    ruby-mode.lの場所を指定して[ENTER]
(load-library "ruby-mode")
(push '("\\.rb$" . ruby-mode) *auto-mode-alist*)

というわけで、「Eclipse+Emacsキーバインドユーザのための」とかっていうタイトルを付けたんだけど、結局は自分メモな感じです。なんか他にもあれば、このページに追加していこうかなと。

追記
  • 2011/01/25 ruby-modeの設定を追加