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