super キーを使ってみた
使ってない, ひらがなカタカナキーを super キーにして,
キーボードの遠い場所にあるキーを打ち易くしてみたよというメモ.
今のところ, けっこう良さげ.
ものぐさな自分は, 「^`-=」の4つのキーが遠すぎるという, 普通なかなか感じないであろう不満を持っていて, Emacs 内でのみキーを入れ換えて使ってた.
何をしていたかというと, 「QWZX」 に, 「^`-=」 を割り当てていた.
具体的には, こんな感じ.
(global-set-key "Z" 'insert-minus) ; Zの入力でマイナスを入力 (global-set-key "X" 'insert-equal) ; Xの入力でイコールを入力 (global-set-key "Q" 'insert-hat) ; Qの入力でハットを入力 (global-set-key "W" 'insert-back-apostrophe) ; Wの入力で逆クオートを入力 (defun insert-back-apostrophe () "insert back apostrophe." (interactive) (insert "`")) (defun insert-minus () "insert minus." (interactive) (insert "-")) (defun insert-equal () "insert equal." (interactive) (insert "=")) (defun insert-hat () "insert hat." (interactive) (insert "^"))
一応, insert-Q のような関数も作成しておき, C-c k とかで普通の配列に戻せるようにしていたけど, これじゃ色々面倒な場面が出てくる.
例えば, Quit と打つ場合とか, X Windows System と打つ場合とか.
今までは, これに対しては, 全部小文字で打ってから, M-b M-c とかで対応してた.
んで, 今日, これをどうにかできないものかと考えてみた.
打ち易い場所にあるのに, 全然使わないキーといえば, ひらがなカタカナキーなので, これを利用してみることにした.
まずやったのが, このひらがなカタカナキーを prefix キーにするということ.
こんな感じ.
(define-prefix-command 'my-insert-map) (global-set-key [(hiragana-katakana)] 'my-insert-map) (define-key my-insert-map "q" 'insert-hat) (define-key my-insert-map "w" 'insert-back-apostrophe) (define-key my-insert-map "z" 'insert-minus) (define-key my-insert-map "x" 'insert-equal)
これで, 「hiragana-katakana q」とかやると, ちゃんと「^」が入力される.
でも1つ問題が.
hiragana-katakana を押しながら, q を連打すると, 最初だけ「^」となり,
あとは, hiragana-katakana キーを押しっぱなしでも, 「q」が入力されてしまう.
いちいち, hiragana-katakana q, hiragana-katakana q と入力する必要がある.
これじゃ使いづらい場面がちょこちょこ出てくるだろうから, 別の方法にすることにした.
次に考えたのが, ひらがなカタカナキーを
Ctrl とか Meta のように Emacs で最初から prefix キーとして認められているものにすること.
そうしたら, hiragana-katakana を押しながら, q を連打しても, ちゃんと 「^^^^...」と入力されるはず.
ということで, まず, xmodmap をいじって, ひらがなカタカナキーを Super キーにしてみた(まあ, Hyper でもいいんだけど.).
! hiraganakatakana = super_l keycode 208 = Super_L
別に 左 super にしたのは, 特に理由なし. 試してないけど, たぶん, Super_R で 右 super になるはず.
まあ, 実用上なにも問題は, ないから.
~/.Xmodmap にこれを追記したら, 一番簡単な記述を適用する方法, X の再起動 C-M-Backspace を行う.
再起動したら, Emacs を起動し, .emacs に次を追記, 評価で完了.
(global-set-key [(super q)] 'insert-hat) (global-set-key [(super w)] 'insert-back-apostrophe) (global-set-key [(super z)] 'insert-minus) (global-set-key [(super x)] 'insert-equal)
うん. 連打の問題も大丈夫.
かなり快適.
super キーの割り当ては, 空きまくっているので, 色々と割り当ててみるとより使い易くなるかも.
キー割り当ての干渉の心配もまず無いだろうし.
よくよく考えてみたら, 今回の設定だけなら, .xmodmap 内で完結できるかもしれない.
そしたら, 全部の X 上ならば全部のアプリケーションで, hiraganakatakana q とかすると, ^ が入力できるようになるね.
まあ, それは, いいか.
文章入力は, ほぼ 9 割以上, Emacs 内で行うし.
追記
文字を挿入する関数を書き直した.
この方が良いと思う.
今までのだと, C-u s-q とかしても, 4つ「^」が入力されなかったし.
;; 文字を入力する関数 (defun insert-pipe (&optional arg) (interactive "p") (let ((last-command-char ?|)) (self-insert-command arg))) (defun insert-back-apostrophe (&optional arg) (interactive "p") (let ((last-command-char ?`)) (self-insert-command arg))) (defun insert-equal (&optional arg) (interactive "p") (let ((last-command-char ?=)) (self-insert-command arg))) (defun insert-minus (&optional arg) (interactive "p") (let ((last-command-char ?-)) (self-insert-command arg))) (defun insert-hat (&optional arg) (interactive "p") (let ((last-command-char ?^)) (self-insert-command arg)))
簡単に解説をば.
self-insert-command は, 直前に打ったキーを画面に出力する関数.
例えば, キー a を押したならば, a を画面に挿入する. 引数は, 挿入する数. 1ならば1個. 2ならば2個とる.
last-command-char は, 直前に打った文字を示す変数.
これを書き換えてやって, self-insert-command で挿入される文字を変更している.
やってることはそれだけ.
更新時刻
- 1かいめ 2007年, 5月26日, 23:00
- 2かいめ 2007年, 5月27日, 6:51