xyzzy の設定 自分用備忘録

初版 2011.1.5  最終改訂 2018.9.15

xyzzy は Windows 上で動作する emacs 風のエディタである。 unix 上の emacs に馴れた人にとっては非常に使いやすい。 ただし、若干異なっている面もある。

xyzzy の設定は以下のとおり。

・ 設定ファイルは .xyzzy

デフォルトの位置は c:\users\user-name\documents

   ショートカットの名前として、ピリオドで始まるショートカット名は
  使えないため、別の場所に置いてショートカットで参照することは出来ない。

  ただし、環境変数 XYZZYHOME を設定すれば、別の場所に置くことも
  可能。

・色の設定など「ツール」→「共通設定」, 「ツール」→「ローカル設定」で
  設定する項目は xyzzy\user\user-name\wxp\xyzzy.ini の中に書きこまれる。

・ キーの指定の仕方が .emacs とは異なる
   1 ストロークキーは #\C-x     2 ストロークキーは '(#C-x #C-u)

・ scroll-down というコマンドはない。previous-page が該当する

・ perl のソースファイルを編集する

拡張子を pl にすると perl モードになる。
tab を押すと 2 文字しか空白が入らない。4 文字入れたいのだが・・・
とりあえず M-x fundamental-mode として回避する。

・ 拡張子ごとに行間を変える ← 挫折した

行間の指定は xyzzy\user\user-name\wxp\xyzzy.ini の中に

   lineSpacing=10

のように書き込まれている。lineSpacing という変数は
M-x set-variable では見えない。

.xyzzy では指定できないようだ。

起動時に -ini オプションによって ini ファイルを明示することは出来るので、
teraterm のようにオプションが異なるショートカットを複数用意することにより
切り替えることは出来そうだ。

ダブルクリックによってファイルを開いたときは、拡張子ごとに
設定する。

ちなみに、.emacs の記述をそのまま持ってきてもうまくいかない。

(setq auto-mode-alist (cons (cons "\\.txt$" 'text-mode) auto-mode-alist))

上の命令は「auto-mode-alist という変数は存在しない」というエラーが
出る。

・タブ幅の設定

(setq *tab-columns* 4)

モードごとに設定するには  <---- 未確認

(add-hook 'text-mode-hook '(lambda ()
;    (setq lineSpacing 20)   lineSpacing という変数はない
    (setq *tab-columns* 4)
) t)

---------------------------------------------------------

現在の .xyzzy は以下の通り。

--------------- ここから ---------------
;  インクリメンタルサーチ

(load-library "isearch")

;  IME の起動

 (global-set-key #\C-t 'toggle-ime)

;  確認しながら置換

 (global-set-key #\M-% 'query-replace)

; デフォルトのフォルダ

(set-default-directory "d:/users/user-name/documents") 

;----------- キーのカスタマイズ ------------

(global-unset-key #\C-q)
(global-unset-key #\C-j)

;   -- 1 ストロークキー -----

(global-set-key #\C-o 'previous-page)

;   -- 2 ストロークキー -----

;  C-c 系列
(global-set-key '(#\C-c #\C-x) 'kill-selection-to-clipboard)
(global-set-key '(#\C-c #\C-c) 'copy-selection-to-clipboard)
(global-set-key '(#\C-c #\C-v) 'paste-from-clipboard)

;  ESC 系列

;(global-set-key '(#\M- \C-r) 'isearch-backward-regexp)
;(global-set-key '(#\M-s) 'query-replace-regexp)
;(global-set-key '(#\M-g) 'fill-region)

;  C-q 系列

(global-set-key '(#\C-q #\C-r) 'beginning-of-buffer)
(global-set-key '(#\C-q #\C-c) 'end-of-buffer)
(global-set-key '(#\C-q #\C-q) 'quoted-insert)
(global-set-key '(#\C-q #\C-j) 'goto-line)
(global-set-key '(#\C-q #\C-f) 'forward-word)

;  C-j 系列

(global-set-key '(#\C-j #\C-j) 'compile)
(global-set-key '(#\C-j #\C-f) 'forward-word)
(global-set-key '(#\C-j #\C-b) 'backward-word)
(global-set-key '(#\C-j #\C-s) 'shell)
(global-set-key '(#\C-j #\C-g) 'goto-line)
(global-set-key '(#\C-j #\C-o) 'open-line)
(global-set-key '(#\C-j #\C-m) 'load-my-mode)
(global-set-key '(#\C-j #\C-a) 'abbrev-mode)
(global-set-key '(#\C-j #\C-h) 'help-for-help)

;  C-x 系列

(global-set-key '(#\C-x #\C-b) 'buffer-menu)
(global-set-key '(#\C-x #\u) 'undo)

; 以下の記述では複数のファイルが開いているとき、
; カレントバッファ以外はセーブしてくれないので、
; 没にする

;(global-set-key '(#\C-x #\C-c) 'save-buffers-kill-xyzzy)

(defun save-buffers-kill-xyzzy ()
  (interactive)
  (save-buffer) 
  (kill-xyzzy) 
)
;  <変数の設定方法>
;
; (1) M-x describe-variable で space を押し、
;     変数の一覧を表示させる。
;
;     目的とする変数名を見つける
;
; (2) .xyzzy で (setq 変数名 値) と設定する。
;

(setq *tab-columns* 4)

; 拡張子が tit のときは 48 文字で折り返す
; それ以外は 80 文字で折り返す
;
; <参考>
; http://hie.s64.xrea.com/xyzzy/note/coloring.html#change-color-with-extension
; http://xyzzy.jp/reference/wiki.cgi?p=set%2Ddefault%2Dfold%2Dwidth

(add-hook '*find-file-hooks*
  #'(lambda ()
    (let ((ext (pathname-type (get-buffer-file-name (selected-buffer)))))
;  cond は 1 回マッチするとそれ以下は見ない
;  t は常に真なので else に相当
        (cond
        ((equal ext "tit") (set-default-fold-width 48))
        ((or (equal ext "xxx")(equal ext "yyy")(equal ext "zzz"))
                           (set-default-fold-width 80))
	(t                 (set-default-fold-width 80))
	))))
-------------------------- ここまで ------------------------------