From 832ea92b1e1fdaac0d8d1a3a3c64737e563b509b Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Tue, 30 Nov 2021 11:42:06 +0900 Subject: [PATCH 1/3] lib/pp.rb (PP.pp): Use io/console's winsize by default [Feature #12913] ruby/ruby@eac347fdb04023e1a365d84a8c163263cc7a5904 --- lib/pp.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/pp.rb b/lib/pp.rb index 72480e5..c164110 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -61,6 +61,15 @@ # Tanaka Akira class PP < PrettyPrint + 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 + # Outputs +obj+ to +out+ in pretty printed format of # +width+ columns in width. # @@ -68,7 +77,7 @@ class PP < PrettyPrint # If +width+ is omitted, 79 is assumed. # # PP.pp returns +out+. - def PP.pp(obj, out=$>, width=79) + def PP.pp(obj, out=$>, width=width_for(out)) q = PP.new(out, width) q.guard_inspect_key {q.pp obj} q.flush From 394ad73eb4a632ef9cf36cfefd64555c1c520730 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Tue, 30 Nov 2021 13:17:54 +0900 Subject: [PATCH 2/3] lib/pp.rb (width_for): ignore Errno::EINVAL The error is raised on Solaris http://rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20211130T030003Z.fail.html.gz ``` 1) Failure: TestRubyOptions#test_require [/export/home/users/chkbuild/cb-gcc/tmp/build/20211130T030003Z/ruby/test/ruby/test_rubyoptions.rb:265]: pid 7386 exit 1 | /export/home/users/chkbuild/cb-gcc/tmp/build/20211130T030003Z/ruby/lib/pp.rb:67:in `winsize': Invalid argument - (Errno::EINVAL) ``` ruby/ruby@20065eabdb2235a605b61e03d72c19b2a20b52a5 --- lib/pp.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pp.rb b/lib/pp.rb index c164110..e67881f 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -65,7 +65,7 @@ def PP.width_for(out) begin require 'io/console' _, width = out.winsize - rescue LoadError, NoMethodError, Errno::ENOTTY + rescue LoadError, NoMethodError, Errno::ENOTTY, Errno::EINVAL end (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1 end From 1c395465772b903823febc30f4ebf4f9828a95ca Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Tue, 30 Nov 2021 13:46:08 +0900 Subject: [PATCH 3/3] lib/pp.rb (width_for): Ignore all syscall errors According to nobu, Errno::EBAD is raised on Windows. ruby/ruby@3288f0d09e35a98d3569c79fad654e38eaeb7a9c --- lib/pp.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pp.rb b/lib/pp.rb index e67881f..eb8ea1e 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -65,7 +65,7 @@ def PP.width_for(out) begin require 'io/console' _, width = out.winsize - rescue LoadError, NoMethodError, Errno::ENOTTY, Errno::EINVAL + rescue LoadError, NoMethodError, SystemCallError end (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1 end