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

Re: [bep] ファイルを結合するマクロ(learning lisp)



 r高橋です。

 # 六点入力のできなかった会社の新しいパソコン(日立のFLORA)に、家にあっ
た古いAptivaのキーボードをつないでみたら、しっかり点字が書けるようになり
ました。このキーボード、キーが重くて手首が痛かったのでお蔵入りにしていた
のですが、今使ってみてもやっぱり重くて、軟弱な私めにはちとつらそうな予感
です。キーボードを買うならちゃんとさわってみて買いたいし、でもその場で六
点入力できるかなんてたしかめにくそうだし……なにか妙案ないでしょうか……。


Reply Koichi INOUE <inoue@...>'s message:

} でも、今回の場合はもう少しよい方法があります。
} しゃべらない理由は、BEP(Emacspeak)が(interactive)の"F"で始まる引数を使っ
} てファイル名を読むことに対応していないのが原因っぽいです。
} ファイル名をユーザに問い合わせる方法としては、他に
} (read-file-name "append to file: ")
} というのがあり、こちらはEmacspeakで読み上げられます。
} これを使って以下のようにすることも可能です。
} 
} (defun append-buffer-to-file ()
}   (interactive)
}   (let ((filename (read-file-name "append-to-file: " default-directory))
} 	(coding-system-for-write 'shift_jis-dos))
}     (append-to-file (point-min) (point-max) filename)
} ))
} 
} ただし、本当はこれにファイル名でない文字列(たとえばディレクトリの名前)とか、
} 書き込めないファイル名を与えるとエラーになってしまうので、file-regular-p
} とかfile-writable-pとかを使って確認する必要があると思います。
} 今は割愛させてください。

 このあと、個人的にいっぱいヒントをいただいて、やっとできました(と思い
ます……)。

;;; バッファ全体をファイルに追加(shift jis)、BEPもしゃべるよバージョン

(defun append-buffer-to-file ()
  (interactive)
  (let 
      ((coding-system-for-write 'shift_jis-dos)  
       (filename (read-file-name "append buffer to: " default-directory))
)
    (if (or (not (file-exists-p filename))
	    (and (file-writable-p filename) 
		 (file-regular-p filename)))
	(append-to-file (point-min) (point-max) filename) 
      (append-buffer-to-file))))
;;; ここまで

 ファイル名として入力された文字列をチェックする方法が難しかったです。
実は、なぜ file-writable-p と file-regular-p が両方必要なのかがまだよくわ
かっていません。でもでも、たしかにどちらかだけだとうまくいかない……。

 (not ...)はすでに教えていただいていたのに、t と nil をひっくりかえした
いときこんなふうに使えるだなんて、全然考えつきませんでした。

 (and ...) と (or ...) の意味に関して、nil があるかどうかを見たいときに
は (and) を使い、t があるかどうかを見たいときには (or) を使う、みたいな感
覚を覚えておくのもいいかなと思いました。


**-***-***-***-***-***-***-***-***-***-***-***-**
           Reiko TAKAHASHI  (高橋玲子)
         E-mail:  HFC03614@...
         ICQ UIN: 85924121  (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**