twterm 2.6.0 → 2.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +62 -0
  3. data/.gitignore +1 -0
  4. data/Gemfile +7 -0
  5. data/Makefile +21 -0
  6. data/README.md +52 -6
  7. data/bin/twterm +1 -3
  8. data/default.nix +21 -0
  9. data/gemset.nix +5130 -0
  10. data/lib/twterm/app.rb +13 -24
  11. data/lib/twterm/client.rb +1 -4
  12. data/lib/twterm/color_manager.rb +8 -9
  13. data/lib/twterm/image.rb +31 -0
  14. data/lib/twterm/image/attr.rb +42 -0
  15. data/lib/twterm/image/bold.rb +7 -21
  16. data/lib/twterm/image/color.rb +9 -15
  17. data/lib/twterm/image/dim.rb +13 -0
  18. data/lib/twterm/image/underlined.rb +17 -0
  19. data/lib/twterm/image_builder/user_name_image_builder.rb +1 -0
  20. data/lib/twterm/key_mapper.rb +6 -8
  21. data/lib/twterm/key_mapper/abstract_key_mapper.rb +2 -2
  22. data/lib/twterm/list.rb +36 -1
  23. data/lib/twterm/message_window.rb +4 -13
  24. data/lib/twterm/persistable_configuration_proxy.rb +6 -6
  25. data/lib/twterm/preferences.rb +8 -1
  26. data/lib/twterm/rest_client.rb +0 -33
  27. data/lib/twterm/screen.rb +103 -25
  28. data/lib/twterm/search_query_window.rb +5 -13
  29. data/lib/twterm/status.rb +10 -0
  30. data/lib/twterm/tab/abstract_tab.rb +30 -16
  31. data/lib/twterm/tab/new/index.rb +0 -10
  32. data/lib/twterm/tab/new/search.rb +2 -2
  33. data/lib/twterm/tab/new/user.rb +2 -2
  34. data/lib/twterm/tab/preferences/control.rb +77 -0
  35. data/lib/twterm/tab/preferences/index.rb +6 -0
  36. data/lib/twterm/tab/scrollable.rb +1 -1
  37. data/lib/twterm/tab/searchable.rb +6 -4
  38. data/lib/twterm/tab/status_tab.rb +10 -0
  39. data/lib/twterm/tab/statuses/abstract_statuses_tab.rb +11 -6
  40. data/lib/twterm/tab/user_tab.rb +0 -9
  41. data/lib/twterm/tab_manager.rb +77 -10
  42. data/lib/twterm/tweetbox.rb +2 -3
  43. data/lib/twterm/user.rb +1 -0
  44. data/lib/twterm/version.rb +1 -1
  45. data/nix/Gemfile +3 -0
  46. data/nix/Gemfile.lock +77 -0
  47. data/nix/gemset.nix +325 -0
  48. data/shell.nix +40 -0
  49. data/spec/twterm/image/bold_spec.rb +30 -0
  50. data/spec/twterm/image/color_spec.rb +16 -0
  51. data/spec/twterm/image/dim_spec.rb +30 -0
  52. data/twterm.gemspec +7 -14
  53. metadata +31 -113
  54. data/.travis.yml +0 -12
  55. data/lib/twterm/direct_message.rb +0 -60
  56. data/lib/twterm/direct_message_composer.rb +0 -80
  57. data/lib/twterm/direct_message_manager.rb +0 -51
  58. data/lib/twterm/event/direct_message/fetched.rb +0 -10
  59. data/lib/twterm/event/notification/direct_message.rb +0 -30
  60. data/lib/twterm/event/screen/resize.rb +0 -13
  61. data/lib/twterm/repository/direct_message_repository.rb +0 -14
  62. data/lib/twterm/tab/direct_message/conversation.rb +0 -104
  63. data/lib/twterm/tab/direct_message/conversation_list.rb +0 -100
  64. data/spec/twterm/event/screen/resize_spec.rb +0 -11
@@ -16,7 +16,6 @@ module Twterm
16
16
  end
17
17
 
18
18
  include Readline
19
- include Curses
20
19
  include Publisher
21
20
 
22
21
  def initialize(app, client)
