=============================================== 1999.6.07 発行 =========
         極私的 Emacs カスタマイズ紹介マガヂン
            Emacs をわたし色に染めて♪
------------------------------------------------------------------------
        第 4 回  禁断の VZ 化(1) Ctrl+英字
------------------------------------------------------------------------
※あなたのカスタマイズをぜひ教えてください。一般的なものから、他の人は
 絶対にしないような「外道」なものまで、何でも結構です。

※解除の方法は、このメールの末尾をごらんください。
========================================================================

	こんにちは。でるもんた・いいじま です。

	今回は時間がないので、いちばんオイシイところでありながら、
	半分手抜きになっています。

	この埋め合わせは次回以降でしますのでご容赦ください。

	■■【緊急告知 アドレスが変わります】■■■■■■■■■■■■■■
	■6/12(土)から、メールアドレス・ホームページアドレスとも、  ■
	■次のように変更になります。                  ■
	■ メール(旧)g740564@komaba.ecc.u-tokyo.ac.jp        ■
	■    (新)L94102@mail.ecc.u-tokyo.ac.jp          ■
	■                               ■
	■ WWW(旧)http://user.ecc.u-tokyo.ac.jp/~g740564/emacs/   ■
	■    (新)http://user.ecc.u-tokyo.ac.jp/~l94102/emacs/    ■
	■      ※~ のあとの文字は L の小文字です         ■
	■                               ■
	■メールについては当分(8 月末まで)は旧アドレスでも届きますが、■
	■WWW については 6/12 以降は新アドレスのみとなります。     ■
	■                               ■
	■なお、新アドレスは 6/12 から有効ですので、6/11 までは     ■
	■旧アドレスをご利用ください。                 ■
	■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

☆目次☆

	◇前回の補足
	◇本日のお題

	◇さっそく VZ 化しやう
	◇C-k と C-q
	◇まっとうな社会と折り合ひをつける

	◇今週のワンポイント
	◇次回予告

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆前回の補足☆

	●M-x html-mode としても no match と出ます。
	 うちでは、拡張子が html のファイルを開くと c++-mode になります。

		どうやら、html-mode は Emacs に標準でついてくるものでは
		ないようですね。

		詳細は次回のテーマと関係するので次回にまわしますが、
		今すぐ使いたいという場合は、http://www.goo.ne.jp/ か
		何かの検索エンジンで「html-mode.el」をキーワードにして
		検索するとすぐ見つかります。

	●Emacs のデフォルトのインデントの流儀が気に入らないというけれど、
	 c-mode や pascal-mode のままでも、簡単なカスタマイズで変えられる
	 はずです。そちらも紹介した方がいいのでは?

		ご指摘の通りです。

		しかしながら、このようなカスタマイズについては、
			○いろいろなところに資料がありふれている
			○私自身が使わないので、知らないし、
			 調べようという motivation が起こらない
		ため、説明を省かせていただきました。

		申し訳ございませんが、今後取りあげる予定も今のところは
		ございませんので、ご了承のほどお願いします m(_ _)m

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆本日のお題☆

	「禁断の VZ 化(1) Ctrl+英字」

	エディタの使ひ方で、いちばん人の好みがあらはれるのが、
	キィ操作です。私は VZ 出身なので、Emacs でも秀丸でも VZ 風の
	操作にしてゐますが、世の中には秀丸で Emacs 風の操作にしてゐる
	人がたくさんいらっしゃいます。それに、意外に思はれるかもしれ
	ませんが、Emacs には vi-mode といふものがあって、UNIX 管理人
	御用達「vi」風の操作にもできるのです。

	今回は私の例として、VZ 風の操作設定をご紹介します。

	もちろん、お好みに応じて、たとへば Windows 風に C-x、C-c、C-v が
	cut, copy, paste(Emacs のコマンドではそれぞれ kill-region、
	copy-region-as-kill、yank)になるやうな設定にしてもかまひません。

				☆

	ところで、このやうにしてしまふと、標準の設定を前提に書かれた資料
	を読むときに苦労します。たとへば、「C-x 5 2 と入力してください」
	と書いてあったとしても、C-x がすでに別の意味になってしまって
	ゐては、意図した通りにはなりません。

	そこで、このやうな「まっとうな Emacs 社会」と折り合ひをつける
	ために、私がとってゐる対策をご紹介します。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

