[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bep] Braille Environment on Emacs Re: JAWS



n高橋です。朗報です。

Emacs Lisp だけで同時押し点字入力が可能にする方法を見つけました。と言っ
ても別に何か特別なことをするわけではありません。単に発想を転換しただけ
です。

現在のキーボードなら、まず確実にnキーロールオーバーに対応しています。
つまり一つのキーを打ったとき、そのキーを放す前に次のキーを打ってもちゃ
んと認識されるということです。つまり {123456} (これって「め」でしたっ
け?) のつもりで fdsjkl を同時に押すと、順番はどうであれこの6文字が入力
されます。どういう順番になるかは、指先の微妙なタイミングに依存しますが、
とにかく押されたキーの分は全部入力されるわけです。もっともあんまり長く
押し続けているとオートリピートが働いちゃいますけど。

また、同時押しで点字入力する時っていうのは、一つの文字を入力してから次
の文字を入力するまでに一度全部の指を離しますよね?  ですからこの「全部
の指が離れている状態」を検出してやれば点字間の切れ目も検出できるという
わけです。

で、幸いなことに Emacs Lisp には sit-for という関数があります。
(sit-for x) とすると、最大x秒の間なにもしないでただ待ちます。もしx秒以
内にキーの入力があれば、その時点で待つのをやめます。本当にx秒待ったと
きはtを返し、そうでなければnilを返します。ですから sit-for の戻り値を
調べれば点字間の切れ目が検出できるというわけです。

試しにこんなコードを書いてみました。

(let ((i 0))
  (ding)
  (while (< i 50)
    (if (sit-for 0.1)
	(insert " "))
    (insert (read-char))
    (setq i (1+ i)))
  (ding))

*scratch* バッファにこれを入れて一番最後で C-j して下さい。ピッと鳴っ
たら fdsjkl で同時押し点字入力ができるつもりになって、何か適当に打って
下さい。もう一回ピッと鳴ったら終わりですので、今打った行を調べてみて下
さい。一時全部の指を離したところに空白が自動挿入されているはずです。

実際には上のコードの (insert " ") の部分を、直前の最大6文字を調べて対
応する点字に変換するコードで置き換えてやればいいだけです。そのくらいな
ら余裕でリアルタイム実行できるでしょう。

-- 
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/