============================================== 2000.01.24 発行 =========
         極私的 Emacs カスタマイズ紹介マガヂン
            Emacs をわたし色に染めて♪
------------------------------------------------------------------------
             第 20 回 デリイトキイは BS にあらず・ふたたび
------------------------------------------------------------------------
※あなたのカスタマイズをぜひ教えてください。一般的なものから、他の人は
 絶対にしないような「外道」なものまで、何でも結構です。

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

	だいぶ遅くなりましたが、あけましておめでとうございます(^^;)
	でるもんた・いいじまです。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆刊行周期変更のお知らせ☆

	いままで、当マガヂンは建前上「週刊」という形になっておりました
	(実際はほぼ隔週になってしまいましたが)が、「看板に偽りあり」の
	ままの状態を続けるのもどうかと思いまして、今回より「不定期」と
	させていただきたいと思います。

	というのは、これからしばらくの間、前回御紹介した「Windows 95/98
	管理人のための MS-DOS 基礎講座」のほうに力点を置きたく、Emacs の
	ほうにはなかなか時間が割けないこと、もうひとつは、Emacs のほうは
	ネタ切れに近い状態になっており、新しいネタの開拓(新しいマクロの
	開発など)にはさらに時間がかかるためです。

	とはいえ、当分の間は、今の月 2〜3 回くらいのペースを維持したいと
	思っております。

	というわけで、今後ともよろしくお願いします。

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

☆今回のお題☆

	今回は、「デリイトキイは BS にあらず・ふたたび」と題して、
	古い話題を蒸し返します、もとい、新しい情報が入ったので、今回は
	このことを取り上げたいと思います。

	なお、この情報は、ネットニュースの fj.editor.mule での私の投稿に
	対するフォロー記事がきっかけとなっております。あえて名前は出し
	ませんが、ご指摘いただいた方にこの場を借りてお礼申し上げます。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆delete, backspace と DEL☆

