diff --git a/lib/console/terminal/xterm.rb b/lib/console/terminal/xterm.rb index 5cf532d..75e1cf8 100644 --- a/lib/console/terminal/xterm.rb +++ b/lib/console/terminal/xterm.rb @@ -46,7 +46,7 @@ def colors? # The size of the terminal. def size @stream.winsize - rescue Errno::ENOTTY + rescue Errno::ENOTTY, Errno::ENODEV # Fake it... [24, 80] end diff --git a/releases.md b/releases.md index 643f791..1e31d8a 100644 --- a/releases.md +++ b/releases.md @@ -1,5 +1,9 @@ # Releases +## Unreleased + + - Fix handling of `Errno::ENODEV` errors when calculating the width of a terminal that was been re-opened to `File::NULL`. + ## v1.34.1 - Add `process_id` to serialized output records for clarity (`pid` is still included for backwards compatibility). diff --git a/test/console/terminal/xterm.rb b/test/console/terminal/xterm.rb index 00a33b3..ca101f4 100644 --- a/test/console/terminal/xterm.rb +++ b/test/console/terminal/xterm.rb @@ -68,5 +68,15 @@ expect(stream).to receive(:winsize).and_return([24, 80]) expect(terminal.size).to be == [24, 80] end + + it "returns default size when Errno::ENOTTY is raised" do + expect(stream).to receive(:winsize).and_raise(Errno::ENOTTY) + expect(terminal.size).to be == [24, 80] + end + + it "returns default size when Errno::ENODEV is raised" do + terminal = subject.new(File.open(File::NULL, "w")) + expect(terminal.size).to be == [24, 80] + end end end