=============================================== 1999.9.07 発行 =========
         極私的 Emacs カスタマイズ紹介マガヂン
            Emacs をわたし色に染めて♪
------------------------------------------------------------------------
      第 11 回 エイトック的たまご生活 (2) キィ操作編
------------------------------------------------------------------------
※あなたのカスタマイズをぜひ教えてください。一般的なものから、他の人は
 絶対にしないような「外道」なものまで、何でも結構です。

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

	こんにちは。でるもんた・いいじまです。
	たびたび遅配が続いて申し訳ありません。

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

☆今回のお題☆

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

	今回は、Wnn でのキー操作の変更です。

	ただし、いろいろと長くなりますので、今回はとりあえず
		○「Control+英字」の変更
		○ファンクションキーの追加
	をご紹介します。

	実は私としては、いちばん気になる「コンソール上でカーソルキーが
	きかない問題」を何とかしたいと思っています。この問題とは、
		○X 上の mule では、Wnn でのローマ字カナ入力中にカーソル
		 キーを押すと、期待通りにカーソルが動いてくれる
		○ところが、コンソールから mule を起動すると、カーソルは
		 動かず、ブザーがなってから 'A'〜'D' の文字が入力される
	という問題です。解決の目処は立っているのですが、これは今回では
	なく第 13 回でご紹介したいと思います。また、コンソール上でも
	ファンクションキーが使えるようにする方法も、第 13 回でご紹介したい
	と思います。

	【後日訂正】実際には第 14 回です。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆Emacs 20 以降や XEmacs をお使いの方へ☆

	Emacs 20 以降や XEmacs では、いったん C-\ で Wnn を起動してからで
	ないと、「Symbol's value as variable is void: fence-mode-map」など
	とエラーになってしまいます。

	この対策は、第 24 回で取り上げます。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆まずは Control+英字 系統☆

	いきなりキーを書き換えます。
	基本的な要領としては、第 4 回でやったとおりです。

	(define-key fence-mode-map "\C-h" 'fence-backward-delete-char)
	(define-key fence-mode-map "\C-d" 'fence-forward-char)
	(define-key fence-mode-map "\C-s" 'fence-backward-char)
	(define-key fence-mode-map "\C-f" 'fence-end-of-line)
	(define-key fence-mode-map "\177" 'fence-delete-char)
	(define-key fence-mode-map [delete] 'fence-delete-char)
	(define-key fence-mode-map "\C-y" 'fence-kill-line)

	(define-key henkan-mode-map "\C-h" 'henkan-quit)
	(define-key henkan-mode-map "\C-d" 'henkan-forward-bunsetu)
	(define-key henkan-mode-map "\C-e" 'henkan-previous-kouho)
	(define-key henkan-mode-map "\C-x" 'henkan-next-kouho)
	(define-key henkan-mode-map "\C-s" 'henkan-backward-bunsetu)
	(define-key henkan-mode-map "\C-f" 'henkan-last-bunsetu)

	まず、fence-mode-map と henkan-mode-map の違いについて説明して
	おきます。fence-mode-map は、かな入力時、つまり、画面の左下に
	[あ] と出ているときに使われるキーマップです。一方、henkan-mode-
	map は、漢字に変換されたあと、つまり、画面の左下に [漢] と出て
	いるときに使われるキーマップです。

	さて、やっている設定としては、
		○C-s、C-d、C-e、C-x でカーソルが動く
		○C-a、C-f でカーソルが先頭・末尾に移動する
		○C-h はヘルプではなくバックスペース
		○デリートキーはカーソルの手前ではなくカーソル位置の
		 文字を消す
	ということです。

	まず、カーソル移動についてですが、これは当然、VZ の流儀に倣った
	ダイヤモンドカーソルです。なお、fence-、henkan- のどちらにも
	C-a を書いていないのは、もともと C-a にはカーソルを冒頭に戻す
	機能が割り当てられていたからです。また、C-e、C-x(上下移動)は、
	fence- では意味がないので書いていません。

	C-h については、第 2 回で説明した通りです。こうしないと、
	コンソール上では BS キーがヘルプ機能になってしまいます。

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

	【後日補足】(define-key fence-mode-map [delete] nil) とすると、
	      X 上でも "\177" の設定が有効になります。詳細は第 20
	      回で。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆ファンクションキー (1)☆

	つづいてはファンクションキーです。ATOK ユーザーならこう書きたく
	なりますよね↓

		(define-key fence-mode-map [f6] 'fence-hiragana)
		(define-key fence-mode-map [f7] 'fence-katakana)
		(define-key henkan-mode-map [f6] 'henkan-hiragana)
		(define-key henkan-mode-map [f7] 'henkan-katakana)
		(define-key fence-mode-map [f9] 'fence-zenkaku)

	さらに、こういうものもあります。

		(require 'jisx0201) ;jisx0201.el が読み込まれていなければ
		                    ;読み込む
		(define-key fence-mode-map [f8] 'fence-hankaku-katakana)

	ただし、この fence-hankaku-katakana はカナ文字しか半角化して
	くれないので、英数字も半角化してほしい場合は次のようにします。

		(define-key fence-mode-map [f8] 'my-fence-hankaku-katakana)
		(defun my-fence-hankaku-katakana ()
			(interactive)
			(require 'jisx0201)
			(fence-hankaku)           ; 英数字を半角化
			(fence-hankaku-katakana)  ; カタカナを半角化
 		)

	【補足】(1) (require 'jisx0201) は、fence-hankaku-katakana が一度
		   でも実行される前ならいつ実行してもいいので、my-fence-
		   hankaku-katakana の中にいれました。こうすると、必要に
		   なってはじめて jisx0201.el が呼び出されるようになります。

		(2)jisx0201.el を読み込んだあとでは、fence-hiragana、
		   fence-katakana コマンドは半角カタカナを全角カタカナ・
		   ひらがなに変換してくれます。jisx0201.el を読み込ま
		   なければ、これらのコマンドは全角のひらがな←→カタカナ
		   の変換のみで、もし何らかの方法で半角カタカナを入力して
		   いた場合、それは変化しません。

		(3)my-fence-hankaku-katakana を実行したあとに fence-hiragana、
		   fence-katakana を実行しても、半角になった英数字は全角
		   には戻りません。戻したい場合は、fence-zenkaku を使って
		   ください。

		(4)残念ながら henkan-hankaku-katakana はないようです。

	【後日補足】じつは、Wnn はあっても jisx0201.el のない環境という
	      ものが存在します。そういう時の対策は第 xx 回へ。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆ファンクションキー (2)☆

	ファンクションキーはまだあります。

	(global-set-key [(control f7)] 'toroku-region)

	こちらは単語登録ですが、fence-mode-map に指定するのではなく、
	global-set-key を使っています。これは、fence-mode-map が有効なの
	は何か文字を入力したあと(フェンスの中に文字がある状態)だけ
	だからです。

	(global-set-key [f10] 'special-symbol-input)

	こちらは記号入力です。ただし、f10 キーは初期状態では twm-menubar
	コマンド、つまり、メニューバーにあるコマンドをマウスなしで実行
	したいときに使うコマンドになっていて、こちらが使えなくなると不便
	だという場合もあるので、後日、
		○[あ]を表示している状態ならば、special-symbol-input
		○[あ]を表示していない状態ならば、twm-menubar
	になるよう工夫したいと思います。

	【余談】twm-menubar は Windows 風に Meta+Space に割り当てるという
	    方法もあります(^^;)

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆M-x をどうするか☆

	さて、もうひとつ問題があります。それは M-x をどうするかです。
	fence-mode-map、henkan-mode-map では、M-x で任意のコマンドを
	入力するということができません。ということで、これを何とか
	しましょう。

		(define-key  fence-mode-map "\M-x" 'execute-extended-command)
		(define-key henkan-mode-map "\M-x" 'execute-extended-command)

	【後日補足】ここは、わざわざ書かなくても、
	      	(define-key  fence-mode-map "\M-x" nil)
	      	(define-key henkan-mode-map "\M-x" nil)
	      と書けば、{fence,henkan}-mode-map の内容は無視されて
	      global keymap の設定が使われるようになります。

	ただし、ここで問題が起こります。/usr/local/share/emacs/19.34/lisp/
	jisx0201.el(実際の場所は各人の環境によって異なります)の末尾に、

		(define-key fence-mode-map "\ex"  'fence-hankaku-katakana)

	と書いてあるのです。これでは、せっかく上のように M-x を定義しても、
	(require 'jisx0201) が実行された時点で無効になってしまいます。

	そこで次のようにしましょう。

		(require 'jisx0201)
		(define-key  fence-mode-map "\M-x" 'execute-extended-command)
		(define-key henkan-mode-map "\M-x" 'execute-extended-command)

	つまり、先に jisx0201.el を読み込んでしまってから、M-x を再定義
	するのです。こうすれば問題ありません。

	【補足】上で定義した my-fence-hankaku-katakana と併用する場合、
	    (defun my-fence-hankaku-katakana ...) の中の (require
		'jisx0201) は外してかまいません。(require 'jisx0201)
		は 1 回だけ実行されればそれで十分だからです。

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

☆次回予告☆

	次回は、「第 12 回 フォント設定とマルチリンガル、プラスアルファ」
	です。

	実は、ちょっとした理由で、韓国語の混じった文章を書くことになり
	ました。そのとき、mule のデフォルトの韓国語フォントは明朝体だった
	のですが、これが 16 ドットではものすごく読みづらいのです。
	(韓国人ならば読めるのかも知れませんが、それでも誤植訂正には無理
	でしょう。)そこで、フォントの設定を変更して、韓国語はゴシック体
	で表示することにしました。(ちなみに、Emacs 20 では韓国語のデフォ
	ルトフォントはゴシックになっています。)

	そのほか、うっかり C-\ と間違えて C-] を押してしまったときに
	起こる文字化けの対策、Mule 上の文面だけを画像ファイルに落とす
	際のテクニックなどを紹介したいと思います。

	それではまた♪

========================================================================
極私的 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
これは「古文書」です。 古くなった情報も原則未修正で保存していますのでご注意ください。

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