Kodama's home / tips.

emacs(ruby-mode)でスクリプトの鋳型(getoptlongなど)を自動的に書き込む

今まで ruby スクリプトで 引数を参照する場合素で ARGV を使っていたが, getoptlong を使ってみる事にした. ついでに, 毎回書くのが面倒なので emacs でスクリプトを書くとき, テンプレートを自動的に書き込むようにしてみた.

.emacs

ruby-mode になるときにファイルサイズが 0 なら, テンプレートを読み込む.
;; Insert ruby-template.rb
(add-hook 'ruby-mode-hook
          (function (lambda ()
                      (if (zerop (buffer-size))
                          (insert-file "~/lib/ruby/ruby-template.rb")))))

ruby-template.rb の内容

#!/usr/local/bin/ruby 
require "getoptlong"

if $0 == __FILE__ then
	verbose=false
	r_arg=""
	o_arg=""

	def usage
		puts "usage: foo.rb [-h] [-v]"
		puts "Options:\n";
		puts "-h  help\n";
		puts "-v  vsebose\n"
	end;
	
=begin
	 if ARGV.size==0 then usage; end
	 ARGV.each{|opt|
		case opt
		when "-h"; usage;
		end
	}
=end
	
	arg_parser=GetoptLong.new
	arg_parser.set_options(
						   ["-h", "--help" , GetoptLong::NO_ARGUMENT],
						   ["-v", "--verbose" , GetoptLong::NO_ARGUMENT],
						   ["-r", GetoptLong::REQUIRED_ARGUMENT],
						   ["-o", GetoptLong::OPTIONAL_ARGUMENT]
						   )
	arg_parser.each{|opt,arg|
		begin
			# puts (opt+"=>"+arg)
			case opt
			when "-v"; verbose=true;
			when "-h"; usage; exit
			when "-r"; r_arg=arg;
			when "-o"; if arg!=""; o_arg=arg; else o_arg=0;end;
			end;
		rescue => err; puts err; break
		end
	}
	puts "verbose= #{verbose}"
	puts "r= #{r_arg}"
	puts "o= #{o_arg}"
end

Kodama's home / tips.