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>