From: Yusuke ENDOH Date: 2009-06-23T05:47:50+09:00 Subject: [ruby-dev:38703] Re: [feature:trunk] let irb use pretty_inspect if possible 遠藤です。 2009/06/22 0:43 に 石塚圭樹 さんは書きました: > うーん. require してあると, irbの振る舞いが変わるのはどうかと思います > が, irb で pp な出力をするモードがあっても良いよなーとは思っていました. はい。 > コマンドラインオプションもしくは, .irbrc での IRB.CONFの指定で pp な出 > 力になるというのでも良いですよね? > > irb --inspect pp > > で pp な出力をするかんじです. たぶんいいと思います。ただ、どうせ pp に特化するのなら、--pp などに したら短くてうれしいかもしれないです。こんなオプションはどうでしょうか。 --inspect-method foo: 結果出力の際、inspect の代わりに foo を用いる --pp: -rpp --inspect-method=pretty_inspect と同じ効果 この方針のパッチを作ってみました。 irb の好みや作法にあわなかったらすみません。 Index: lib/irb/context.rb =================================================================== --- lib/irb/context.rb (revision 23826) +++ lib/irb/context.rb (working copy) @@ -35,6 +35,7 @@ @use_readline = IRB.conf[:USE_READLINE] @inspect_mode = IRB.conf[:INSPECT_MODE] + @inspect_method = IRB.conf[:INSPECT_METHOD] self.math_mode = IRB.conf[:MATH_MODE] if IRB.conf[:MATH_MODE] self.use_tracer = IRB.conf[:USE_TRACER] if IRB.conf[:USE_TRACER] @@ -116,6 +117,7 @@ attr_reader :use_readline attr_reader :inspect_mode + attr_reader :inspect_method attr_reader :prompt_mode attr_accessor :prompt_i Index: lib/irb/lc/ja/help-message =================================================================== --- lib/irb/lc/ja/help-message (revision 23826) +++ lib/irb/lc/ja/help-message (working copy) @@ -18,6 +18,9 @@ -E enc ruby -E と同じ. --inspect 結果出力にinspectを用いる(bcモード以外はデフォルト). --noinspect 結果出力にinspectを用いない. + --inspect-method method-name + 結果出力の際, inspectの代わりにmethod-nameを用いる. + --pp -rpp --inspect-method=pretty_inspect と同じ. --readline readlineライブラリを利用する. --noreadline readlineライブラリを利用しない. --prompt prompt-mode/--prompt-mode prompt-mode Index: lib/irb/lc/help-message =================================================================== --- lib/irb/lc/help-message (revision 23826) +++ lib/irb/lc/help-message (working copy) @@ -19,6 +19,9 @@ -E enc Same as `ruby -E` --inspect Use `inspect' for output (default except for bc mode) --noinspect Don't use inspect for output + --inspect-method method-name + Use method-name instead of `inspect' for output + --pp Identical to -rpp --inspect-method=pretty_inspect --readline Use Readline extension module --noreadline Don't use Readline extension module --prompt prompt-mode Index: lib/irb/init.rb =================================================================== --- lib/irb/init.rb (revision 23826) +++ lib/irb/init.rb (working copy) @@ -45,6 +45,7 @@ @CONF[:MATH_MODE] = false @CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod) @CONF[:INSPECT_MODE] = nil + @CONF[:INSPECT_METHOD] = "inspect" @CONF[:USE_TRACER] = false @CONF[:USE_LOADER] = false @CONF[:IGNORE_SIGINT] = true @@ -148,6 +149,11 @@ @CONF[:INSPECT_MODE] = true when "--noinspect" @CONF[:INSPECT_MODE] = false + when /^--inspect-method(?:=(.+))?/ + @CONF[:INSPECT_METHOD] = $1 || ARGV.shift + when "--pp" + @CONF[:LOAD_MODULES].push "pp" + @CONF[:INSPECT_METHOD] = "pretty_inspect" when "--readline" @CONF[:USE_READLINE] = true when "--noreadline" Index: lib/irb.rb =================================================================== --- lib/irb.rb (revision 23826) +++ lib/irb.rb (working copy) @@ -299,7 +299,8 @@ def output_value if @context.inspect? - printf @context.return_format, @context.last_value.inspect + str = @context.last_value.send(@context.inspect_method) + printf @context.return_format, str else printf @context.return_format, @context.last_value end -- Yusuke ENDOH