☆さっそく VZ 化しやう☆

	今回はいきなり ~/.emacs の書き換へから入ります。

	;(global-set-key "\C-a" 'beginning-of-line)
	(global-set-key "\C-b" 'set-mark-command)
	(global-set-key "\C-c" 'scroll-up)
	(global-set-key "\C-d" 'forward-char)
	(global-set-key "\C-e" 'previous-line)
	(global-set-key "\C-f" 'end-of-line)
	;(global-set-key "\C-g" 'delete-char)
	(global-set-key "\C-h" 'delete-backward-char)
	(global-set-key "\C-i" 'tab-to-tab-stop)
	(global-set-key "\C-j" 'yank)
	(global-set-key "\C-k"  VZ-Ctrl-K)
	;(global-set-key "\C-l" 'recenter)
	;(global-set-key "\C-m" 'newline)
	(global-set-key "\C-n" 'next-line)
	(global-set-key "\C-o" Delmonta-Ctrl-O)
	(global-set-key "\C-p" 'quoted-insert)
	(global-set-key "\C-q"  VZ-Ctrl-Q)
	(global-set-key "\C-r" 'scroll-down)
	(global-set-key "\C-s" 'backward-char)
	(global-set-key "\C-t" 'kill-word)
	(global-set-key "\C-u" 'advertised-undo)
	(global-set-key "\C-v" 'overwrite-mode)
	;(global-set-key "\C-w" 'kill-region)
	(global-set-key "\C-x" 'next-line)
	(global-set-key "\C-y" 'kill-line)
	;(global-set-key "\C-z" '-----------)

	この中で、いくつか「;」でコメントアウトしてあるものがあります。
	これは次のやうな理由によります。

		○C-a、C-m は、最初から望みの設定になってゐたので、
		 変更する必要がない。
		○C-g、C-w、C-z は、敢へて VZ 化しないで Emacs の流儀に
		 合はせてある。
		○C-l は使はないので、Emacs の初期設定のままにしてある。

	また、上の中で、C-k、C-o、C-q には「'」がついてゐません。これに
	ついては次でふれることにします。

	【補足】C-g は VZ 風では delete-char ですが、これは他のキィで
		代用できます。一方、keyboard-quit は適切なものが
		見当たりません。そのため C-g はそのままにしてあります。

		C-w/C-z は VZ では前候補・次候補検索です(と思ふ…もう
		VZ そのものは使ってゐないので記憶が定かでないのです)が、
		kill-region、suspend-emacs(X 上では iconify-or-deiconify-
		frame)のほうが重要なので、そのままにしてゐます。

		C-l は VZ では「現在カーソルが乗ってゐる単語を、検索対象
		文字列として取得する」ですが、私には不要に思はれます。

	【補足の補足】Emacs では、いちど範囲指定すると、指定範囲を対象と
		するコマンドを実行しても範囲指定が解除されません。また、
		キー操作で範囲指定しても、マウスでの指定と違って通常は
		網掛け表示されません。そのため、C-y で「範囲指定されて
		いれば範囲を、指定されてゐなければ行を削除」とするのは
		危険だと判断しました。

		なお、Emacs をコンソールではいっさい使はないという場合は、
		(transient-mark-mode t) とすることによって、範囲指定されて
		ゐればそれが常に表示されるやうになりますので、それを前提に
		自分でマクロを組むといふ方法もあります。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆後日補足 - C-x と Wnn の問題☆

	Emacs の版によっては、C-x をこのように書き換えてしまうと、
	Wnn を起動しようとして C-\ を押した時点で、カーソル移動などのコマ
	ンドなどは使えても通常の文字入力が全くできなってしまう、という問題
	が生じます。

	具体的には、Mule 2.3 ではこのように書き換えてしまっても大丈夫ですが、
	XEmacs の場合に問題が生じます。

	この対応策については、第 24 回をご覧ください。「対策その 2」の項です。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆C-k と C-q☆

	さて、次は C-k と C-q です。
	ここはたしかに、
		(global-set-key "\C-kc" 'yank)
	のやうにしてもいいのですが、敢へて次のやうに、C-k と C-q に
	「VZ-Ctrl-K」「VZ-Ctrl-Q」という名前をつけます。

		(setq VZ-Ctrl-K (make-sparse-keymap))
		(global-set-key "\C-k" VZ-Ctrl-K) ;「'」はつけない
		(define-key VZ-Ctrl-K "k" 'copy-region-as-kill)
		(define-key VZ-Ctrl-K "c" 'yank)
		; 本当はもっとたくさん書くのだらうけど、私はこれしか
		; 使ってゐないので省略

		(setq VZ-Ctrl-Q (make-sparse-keymap))
		(global-set-key "\C-q" VZ-Ctrl-Q) ;「'」はつけない
		(define-key VZ-Ctrl-Q "j" 'goto-line)
		; 省略 - 同上

		(setq Delmonta-Ctrl-O (make-sparse-keymap))
		(global-set-key "\C-o" Delmonta-Ctrl-O) ;「'」はつけない

	これはどうしてかといふと、もし C-k を他の機能にまはさざるを
	得なくなった場合に、たとへば 2 行目を
		(global-set-key "\M-k" VZ-Ctrl-K)
	とするだけで、今まで C-k を押してゐたかはりに M-k を押す、
	という設定に変へることができるからです。もし
		(global-set-key "\C-kc" 'yank)
	のやうに書いてしまったら、設定の数だけ書き換へが必要になって
	しまひます。

	【補足(1)】C-o には、今のところ何も割り当ててゐません。
		これはあとでコマンドを自作したりするときに使ひます。
		私は Wnn 使ひなので C-o が空いてをり、そのため VZ の
		慣習に従って C-o を選びましたが、Canna な人は C-o が
		ふさがってぃるので、別なキィを使ふとよいでせう。

	【補足(2)】(setq VZ-Ctrl-K (make-sparse-keymap)) は、(global-set-key
		"\C-k" VZ-Ctrl-K) や (define-key VZ-Ctrl-K ...) よりも先
		に書く必要があります。ですから、上の setq は、C-a〜C-z の
		書き換へより先に書くことになります。C-q や C-o についても
		同様です。

		ただし、global-set-key と define-key は、どちらが先でも
		かまひません。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆まっとうな社会と折り合ひをつける☆

	さて、最後の難関がこれです。
	私は、次のやうな対策をすることにしました。

	(setq Meta-Original (make-sparse-keymap))
	(global-set-key "\M-o" Meta-Original)

	(define-key Meta-Original "\C-b" 'backward-char)
	(define-key Meta-Original "\C-c" 'mode-specific-map)
	(define-key Meta-Original "\C-d" 'delete-char)
	(define-key Meta-Original "\C-e" 'end-line)
	(define-key Meta-Original "\C-f" 'forward-char)

	(define-key Meta-Original "\C-h" help-map)

	(define-key Meta-Original "\C-k" 'kill-line)

	(define-key Meta-Original "\C-p" 'previous-line)
	(define-key Meta-Original "\C-q" 'quoted-insert)
	(define-key Meta-Original "\C-r" 'search-backward)
	(define-key Meta-Original "\C-s" 'search-forward)
	(define-key Meta-Original "\C-t" 'transpose-chars)
	(define-key Meta-Original "\C-u" 'universal-argument)
	(define-key Meta-Original "\C-v" 'scroll-up)

	(define-key Meta-Original "\C-x" ctl-x-map)
	(define-key Meta-Original "\C-y" 'yank)

	つまり、C-x の本来の機能がほしい場合は M-o C-x ... とする、
	という方式です。これで、書籍などに「C-x 5 2」や「C-u C-x C-f」と
	書いてあっても、「M-o C-x 5 2」「M-o C-u M-o C-x C-f」と読み替へ
	るだけで、難なく対処できます。

	なほ、デフォルトで C-h/C-x に割り当てられてゐたのが help-map、
	ctl-x-map という名前だったおかげで、C-h a や C-x C-f などたくさんの
	記述をしなくても済んでゐる、といふことにも注目してください。

	【補足】2 番目の例は、C-u の前だけでなく C-x C-f の前にも M-o を
		つける必要があることに注意してください。

		なお、C-x C-f の件については、あとでこの機能を
		M-f o に割り付けるといふことをします(^^;)
		次々回の予定ですので、お楽しみに。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

☆今週のワンポイント: apropos☆

	今回は、コマンドの仕様を調べる「apropos」です。

	Emacs を使っていると、
		「あれ、この変数はいくつに設定すればいいのかな?」
		「こんな名前のコマンドがあったはずなんだけど、
			何だったっけ?」
		「意味からするとこういう名前になりそうなんだけど、
			こんな機能の関数はないかなぁ?」
	と思うことがあります。

	そういうときに、
		M-x apropos RET 変数・関数・コマンド名の一部 RET
	とすると、それに当てはまる変数・関数・コマンドが表示され、
	さらにそれにカーソルを合わせてリターンキーを押すと、詳しい
	解説が表示されます。

	「変数・関数・コマンド名の一部」には正規表現が使えます。
	たとえば、「^kill-」と指定すれば、「kill-」ではじまる名前の
	コマンド等が一覧表示されます。

	なお、command-apropos というコマンドもあります。これは、デフォル
	トのキー設定では C-h a、今回変更した流儀では M-o C-h a で実行
	できます。こちらは、条件にあうコマンド名は表示しますが、変数や、
	コマンドとしては使えない関数(setq など)は表示しません。
	コマンドを探したいときはこちらの方がいいでしょう。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

☆次回予告☆

	次回は、当初の予定を変更して
	「第 5 回 便利なマクロ(1)タブ幅の指定とクリップボードスタック」
	です。

	Emacs には、不思議なことに「タブ幅を 4 桁に指定する」という
	コマンドがありません。私は通常は 8 桁固定なのですが、ときどき
	タブ=4 のファイル(C のソースなど)が渡されることがあり、
	そういうときには困ってしまいます。まずはその対策をするマクロです。

	また、今回のカスタマイズで C-j を変へた人は、C-j の機能が、本来
	C-j にあるべきものではなく、C-k c と同じになってしまってゐます。
	これを正しい C-j にするマクロも紹介します。

	それでは、また来週♪
========================================================================
極私的 Emacs カスタマイズ紹介マガジン Emacs をわたし色に染めて♪

☆発行人☆

        でるもんた・いいじま

		※メールアドレス・ホームページは冒頭の告知をご覧ください。

☆配信☆
        このメールマガジンは、「インターネットの本屋さん・まぐまぐ」を
        利用して配信しています。
                http://www.mag2.com     (マガジン ID=0000013484)

☆バックナンバー・登録解除・メールアドレス変更は☆

	上記のホームページまでどうぞ。
	なお、手動での登録解除は行っておりませんのでご了承下さい。
=========================================================================

Copyright © IIJIMA Hiromitsu aka Delmonta, 2016/03/10 15:09 JST
これは「古文書」です。 古くなった情報も原則未修正で保存していますのでご注意ください。

古文書本館トップ | 電脳外道学会