稲村さんと加藤さんバージョンのtrr.elを使用している。
新しいEmacs用とかスコアアップデートを確実にとか、ちょこちょこ
修正して使っているのだが、今年からX環境のEmacsでtrrをやらせたところ、
間違ってスペースの隣の変換キーやら片仮名キーをおしたときに
(read-char)
がエラーを起こしてそのまま trr 関数の評価が
途絶えてしまうという問題が頻発するようになった。
去年まではWindowsでTeraterm経由でemacs -nwしてたのでそもそも変換キーとか
が (read-char)
に渡らなくて問題が出なかった。
うむ、どないしょ。最近ならパッチを作るより、defadvice だよなあと、 manをみて、こんな感じかな。
(defun TRR:read-char (&rest args) (let ((ch (apply 'read-event args))) (cond ((char-valid-p ch) nil) ((eq 'return ch) (setq ch ?\C-m)) (t (setq ch ? ))) ch)) (defadvice trr (around trr-advice) "Skip non-character event. Replace them to space." (let ((rf (symbol-function 'read-char))) (unwind-protect (progn (fset 'read-char 'TRR:read-char) ad-do-it) (fset 'read-char rf)))) (ad-activate 'trr) (load "trr" t)
startupファイルの方(うちでは $EMACS/site-lisp/site-start.el
)
に
;;(autoload 'trr "trr" "Type Trainer" t) (autoload 'trr "trrwrap" "Type Trainer" t)
で完了。おお、これで突然trrが終わっちゃう問題が消えた。そして、 スペースを押すべき時に、SHIFTを押したままにしてS-SPCに なっちゃったのが、この修正でSPCとして入って行くから快適になった。 もっと早くこうすればよかったねぇ。やっぱEmacs-Lisp楽だ。