@@ -104,7 +103,7 @@ module Twterm
104
103
  end
105
104
 
106
105
  def ask_and_post(leading_text, prompt, postprocessor, options = {})
107
- close_screen
106
+ Curses.close_screen
108
107
  puts "\e[H\e[2J#{leading_text}\n\n"
109
108
  ask(prompt, postprocessor) { |text| client.post(postprocessor.call(text), options) }
110
109
  end
@@ -120,7 +119,7 @@ module Twterm
120
119
  end
121
120
 
122
121
  def reset
123
- reset_prog_mode
122
+ Curses.reset_prog_mode
124
123
  sleep 0.1
125
124
  publish(Event::Screen::Refresh.new)
126
125
  end
data/lib/twterm/user.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  module Twterm
2
+ # A Twitter user
2
3
  class User
3
4
  attr_reader :description, :favorites_count, :followers_count,
4
5
  :friends_count, :id, :location, :name, :protected, :profile_image,
@@ -1,3 +1,3 @@
1
1
  module Twterm
2
- VERSION = '2.6.0'
2
+ VERSION = '2.10.1'
3
3
  end
data/nix/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'twterm', '2.10.0'
data/nix/Gemfile.lock ADDED
@@ -0,0 +1,77 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ addressable (2.7.0)
5
+ public_suffix (>= 2.0.2, < 5.0)
6
+ buftok (0.2.0)
7
+ citrus (3.0.2)
8
+ concurrent-ruby (1.1.8)
9
+ curses (1.4.0)
10
+ domain_name (0.5.20190701)
11
+ unf (>= 0.0.5, < 1.0.0)
12
+ equalizer (0.0.11)
13
+ ffi (1.14.2)
14
+ ffi-compiler (1.0.1)
15
+ ffi (>= 1.0.0)
16
+ rake
17
+ http (4.4.1)
18
+ addressable (~> 2.3)
19
+ http-cookie (~> 1.0)
20
+ http-form_data (~> 2.2)
21
+ http-parser (~> 1.2.0)
22
+ http-cookie (1.0.3)
23
+ domain_name (~> 0.5)
24
+ http-form_data (2.3.0)
25
+ http-parser (1.2.3)
26
+ ffi-compiler (>= 1.0, < 2.0)
27
+ http_parser.rb (0.6.0)
28
+ idn-ruby (0.1.0)
29
+ launchy (2.5.0)
30
+ addressable (~> 2.7)
31
+ memoizable (0.4.2)
32
+ thread_safe (~> 0.3, >= 0.3.1)
33
+ multipart-post (2.1.1)
34
+ naught (1.1.0)
35
+ oauth (0.5.5)
36
+ public_suffix (4.0.6)
37
+ rake (13.0.3)
38
+ simple_oauth (0.3.1)
39
+ terminal-notifier (2.0.0)
40
+ thread_safe (0.3.6)
41
+ toml-rb (2.0.1)
42
+ citrus (~> 3.0, > 3.0)
43
+ twitter (7.0.0)
44
+ addressable (~> 2.3)
45
+ buftok (~> 0.2.0)
46
+ equalizer (~> 0.0.11)
47
+ http (~> 4.0)
48
+ http-form_data (~> 2.0)
49
+ http_parser.rb (~> 0.6.0)
50
+ memoizable (~> 0.4.0)
51
+ multipart-post (~> 2.0)
52
+ naught (~> 1.0)
53
+ simple_oauth (~> 0.3.0)
54
+ twitter-text (3.1.0)
55
+ idn-ruby
56
+ unf (~> 0.1.0)
57
+ twterm (2.10.0)
58
+ concurrent-ruby (~> 1.1.7)
59
+ curses (~> 1.4.0)
60
+ launchy (~> 2.5.0)
61
+ oauth (~> 0.5.1)
62
+ terminal-notifier (~> 2.0.0)
63
+ toml-rb (~> 2.0.1)
64
+ twitter (~> 7.0.0)
65
+ twitter-text (~> 3.1.0)
66
+ unf (0.1.4)
67
+ unf_ext
68
+ unf_ext (0.0.7.7)
69
+
70
+ PLATFORMS
71
+ ruby
72
+
73
+ DEPENDENCIES
74
+ twterm (= 2.10.0)
75
+
76
+ BUNDLED WITH
77
+ 2.1.4
data/nix/gemset.nix ADDED
@@ -0,0 +1,325 @@
1
+ {
2
+ addressable = {
3
+ dependencies = ["public_suffix"];
4
+ groups = ["default"];
5
+ platforms = [];
6
+ source = {
7
+ remotes = ["https://rubygems.org"];
8
+ sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
9
+ type = "gem";
10
+ };
11
+ version = "2.7.0";
12
+ };
13
+ buftok = {
14
+ groups = ["default"];
15
+ platforms = [];
16
+ source = {
17
+ remotes = ["https://rubygems.org"];
18
+ sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
19
+ type = "gem";
20
+ };
21
+ version = "0.2.0";
22
+ };
23
+ citrus = {
24
+ groups = ["default"];
25
+ platforms = [];
26
+ source = {
27
+ remotes = ["https://rubygems.org"];
28
+ sha256 = "0l7nhk3gkm1hdchkzzhg2f70m47pc0afxfpl6mkiibc9qcpl3hjf";
29
+ type = "gem";
30
+ };
31
+ version = "3.0.2";
32
+ };
33
+ concurrent-ruby = {
34
+ groups = ["default"];
35
+ platforms = [];
36
+ source = {
37
+ remotes = ["https://rubygems.org"];
38
+ sha256 = "0mr23wq0szj52xnj0zcn1k0c7j4v79wlwbijkpfcscqww3l6jlg3";
39
+ type = "gem";
40
+ };
41
+ version = "1.1.8";
42
+ };
43
+ curses = {
44
+ groups = ["default"];
45
+ platforms = [];
46
+ source = {
47
+ remotes = ["https://rubygems.org"];
48
+ sha256 = "0i4j6j18ih6lx7gk9jg2p7q8iswc897mgzn5m62jbf0zv0f7mkji";
49
+ type = "gem";
50
+ };
51
+ version = "1.4.0";
52
+ };
53
+ domain_name = {
54
+ dependencies = ["unf"];
55
+ groups = ["default"];
56
+ platforms = [];
57
+ source = {
58
+ remotes = ["https://rubygems.org"];
59
+ sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
60
+ type = "gem";
61
+ };
62
+ version = "0.5.20190701";
63
+ };
64
+ equalizer = {
65
+ groups = ["default"];
66
+ platforms = [];
67
+ source = {
68
+ remotes = ["https://rubygems.org"];
69
+ sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
70
+ type = "gem";
71
+ };
72
+ version = "0.0.11";
73
+ };
74
+ ffi = {
75
+ groups = ["default"];
76
+ platforms = [];
77
+ source = {
78
+ remotes = ["https://rubygems.org"];
79
+ sha256 = "15hgiy09i8ywjihyzyvjvk42ivi3kmy6dm21s5sgg9j7y3h3zkkx";
80
+ type = "gem";
81
+ };
82
+ version = "1.14.2";
83
+ };
84
+ ffi-compiler = {
85
+ dependencies = ["ffi" "rake"];
86
+ groups = ["default"];
87
+ platforms = [];
88
+ source = {
89
+ remotes = ["https://rubygems.org"];
90
+ sha256 = "0c2caqm9wqnbidcb8dj4wd3s902z15qmgxplwyfyqbwa0ydki7q1";
91
+ type = "gem";
92
+ };
93
+ version = "1.0.1";
94
+ };
95
+ http = {
96
+ dependencies = ["addressable" "http-cookie" "http-form_data" "http-parser"];
97
+ groups = ["default"];
98
+ platforms = [];
99
+ source = {
100
+ remotes = ["https://rubygems.org"];
101
+ sha256 = "0z8vmvnkrllkpzsxi94284di9r63g9v561a16an35izwak8g245y";
102
+ type = "gem";
103
+ };
104
+ version = "4.4.1";
105
+ };
106
+ http-cookie = {
107
+ dependencies = ["domain_name"];
108
+ groups = ["default"];
109
+ platforms = [];
110
+ source = {
111
+ remotes = ["https://rubygems.org"];
112
+ sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
113
+ type = "gem";
114
+ };
115
+ version = "1.0.3";
116
+ };
117
+ http-form_data = {
118
+ groups = ["default"];
119
+ platforms = [];
120
+ source = {
121
+ remotes = ["https://rubygems.org"];
122
+ sha256 = "1wx591jdhy84901pklh1n9sgh74gnvq1qyqxwchni1yrc49ynknc";
123
+ type = "gem";
124
+ };
125
+ version = "2.3.0";
126
+ };
127
+ http-parser = {
128
+ dependencies = ["ffi-compiler"];
129
+ groups = ["default"];
130
+ platforms = [];
131
+ source = {
132
+ remotes = ["https://rubygems.org"];
133
+ sha256 = "18qqvckvqjffh88hfib6c8pl9qwk9gp89w89hl3f2s1x8hgyqka1";
134
+ type = "gem";
135
+ };
136
+ version = "1.2.3";
137
+ };
138
+ "http_parser.rb" = {
139
+ groups = ["default"];
140
+ platforms = [];
141
+ source = {
142
+ remotes = ["https://rubygems.org"];
143
+ sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
144
+ type = "gem";
145
+ };
146
+ version = "0.6.0";
147
+ };
148
+ idn-ruby = {
149
+ groups = ["default"];
150
+ platforms = [];
151
+ source = {
152
+ remotes = ["https://rubygems.org"];
153
+ sha256 = "07vblcyk3g72sbq12xz7xj28snpxnh3sbcnxy8bglqbfqqhvmawr";
154
+ type = "gem";
155
+ };
156
+ version = "0.1.0";
157
+ };
158
+ launchy = {
159
+ dependencies = ["addressable"];
160
+ groups = ["default"];
161
+ platforms = [];
162
+ source = {
163
+ remotes = ["https://rubygems.org"];
164
+ sha256 = "1xdyvr5j0gjj7b10kgvh8ylxnwk3wx19my42wqn9h82r4p246hlm";
165
+ type = "gem";
166
+ };
167
+ version = "2.5.0";
168
+ };
169
+ memoizable = {
170
+ dependencies = ["thread_safe"];
171
+ groups = ["default"];
172
+ platforms = [];
173
+ source = {
174
+ remotes = ["https://rubygems.org"];
175
+ sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
176
+ type = "gem";
177
+ };
178
+ version = "0.4.2";
179
+ };
180
+ multipart-post = {
181
+ groups = ["default"];
182
+ platforms = [];
183
+ source = {
184
+ remotes = ["https://rubygems.org"];
185
+ sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
186
+ type = "gem";
187
+ };
188
+ version = "2.1.1";
189
+ };
190
+ naught = {
191
+ groups = ["default"];
192
+ platforms = [];
193
+ source = {
194
+ remotes = ["https://rubygems.org"];
195
+ sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
196
+ type = "gem";
197
+ };
198
+ version = "1.1.0";
199
+ };
200
+ oauth = {
201
+ groups = ["default"];
202
+ platforms = [];
203
+ source = {
204
+ remotes = ["https://rubygems.org"];
205
+ sha256 = "1m08365nyp0fgw2iyzj8q8qy8zml0c1hw2dd8cp82pp6656ahbh3";
206
+ type = "gem";
207
+ };
208
+ version = "0.5.5";
209
+ };
210
+ public_suffix = {
211
+ groups = ["default"];
212
+ platforms = [];
213
+ source = {
214
+ remotes = ["https://rubygems.org"];
215
+ sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
216
+ type = "gem";
217
+ };
218
+ version = "4.0.6";
219
+ };
220
+ rake = {
221
+ groups = ["default"];
222
+ platforms = [];
223
+ source = {
224
+ remotes = ["https://rubygems.org"];
225
+ sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
226
+ type = "gem";
227
+ };
228
+ version = "13.0.3";
229
+ };
230
+ simple_oauth = {
231
+ groups = ["default"];
232
+ platforms = [];
233
+ source = {
234
+ remotes = ["https://rubygems.org"];
235
+ sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
236
+ type = "gem";
237
+ };
238
+ version = "0.3.1";
239
+ };
240
+ terminal-notifier = {
241
+ groups = ["default"];
242
+ platforms = [];
243
+ source = {
244
+ remotes = ["https://rubygems.org"];
245
+ sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
246
+ type = "gem";
247
+ };
248
+ version = "2.0.0";
249
+ };
250
+ thread_safe = {
251
+ groups = ["default"];
252
+ platforms = [];
253
+ source = {
254
+ remotes = ["https://rubygems.org"];
255
+ sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
256
+ type = "gem";
257
+ };
258
+ version = "0.3.6";
259
+ };
260
+ toml-rb = {
261
+ dependencies = ["citrus"];
262
+ groups = ["default"];
263
+ platforms = [];
264
+ source = {
265
+ remotes = ["https://rubygems.org"];
266
+ sha256 = "0x5j95w28vj85bzw98g1dyd4gm7xpli2fdvwwrgwlay7gb3wc5jh";
267
+ type = "gem";
268
+ };
269
+ version = "2.0.1";
270
+ };
271
+ twitter = {
272
+ dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"];
273
+ groups = ["default"];
274
+ platforms = [];
275
+ source = {
276
+ remotes = ["https://rubygems.org"];
277
+ sha256 = "13dmkjgsnym1avym9f7y2i2h3mlk8crqvc87drrzr4f0sf9l8g2y";
278
+ type = "gem";
279
+ };
280
+ version = "7.0.0";
281
+ };
282
+ twitter-text = {
283
+ dependencies = ["idn-ruby" "unf"];
284
+ groups = ["default"];
285
+ platforms = [];
286
+ source = {
287
+ remotes = ["https://rubygems.org"];
288
+ sha256 = "1dnmp0bj3l01nbb52zby2c7hrazcdwfg846knkrjdfl0yfmv793z";
289
+ type = "gem";
290
+ };
291
+ version = "3.1.0";
292
+ };
293
+ twterm = {
294
+ dependencies = ["concurrent-ruby" "curses" "launchy" "oauth" "terminal-notifier" "toml-rb" "twitter" "twitter-text"];
295
+ groups = ["default"];
296
+ platforms = [];
297
+ source = {
298
+ remotes = ["https://rubygems.org"];
299
+ sha256 = "1r9kx8p5z3mpyza1ihskd92rvzrm3k0jqvacil82g97f0vjyhnll";
300
+ type = "gem";
301
+ };
302
+ version = "2.10.0";
303
+ };
304
+ unf = {
305
+ dependencies = ["unf_ext"];
306
+ groups = ["default"];
307
+ platforms = [];
308
+ source = {
309
+ remotes = ["https://rubygems.org"];
310
+ sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
311
+ type = "gem";
312
+ };
313
+ version = "0.1.4";
314
+ };
315
+ unf_ext = {
316
+ groups = ["default"];
317
+ platforms = [];
318
+ source = {
319
+ remotes = ["https://rubygems.org"];
320
+ sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
321
+ type = "gem";
322
+ };
323
+ version = "0.0.7.7";
324
+ };
325
+ }
data/shell.nix ADDED
@@ -0,0 +1,40 @@
1
+ { pkgs ? import <nixpkgs> { }, ruby ? 2.7 }:
2
+
3
+ with pkgs;
4
+ let
5
+ mri =
6
+ if ruby == 2.5
7
+ then ruby_2_5
8
+ else if ruby == 2.6
9
+ then ruby_2_6
10
+ else if ruby == 2.7
11
+ then ruby_2_7
12
+ else if ruby == 3.0
13
+ then ruby_3_0
14
+ else abort "Unsupported Ruby version";
15
+ gems = bundlerEnv {
16
+ pname = "twterm";
17
+ gemdir = ./.;
18
+ ruby = mri;
19
+ };
20
+ in
21
+ mkShell rec {
22
+ buildInputs = [
23
+ bundix
24
+ bundler
25
+ gems
26
+ libffi
27
+ libidn
28
+ mri
29
+ ncurses
30
+ readline
31
+ ];
32
+ shellHook = ''
33
+ alias twterm='bundle exec bin/twterm'
34
+
35
+ bundle install -j=4 --path=vendor/bundle
36
+
37
+ ruby --version
38
+ bundle --version
39
+ '';
40
+ }