elisp+rubyで文章を変換するコードを書くのが楽になるかもしれない。

ファイルをrubyを使って変換したいと思った時に、

  1. スクリプトを書く
  2. 実際に動くか調べる
  3. スクリプトの修正

(2,3を満足いくまでループ)
のような感じで作ってました。
これだと実行結果を確認するためにいちいちシェルを起動して、作っているスクリプトディレクトリまで移動して、適用したいファイル名を渡すという作業を繰り返さなければいけません。これはけっこう面倒です。なので、できればすべてemacs上でしたいです。少しだけelispのコードを書けばできるかもしれません。ということで作ってみました。

#!/usr/bin/ruby

=begin
(global-set-key 
 "\C-ce" 
 (lambda (target-file) (interactive "f")
   (shell-command (concat "ruby " buffer-file-name " " target-file)
		  "*Shell Command Output*")))

上の式をC-x C-eでevalしてください
「C-ce」で「*Shell Command Output*」というバッファに出力結果に表示されるはずです><
=end

#多分、mini-bufferを使ってファイル名をもらえた方がいい。
#find-fileの使っている変数を探す
#でも、引数を対話的に受けとるのはよくありそうな処理だから、楽に扱えるようになっているかもしれない
#==ここからが実際のスクリプト===========
$KCODE="utf8"
ARGF.each{|e| p e} #ただ読み込んで表示しているだけです。

上のスクリプト自体を引数として渡した結果

意味的にはこんな感じ。(elisp_ruby.rb=ファイル名)

ruby elisp_ruby.rb elisp_ruby.rb

実行結果

"#!/usr/bin/ruby\n"
"\n"
"=begin\n"
"(global-set-key \n"
" \"\\C-ce\" \n"
" (lambda (target-file) (interactive \"f\")\n"
"   (shell-command (concat \"ruby \" buffer-file-name \" \" target-file)\n"
"\t\t  \"*Shell Command Output*\")))\n"
"\n"
"上の式をC-x C-eでevalしてください\n"
"「C-ce」で「*Shell Command Output*」というバッファに出力結果に表示されるはずです><\n"
"=end\n"
"\n"
"#多分、mini-bufferを使ってファイル名をもらえた方がいい。\n"
"#find-fileの使っている変数を探す\n"
"#でも、引数を対話的に受けとるのはよくありそうな処理だから、楽に扱えるようになっているかもしれない\n"
"#==ここからが実際のスクリプト===========\n"
"$KCODE=\"utf8\"\n"
"ARGF.each{|e| p e} #ただ読み込んで表示しているだけです。\n"