From: nobu@... Date: 2018-02-06T04:47:15+00:00 Subject: [ruby-core:85436] [Ruby trunk Feature#12913] A way to configure the default maximum width of pp Issue #12913 has been updated by nobu (Nobuyoshi Nakada). What about this? * affects `PP.pp` and `Kernel#pp` only * try console window size, `COLUMNS` environment variable, then old good 80 ```diff diff --git a/lib/pp.rb b/lib/pp.rb indiff --git a/lib/pp.rb b/lib/pp.rb index 85401c8aa6..a364d0fc2a 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -68,7 +68,7 @@ # If +width+ is omitted, 79 is assumed. # # PP.pp returns +out+. - def PP.pp(obj, out=$>, width=79) + def PP.pp(obj, out=$>, width=PP.width_for(out)) q = PP.new(out, width) q.guard_inspect_key {q.pp obj} q.flush @@ -91,6 +91,15 @@ def PP.mcall(obj, mod, meth, *args, &block) mod.instance_method(meth).bind(obj).call(*args, &block) end + + def PP.width_for(out) + begin + require 'io/console' + _, width = out.winsize + rescue LoadError, NoMethodError, Errno::ENOTTY + end + (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1 + end # :startdoc: @sharing_detection = false @@ -549,9 +558,9 @@ # prints arguments in pretty form. # # pp returns argument(s). - def pp(*objs) + def pp(*objs, out: $>, width: PP.width_for(out)) objs.each {|obj| - PP.pp(obj) + PP.pp(obj, out, width) } objs.size <= 1 ? objs.first : objs end ``` ---------------------------------------- Feature #12913: A way to configure the default maximum width of pp https://bugs.ruby-lang.org/issues/12913#change-70219 * Author: mame (Yusuke Endoh) * Status: Rejected * Priority: Normal * Assignee: akr (Akira Tanaka) * Target version: ---------------------------------------- How about having an easy way to configure the maximum width of a line of `pp` output? Currently, `pp` accepts the maximum width as an optional argument: pp(big_array, $>, 120) However, this is obviously too long for a useful debugging-purpose method like `pp`. Even worse, we must add the fragment "`, $>, 120`" to all calls to `pp`. I don't feel this is reasonable. The patch attached provides `PP.default_maxwidth=` and `PP.default_maxwidth`, which can be used to configure the default setting of the maxwidth. PP.default_maxwidth = 1 pp([1, 2, 3]) #=> [1, # 2, # 3] Akr-san, what do you think? ---Files-------------------------------- pp-default-maxwidth.patch (1.05 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>