遠藤です。
2009/06/22 0:43 に 石塚圭樹<
keiju@...> さんは書きました:
> うーん. 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 <
mame@...>