terminal-size 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source :rubygems
2
+ group :development do
3
+ gem 'working'
4
+ gem 'pry-rescue', github: 'ConradIrwin/pry-rescue', branch: 'feature/kill-pry-rescue'
5
+ end
@@ -0,0 +1,156 @@
1
+ GIT
2
+ remote: git://github.com/ConradIrwin/pry-rescue.git
3
+ revision: 6a31294b730f8caab8b0998eb1e9ee0211909f48
4
+ branch: feature/kill-pry-rescue
5
+ specs:
6
+ pry-rescue (0.14)
7
+ interception (>= 0.3)
8
+ pry
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ ansi (1.4.3)
14
+ awesome_print (1.1.0)
15
+ beg (0.0.3)
16
+ guard
17
+ binding_of_caller (0.6.8)
18
+ bond (0.4.3)
19
+ childprocess (0.3.6)
20
+ ffi (~> 1.0, >= 1.0.6)
21
+ coderay (1.0.8)
22
+ columnize (0.3.6)
23
+ debugger (1.2.3)
24
+ columnize (>= 0.3.1)
25
+ debugger-linecache (~> 1.1.1)
26
+ debugger-ruby_core_source (~> 1.1.5)
27
+ debugger-linecache (1.1.2)
28
+ debugger-ruby_core_source (>= 1.1.1)
29
+ debugger-ruby_core_source (1.1.6)
30
+ diff-lcs (1.1.3)
31
+ diffy (2.1.0)
32
+ eventmachine (1.0.0)
33
+ ffi (1.2.0)
34
+ grit (2.5.0)
35
+ diff-lcs (~> 1.1)
36
+ mime-types (~> 1.15)
37
+ posix-spawn (~> 0.3.6)
38
+ guard (1.6.1)
39
+ listen (>= 0.6.0)
40
+ lumberjack (>= 1.0.2)
41
+ pry (>= 0.9.10)
42
+ thor (>= 0.14.6)
43
+ guard-bundler (1.0.0)
44
+ bundler (~> 1.0)
45
+ guard (~> 1.1)
46
+ guard-spork (1.4.0)
47
+ childprocess (>= 0.2.3)
48
+ guard (>= 1.1)
49
+ spork (>= 0.8.4)
50
+ guard-sporkminitest (0.0.1)
51
+ guard
52
+ guard-spork
53
+ rb-fsevent
54
+ rb-inotify
55
+ spork-minitest
56
+ highline (1.6.15)
57
+ interception (0.3)
58
+ jist (1.3.0)
59
+ json
60
+ json (1.7.5)
61
+ listen (0.6.0)
62
+ lumberjack (1.0.2)
63
+ method_source (0.8.1)
64
+ mime-types (1.19)
65
+ minitest (4.3.3)
66
+ nokogiri (1.5.6)
67
+ posix-spawn (0.3.6)
68
+ pry (0.9.10)
69
+ coderay (~> 1.0.5)
70
+ method_source (~> 0.8)
71
+ slop (~> 3.3.1)
72
+ pry-awesome_print (9.6.5)
73
+ awesome_print (~> 1.1.0)
74
+ pry-de (0.1.0)
75
+ guard
76
+ pry-full
77
+ pry-debugger (0.2.1)
78
+ debugger (~> 1.2.0)
79
+ pry (~> 0.9.10)
80
+ pry-developer_tools (0.1.1)
81
+ pry (>= 0.9.8.pre, < 0.11)
82
+ pry-doc (0.4.4)
83
+ pry (>= 0.9.9.6)
84
+ yard (~> 0.8.1)
85
+ pry-docmore (0.0.3)
86
+ pry
87
+ pry-doc
88
+ pry-editline (1.1.1)
89
+ pry-exception_explorer (0.1.9)
90
+ pry-stack_explorer (>= 0.3.9)
91
+ pry-full (1.0)
92
+ bond
93
+ jist
94
+ pry-awesome_print
95
+ pry-debugger
96
+ pry-developer_tools
97
+ pry-doc
98
+ pry-docmore
99
+ pry-editline
100
+ pry-exception_explorer (= 0.1.9)
101
+ pry-git
102
+ pry-highlight
103
+ pry-pretty-numeric
104
+ pry-remote-em
105
+ pry-rescue
106
+ pry-stack_explorer
107
+ pry-syntax-hacks
108
+ pry-theme
109
+ pry-git (0.2.3)
110
+ diffy
111
+ grit
112
+ pry (>= 0.9.8)
113
+ pry-highlight (0.0.1)
114
+ coderay
115
+ json
116
+ nokogiri
117
+ pry
118
+ pry-pretty-numeric (0.1.1)
119
+ pry
120
+ pry-remote-em (0.7.3)
121
+ eventmachine
122
+ highline
123
+ pry (~> 0.9)
124
+ pry-stack_explorer (0.4.7)
125
+ binding_of_caller (~> 0.6.8)
126
+ pry-syntax-hacks (0.0.6)
127
+ pry (>= 0.9.8)
128
+ pry-theme (0.1.3)
129
+ json
130
+ rake (10.0.3)
131
+ rb-fsevent (0.9.2)
132
+ rb-inotify (0.8.8)
133
+ ffi (>= 0.5.0)
134
+ slop (3.3.3)
135
+ spork (0.9.2)
136
+ spork-minitest (0.0.3)
137
+ spork
138
+ thor (0.16.0)
139
+ turn (0.9.6)
140
+ ansi
141
+ working (0.0.4)
142
+ beg
143
+ guard-bundler
144
+ guard-sporkminitest
145
+ minitest
146
+ pry-de
147
+ rake
148
+ turn
149
+ yard (0.8.3)
150
+
151
+ PLATFORMS
152
+ ruby
153
+
154
+ DEPENDENCIES
155
+ pry-rescue!
156
+ working
@@ -0,0 +1,2 @@
1
+ require 'working/guard'
2
+ # vim:ft=ruby
@@ -0,0 +1 @@
1
+ Copyleft (ↄ) 2012 ☈king — Absolutely CC0 / Public Domain / Whateverness.
@@ -0,0 +1,30 @@
1
+ # Terminal.size
2
+
3
+ A tiny gem to accomplish a simple task: Determining the terminal size.
4
+
5
+ One of the guarantees of this project is that it will always be exactly one
6
+ file: `lib/terminal-size/terminal.rb`
7
+
8
+ So, if you want to come up with some automated way to slurp that into your
9
+ codebase, it shouldn't break (and this would be better than a
10
+ not-easily-updated Copy & Paste). I'm kicking around the idea of using this as
11
+ an example of an automatic, namespaced fat-pack trick, but we'll see if that's
12
+ really necessary.
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ gem 'terminal-size'
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Or install it yourself as:
25
+
26
+ $ gem install terminal-size
27
+
28
+ ## Usage
29
+
30
+ p Terminal.size
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ # TODO: require 'working/rake'
3
+ task default: :test
4
+ task :test do
5
+ Dir['test/**/*_test.rb'].each do |e| load e end
6
+ end
@@ -0,0 +1,59 @@
1
+ class Terminal
2
+ class Size; VERSION = '0.0.1' end
3
+ class << self
4
+ def size
5
+ size_via_low_level_ioctl or size_via_stty or nil
6
+ end
7
+ def size!; size or _height_width_hash_from 25, 80 end
8
+
9
+ # These are experimental
10
+ def resize direction, magnitude
11
+ tmux 'resize-pane', "-#{direction}", magnitude
12
+ end
13
+
14
+ def tmux *cmd
15
+ system 'tmux', *(cmd.map &:to_s)
16
+ end
17
+
18
+ IOCTL_INPUT_BUF = "\x00"*8
19
+ def size_via_low_level_ioctl
20
+ # Thanks to runpaint for the general approach to this
21
+ return unless $stdin.respond_to? :ioctl
22
+ code = tiocgwinsz_value_for RUBY_PLATFORM
23
+ return unless code
24
+ buf = IOCTL_INPUT_BUF.dup
25
+ return unless $stdout.ioctl(code, buf).zero?
26
+ return if IOCTL_INPUT_BUF == buf
27
+ got = buf.unpack('S4')[0..1]
28
+ _height_width_hash_from *got
29
+ rescue
30
+ nil
31
+ end
32
+
33
+ # This is as reported by <sys/ioctl.h>
34
+ # Hard-coding because it seems like overkll to acutally involve C for this.
35
+ TIOCGWINSZ = {
36
+ /linux/ => 0x5413,
37
+ /darwin/ => 0x40087468, # thanks to brandon@brandon.io for the lookup!
38
+ }
39
+ def tiocgwinsz_value_for platform
40
+ TIOCGWINSZ.each do |k,v|
41
+ return v if platform[k]
42
+ end
43
+ nil
44
+ end
45
+
46
+ def size_via_stty
47
+ ints = `stty size`.scan(/\d+/).map &:to_i
48
+ _height_width_hash_from *ints
49
+ rescue
50
+ nil
51
+ end
52
+
53
+ private
54
+ def _height_width_hash_from *dimensions
55
+ { height: dimensions[0], width: dimensions[1] }
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift './lib'
3
+ require 'terminal-size'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = 'terminal-size'
7
+ gem.version = Terminal::Size::VERSION
8
+ gem.authors = %w(☈king Norrin)
9
+ gem.email = ['rking-terminal-size@sharpsaw.org']
10
+ gem.description = gem.summary = %q{Terminal.size ⇒ {columns: 80, rows: 25}}
11
+ gem.homepage = 'https://github.com/rking/terminal-size'
12
+ gem.files = `git ls-files`.split($/)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ end
@@ -0,0 +1,51 @@
1
+ require './test/test_helper'
2
+ require 'terminal-size'
3
+ class TerminalTest < MiniTest::Unit::TestCase
4
+ DEFAULT_SIZE = {width: 80, height: 25}
5
+ def test_simulating_windows
6
+ class << $stdout
7
+ alias_method :actual_respond_to?, :respond_to?
8
+ end
9
+ brb_path = ENV['PATH']
10
+ $stdin.stub :respond_to?, -> m { :ioctl != m and actual_respond_to m } do
11
+ refute Terminal.size_via_low_level_ioctl
12
+ ENV['PATH'] = ''
13
+ refute Terminal.size_via_stty
14
+ refute Terminal.size
15
+ assert_equal DEFAULT_SIZE, Terminal.size!
16
+ end
17
+ ensure
18
+ ENV['PATH'] = brb_path
19
+ end
20
+
21
+ # This junky thing is an in-real-life result of a TIOCGWINSZ call
22
+ FAKE_IOCTL_RESULT = File.read 'test/real-life-ioctl-return-value'
23
+ def test_ioctl_for_unix
24
+ refute_equal \
25
+ Terminal.tiocgwinsz_value_for('linux'),
26
+ Terminal.tiocgwinsz_value_for('darwin')
27
+ expected = {width: 133, height: 80}
28
+ $stdout.stub :ioctl, -> num, buf { buf.replace FAKE_IOCTL_RESULT; 0 } do
29
+ assert_equal expected, Terminal.size_via_low_level_ioctl
30
+ end
31
+ Terminal.stub :`, '80 133' do
32
+ assert_equal expected, Terminal.size_via_stty
33
+ end
34
+ end
35
+
36
+ def test_integration_using_tmux
37
+ skip 'This test must be run from within tmux (with a split-window -h)' \
38
+ unless ENV['TMUX']
39
+ # TODO: figure out how to get this to work if not already in a horizontal
40
+ # split, e.g.:
41
+ # system 'tmux split-window -h'
42
+ # Or maybe: tmux list-panes
43
+ before = Terminal.size
44
+ Terminal.resize :L, 1
45
+ after = Terminal.size
46
+ assert_equal before[:width]-1, after[:width]
47
+ assert_equal before[:width]-1, after[:width]
48
+ ensure
49
+ Terminal.resize :R, 1
50
+ end
51
+ end
@@ -0,0 +1,28 @@
1
+ # If on Rails:
2
+ # ENV['RAILS_ENV'] = 'test'
3
+ # require File.expand_path('../../config/environment', __FILE_)
4
+ # def reload!
5
+ # puts "[Performing .reload!]"
6
+ # ActionDispatch::Reloader.cleanup!
7
+ # ActionDispatch::Reloader.prepare!
8
+ # end
9
+
10
+ require 'spork'
11
+ require 'minitest/autorun'
12
+ require 'pry-rescue/minitest'
13
+ $:.unshift './lib'
14
+
15
+ require 'turn'
16
+ Turn.config do |c|
17
+ c.format = :pretty
18
+ end
19
+
20
+ puts "[test_helper.rb toplevel running]"
21
+ Spork.prefork do
22
+ puts "[Spork.prefork running]"
23
+ end
24
+ Spork.each_run do
25
+ puts "[Spork.each_run running]"
26
+ # TODO: verify that this helps (Rails)
27
+ # reload!
28
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: terminal-size
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - ☈king
9
+ - Norrin
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-12-29 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: ! 'Terminal.size ⇒ {columns: 80, rows: 25}'
16
+ email:
17
+ - rking-terminal-size@sharpsaw.org
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - Gemfile
23
+ - Gemfile.lock
24
+ - Guardfile
25
+ - LICENSE.txt
26
+ - README.md
27
+ - Rakefile
28
+ - lib/terminal-size.rb
29
+ - terminal-size.gemspec
30
+ - test/real-life-ioctl-return-value
31
+ - test/terminal-size_test.rb
32
+ - test/test_helper.rb
33
+ homepage: https://github.com/rking/terminal-size
34
+ licenses: []
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 1.8.24
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: ! 'Terminal.size ⇒ {columns: 80, rows: 25}'
57
+ test_files:
58
+ - test/real-life-ioctl-return-value
59
+ - test/terminal-size_test.rb
60
+ - test/test_helper.rb
61
+ has_rdoc: