2009年12月19日土曜日

私Emacsユーザだけど彼氏のSKKが…

これはEmacsAdventCalendar 2009に関連したおまけのエントリーです。


最近出た新しいポメラはキークリック音がしてかわいいんだとかtwitterで見ました。。。えー、それくらいEmacsでもできるわい。簡単にできるわい。んー、検証してみよう。。。
というわけでキーを押すたびに音がするピコピコEmacsを実現してみました。
要は、ーイベントが起きるたびにhookしてやって(コードに則して言えばadviceしてやって)、サウンド再生コマンドを外部プロセスとして起動してやればいいじゃんという方針。子プロセスの終了まで同期されるとキー入力に追い付かないことになってまずいですが、ちょっと調べるとcall-process-shell-commandの第3引数が0ならプロセスの終了を待たないということだったのでこの方針で問題なさそうです。また、本当はself-insert-commandをadviceできればいいんでしょうが、subrではできないようなので、SKKユーザとしてはとりあえずSKKを使った日本語入力中にピコピコ鳴ればいいだろうと妥協して、こういうことになりました:

(defadvice skk-insert (before magictape activate)
  ;; (message "%d" last-command-event)
  (let* ((e last-command-event)
         (l
          '((9 . "bin080518100400001.mp3")    ;; TAB
            (97 . "bin070620135222001.mp3")   ;; A
            (105 . "bin070620135304001.mp3")  ;; I
            (117 . "bin070620135348001.mp3")  ;; U
            (101 . "bin070620135442001.mp3")  ;; E
            (111 . "bin070620135129001.mp3"))) ;; O
         (a (cond
             ((cdr-safe (assq e l)))
             ((and (numberp e) (< 64 e) (< e 91) "bin080518100400001.mp3")) ;; 変換開始
             (t nil))))
    (if a 

        (call-process-shell-command "mpg123" () 0 () "-o" "pulse"  ;; Linuxでpulseaudio使用
                                    (expand-file-name a "~/Desktop")))))

長いコードになっているのはa、i、u、e、o 、TAB(での補完)、変換開始(=大文字)のそれぞれに別の音をつけたためです。サウンドファイルの場所や使用するプログラム名などいろいろなものが決め打ちですが、さて、どういう音を鳴らすのがいいか? 著作権フリーなものをいろいろぐぐって、http://koukaongen.com/からダウンロードして、納得しているものがこれです(12月18日現在):



結局、
バリバリバリバリうるさい非実用tips(いわゆるネタ)になっちゃったのでした〜^^

0 件のコメント:

コメントを投稿