稲村さんと加藤さんバージョンの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楽だ。