◇第 2 回より

	第 2 回で、単に
		(global-set-key "\177" 'delete-char)
	では、Delete キーと Backspace キーがともに delete-char になって
	しまう、という話をしました。そして、これを回避し、Backspace キーは
	C-h として扱われるようにするために、ちょっと複雑なオマジナイを
	書いたのでありました。

	ところがじつは、X 上では、"\177" のかわりに [delete] や [backspace]
	を使えば、Delete キーと Backspace キーに別々の機能を割り振ることが
	できるのです。
		(global-set-key [delete] 'delete-char)
		(global-set-key [backspace] 'delete-backward-char)
	さらに、これを使えば、Delete と Backspace に別々の機能を割り振った
	上で、C-h をヘルプのままにすることができます。

	なお、上の 2 つの global-set-key を実行した上で、M-x describe-key
	(標準のキー操作だと C-h k、飯嶋式だと M-o C-h k または M-h k)で
	Delete、Backspace キーを調べてみると、いままではどちらも「DEL」と
	出ていたのが、「delete」「backspace」と区別されているのがわかります。

	さらに、これを設定したあとで、
		(global-set-key "\177" 'delete-backward-char)
	のように、\177 に別のコマンドを割り当ててみても、[delete] の設定の
	ほうが優先されます。

	【補足】コンソール上では、上のふたつの global-set-key は意味を
	    持ちません。コンソール上では、第 2 回で述べたとおり、Back-
	    space は C-h とかならず等価ですし、Delete キーは \177 で
	    定義します。

◇delete, backspace と DEL の意味

	実は、「delete」や「backspace」は、第 18 回で扱った X のキーシンボル
	「Delete」「BackSpace」に対応するもので、「Delete キー」「Backspace
	キー」(厳密にいえば、Delete/BackSpace キーシンボルが割り当てられて
	いるキー)という意味になります。

	いっぽう、「DEL」のほうは、じつは、[127] や "\177" の別名にすぎ
	ないのです。

	【補足】この [127] や "\177"(他に "\x7F" とも書けます)は、「文字
	    コードが 10 進数で 127 番の文字」という意味になります。
	    177 はそれを 8 進数で書いたもの、7F は 16 進数で書いたもの
	    です。

	    ちなみに、ご存じない方のために挙げておくと、半角文字の
	    文字コードは次のようになっています。

		8進           000  020  040 060 100 120 140 160
		    10進        0   16   32  48  64  80  96 112
		         16進  00   10   20  30  40  50  60  70
		-------------+--------------------------------------
		  +0  +0   +0|C-@  C-p  SPC  0   @   P   `   p
		  +1  +1   +1|C-a  C-q   !   1   A   Q   a   q
		  +2  +2   +2|C-b  C-r   "   2   B   R   b   r
		  +3  +3   +3|C-c  C-s   #   3   C   S   c   s
		  +4  +4   +4|C-d  C-t   $   4   D   T   d   t
		  +5  +5   +5|C-e  C-u   %   5   E   U   e   u
		  +6  +6   +6|C-f  C-v   &   6   F   V   f   v
		  +7  +7   +7|C-g  C-w   '   7   G   W   g   w
		 +10  +8   +8|C-h* C-x   (   8   H   X   h   x
		 +11  +9   +9|C-i* C-y   )   9   I   Y   i   y
		 +12 +10   +A|C-j  C-z   *   :   J   Z   j   z
		 +13 +11   +B|C-k  C-[*  +   ;   K   [   k   {
		 +14 +12   +C|C-l  C-\   ,   <   L   \   l   |
		 +15 +13   +D|C-m* C-]   -   =   M   ]   m   }
		 +16 +14   +E|C-n  C-^   .   >   N   ^   n   ~
		 +17 +15   +F|C-o  C-_   /   ?   O   _   o  DEL
		-------------+----------------------------------------
		* C-h=BS、C-i=TAB、C-m=RET、C-[=ESC

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆function-key-map と DEL の話☆

	じつは、この delete/backspace と DEL の違いには、第 14 回で出てきた
	function-key-map が一枚からんでいます。

	X 上で Emacs を起動し、M-x describe-variable(標準式=C-h v、飯嶋式
	=M-h v)や M-x apropos で function-key-map を調べてみると、その中に、

		(delete . [127]) (backspace . [127])

	と書いてあるのがわかりますし、/usr/local/share/emacs/19.34/lisp/
	term/x-win.el には、

		(define-key function-key-map [backspace] [127])
		(define-key function-key-map [delete] [127])

	という記述があるのがわかります。

◇復習:function-key-map って?

	さて、function-key-map というのは、「ある特定のキー(またはキー列)
	が押されたら、別のあるキーが押されたものとして扱ってください」という
	ことを記述するためのものでした。第 14 回では、これを使って、ファン
	クションキーやカーソルキーがコンソール上でどのように処理されている
	のかを説明しました。

	上でわかるように、X 上では、「delete キーや backspace キーが押さ
	れたら、\177(DEL 文字)が押されたものとして扱ってください」という
	設定がなされていたのです!

◇global keymap と function-key-map との関係

	さて、第 14 回で述べたとおり、function-key-map には、

		function-key-map に記述されているものと同名のキーが
		global keymap や local keymap にもあったときには、
		優先順位は local keymap→global keymap→function-key-map
		の順になる

	という規則がありました。

	今までは、global keymap には、[delete]、[backspace] という名前では
	何も設定していなかったので、function-key-map の設定にしたがって、
	\177 と見なされてきました。冒頭で紹介した
		(global-set-key [delete] 'delete-char)
	は、明示的に global keymap に設定してやることにより、function-
	key-map よりもそちらを優先させているのです。

◇第 2 回、じつは…

	では、ここで第 2 回の設定を読み返してみましょう。

		(define-key function-key-map [backspace] [8])
		(put 'backspace 'ascii-character 8)

	そうです、これはまさに、上の function-key-map を書き換えていたの
	です!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆fence-mode-map の件☆

	続いては、第 11 回の fence-mode-map の話になります。

	┌───────注意────────────────────────┐
	│以下には Wnn 関係の設定方法が書かれていますが、この方法は、そのま │
	│までは Emacs 20.x 以降や XEmacs では使えません。Emacs 20.x 以降や │
	│XEmacs をご利用の場合は、第24回・第25回をあわせてお読み下さい。   │
	└─────────────────────────────────┘

	第 11 回では、

	> (define-key fence-mode-map "\177" 'fence-delete-char)
	> (define-key fence-mode-map [delete] 'fence-delete-char)
	(中略)
	> 最後にデリートキーですが、ここでは "\177" と [delete] の両方に
	> 書いています。通常は "\177" だけで大丈夫なのですが、fence- に
	> 限っては、デリートキーに対しては、コンソール上では "\177" の、
	> X 上では [delete] の設定が有効になるようで、どちらか一方を省略
	> することはできません。

	と書きましたが、じつはこれは、
		(define-key fence-mode-map "\177" 'fence-delete-char)
		(define-key fence-mode-map [delete] nil)
	としてもかまいません。ただし、この方法を使う場合、
		(global-set-key [delete] 'delete-char)
	とすることはできません。こうしてしまうと、フェンスモード(ローマ字
	仮名入力の [あ] の状態)では、Delete キーで、フェンスの外側まで
	消せるようになってしまうからです。

	どうしてなのかは、/usr/local/share/emacs/19.34/lisp/wnn.el を眺め
	ながら、よく考えてみてください。

	【ヒント】この状態で、function-key-map、fence-mode-map、global
	     keymap の優先順位はどうなっているでしょうか? デフォルト
	     では、このそれぞれでは Delete キーにどのような設定がなさ
	     れているでしょうか?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆おまけ - Ctrl, Meta, Shift の話☆

	じつは、function-key-map の中に、おもしろいものを見つけました。

	(24 keymap (64 keymap (99 . event-apply-control-modifier)
	                      (83 . event-apply-shift-modifier)
	                      (97 . event-apply-alt-modifier)
	                      (109 . event-apply-meta-modifier)
	                      (115 . event-apply-super-modifier)
	                      (104 . event-apply-hyper-modifier)
	))

	これによると、文字コード 24 番(C-x)、64 番('@')、99 番
	(小文字の 'c')のキーを順に押すと、Control を押したことになる、
	と書いてあるようです。というわけで、

		% emacs -q

	で Emacs を起動し、C-x @ c h と入力してみると、たしかに、
	C-x @ c h で C-h と見なされているようです。

	【補足】-q オプションは、「.emacs を読まない」という意味です。
	    すでに .emacs で C-x を再定義している場合は、このオプ
	    ションが必要です。

	C-x が使えない場合は、たとえば
		(define-key function-key-map "\C-o\C-c"
			'event-apply-control-modifier)
	のようにするとよいでしょう。

	【補足】event-apply-なんとか-modifier は、function-key-map では
	    上のような方法で使えますが、他のキーマップでは使えません。

	しかし残念ながら、コンソール上の場合、たしかに、普通の文字キー
	ではうまくいくのですが、ファンクションキーに関してはダメです。
	たとえば、C-x @ c f7(ここで、f7 の実体は ESC [ 1 8 ~ です)と
	入力してみても、C-f7 とは見なされず、C-ESC [ 1 8 ~ とみなされる
	ようです。このへんに関しては、もし詳しいことが分かればまた御紹介
	したいと思います。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆次回予告☆

	次回の予定は…未定です。

	新しいネタの開拓は考えてはいるのですが、見つからなければ、
	今までのマクロの秀丸版でお茶を濁すかもしれません(^^;)

	それではまた♪

========================================================================
極私的 Emacs カスタマイズ紹介マガジン Emacs をわたし色に染めて♪

☆発行人☆

        でるもんた・いいじま <L94102@mail.ecc.u-tokyo.ac.jp>
                        http://user.ecc.u-tokyo.ac.jp/~l94102/emacs/

                ※このメールマガジンで取り上げてほしいテーマ、ご意見など
                 ありましたら、上のメールアドレスまでお気軽にどうぞ。

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

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

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

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

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