textbringer 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68977203d454a58e4191f2b74aba7239793f01ed
4
- data.tar.gz: fc172a9d8466197a4cd2383d1fd25a04b5f31056
3
+ metadata.gz: bb6561f5d595d683562f67d0553ef75b556b99b9
4
+ data.tar.gz: 9f7caf1348f813c52dd69654625e15dcd267e55e
5
5
  SHA512:
6
- metadata.gz: 428028614b59f7c75b9740ce2567f7f40887e2df3b13f4a860416c0b742ffcc41c117011a77d5b31f9138bb79f79e8b5142c288f72d803ee676881ceaf1b4eeb
7
- data.tar.gz: 5da641c9f7a42d4535a3f3889200fb97c83987f8223fba81a2c7d5e7324649804281c4965dcefce897762ba7dac400a406d93f483601ec9745f201fafe5e5ded
6
+ metadata.gz: 21644b91f2a282c768345186da700628d221f4b177f5b8184d203029d8c0daa0e6b25ff82b93b1432f424e55fe81c144495c980dd56191113f24106c8ba92051
7
+ data.tar.gz: fb3bf64d60ba016956c87e3dc040aa3de4bcb12f78aa30362e15a015aa355c988c1cf67a635cea327775651ed0c81a251e922754c1f4cd9d07add6f3f5228528
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.2.0
2
+
3
+ * Add bury_buffer and unbury_buffer.
4
+
1
5
  ## 0.1.9
2
6
 
3
7
  * Support registers.
@@ -70,9 +70,13 @@ module Textbringer
70
70
  @@detect_encoding_proc = f
71
71
  end
72
72
 
73
+ def self.list
74
+ @@list.dup
75
+ end
76
+
73
77
  def self.add(buffer)
74
78
  @@table[buffer.name] = buffer
75
- @@list.unshift(buffer)
79
+ @@list.push(buffer)
76
80
  end
77
81
 
78
82
  def self.current
@@ -82,7 +86,7 @@ module Textbringer
82
86
  def self.current=(buffer)
83
87
  if buffer && buffer.name && @@table.key?(buffer.name)
84
88
  @@list.delete(buffer)
85
- @@list.push(buffer)
89
+ @@list.unshift(buffer)
86
90
  end
87
91
  @@current = buffer
88
92
  end
@@ -95,12 +99,18 @@ module Textbringer
95
99
  @@global_mark_ring ||= Ring.new(CONFIG[:global_mark_ring_max])
96
100
  end
97
101
 
102
+ def self.other(buffer = @@current)
103
+ @@list.find { |buf| buf != buffer } || Buffer.find_or_new("*scratch*")
104
+ end
105
+
98
106
  def self.last
99
- if @@list.last == @@current
100
- @@list[-2]
101
- else
102
- @@list.last
103
- end
107
+ @@list.last
108
+ end
109
+
110
+ def self.bury(buffer = @@current)
111
+ @@list.delete(buffer)
112
+ @@list.push(buffer)
113
+ @@current = @@list.first
104
114
  end
105
115
 
106
116
  def self.count
@@ -80,7 +80,7 @@ module Textbringer
80
80
  def update_completions(xs)
81
81
  if xs.size > 1
82
82
  if COMPLETION[:original_buffer].nil?
83
- COMPLETION[:completions_window] = Window.windows[-2]
83
+ COMPLETION[:completions_window] = Window.list.last
84
84
  COMPLETION[:original_buffer] =
85
85
  COMPLETION[:completions_window].buffer
86
86
  end
@@ -82,6 +82,23 @@ module Textbringer
82
82
  end
83
83
  end
84
84
 
85
+ define_command(:bury_buffer, doc: <<~EOD) do
86
+ Put buffer at the end of the buffer list.
87
+ EOD
88
+ |buffer = Buffer.current|
89
+ if buffer.is_a?(String)
90
+ buffer = Buffer[buffer]
91
+ end
92
+ Buffer.bury(buffer)
93
+ Window.current.buffer = Buffer.current
94
+ end
95
+
96
+ define_command(:unbury_buffer, doc: <<~EOD) do
97
+ Switch to the last buffer in the buffer list.
98
+ EOD
99
+ switch_to_buffer(Buffer.last)
100
+ end
101
+
85
102
  define_command(:kill_buffer, doc: "Kill buffer.") do
86
103
  |buffer = read_buffer("Kill buffer: ", default: Buffer.current.name)|
87
104
  if buffer.is_a?(String)
@@ -92,11 +109,8 @@ module Textbringer
92
109
  message("Arioch! Arioch! Blood and souls for my Lord Arioch!")
93
110
  end
94
111
  buffer.kill
95
- if Buffer.count == 0
96
- buffer = Buffer.new_buffer("*scratch*")
97
- switch_to_buffer(buffer)
98
- elsif Buffer.current.nil?
99
- switch_to_buffer(Buffer.last)
112
+ if Buffer.current.nil?
113
+ switch_to_buffer(Buffer.other)
100
114
  end
101
115
  end
102
116
  end
@@ -5,7 +5,7 @@ module Textbringer
5
5
  define_generic_command :choose_completion
6
6
 
7
7
  COMPLETION_LIST_MODE_MAP = Keymap.new
8
- COMPLETION_LIST_MODE_MAP.define_key("\n", :choose_completion_command)
8
+ COMPLETION_LIST_MODE_MAP.define_key("\C-m", :choose_completion_command)
9
9
 
10
10
  define_syntax :link, /^.+$/
11
11
 
@@ -10,6 +10,7 @@ module Textbringer
10
10
  HELP_MODE_MAP.define_key("\C-c\C-b", :help_go_back)
11
11
  HELP_MODE_MAP.define_key(?r, :help_go_forward)
12
12
  HELP_MODE_MAP.define_key("\C-c\C-f", :help_go_forward)
13
+ HELP_MODE_MAP.define_key("q", :bury_buffer)
13
14
 
14
15
  define_syntax :link, /
15
16
  (?: ^\S*?:\d+$ ) |
@@ -160,7 +160,7 @@ module Textbringer
160
160
  candidates.select { |i| i.start_with?(s) }
161
161
  end
162
162
 
163
- def read_buffer(prompt, default: (Buffer.last || Buffer.current)&.name)
163
+ def read_buffer(prompt, default: Buffer.other.name)
164
164
  f = ->(s) { complete_for_minibuffer(s, Buffer.names) }
165
165
  read_from_minibuffer(prompt, completion_proc: f, default: default)
166
166
  end
@@ -1,3 +1,3 @@
1
1
  module Textbringer
2
- VERSION = "0.1.9"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -49,13 +49,17 @@ module Textbringer
49
49
  end
50
50
 
51
51
  @@started = false
52
- @@windows = []
52
+ @@list = []
53
53
  @@current = nil
54
54
  @@echo_area = nil
55
55
  @@has_colors = false
56
56
 
57
- def self.windows
58
- @@windows
57
+ def self.list(include_echo_area: false)
58
+ if include_echo_area
59
+ @@list.dup
60
+ else
61
+ @@list.reject(&:echo_area?)
62
+ end
59
63
  end
60
64
 
61
65
  def self.current
@@ -64,7 +68,7 @@ module Textbringer
64
68
 
65
69
  def self.current=(window)
66
70
  if window.deleted?
67
- window = @@windows.first
71
+ window = @@list.first
68
72
  end
69
73
  @@current.save_point if @@current && !@@current.deleted?
70
74
  @@current = window
@@ -76,19 +80,19 @@ module Textbringer
76
80
  if @@current.echo_area?
77
81
  raise EditorError, "Can't delete the echo area"
78
82
  end
79
- if @@windows.size == 2
83
+ if @@list.size == 2
80
84
  raise EditorError, "Can't delete the sole window"
81
85
  end
82
- i = @@windows.index(@@current)
86
+ i = @@list.index(@@current)
83
87
  if i == 0
84
- window = @@windows[1]
88
+ window = @@list[1]
85
89
  window.move(0, 0)
86
90
  else
87
- window = @@windows[i - 1]
91
+ window = @@list[i - 1]
88
92
  end
89
93
  window.resize(@@current.lines + window.lines, window.columns)
90
94
  @@current.delete
91
- @@windows.delete_at(i)
95
+ @@list.delete_at(i)
92
96
  self.current = window
93
97
  end
94
98
 
@@ -96,7 +100,7 @@ module Textbringer
96
100
  if @@current.echo_area?
97
101
  raise EditorError, "Can't expand the echo area to full screen"
98
102
  end
99
- @@windows.delete_if do |window|
103
+ @@list.delete_if do |window|
100
104
  if window.current? || window.echo_area?
101
105
  false
102
106
  else
@@ -109,10 +113,10 @@ module Textbringer
109
113
  end
110
114
 
111
115
  def self.other_window
112
- i = @@windows.index(@@current)
116
+ i = @@list.index(@@current)
113
117
  begin
114
118
  i += 1
115
- window = @@windows[i % @@windows.size]
119
+ window = @@list[i % @@list.size]
116
120
  end while !window.active?
117
121
  self.current = window
118
122
  end
@@ -161,20 +165,20 @@ module Textbringer
161
165
  window =
162
166
  Textbringer::Window.new(Window.lines - 1, Window.columns, 0, 0)
163
167
  window.buffer = Buffer.new_buffer("*scratch*")
164
- @@windows.push(window)
168
+ @@list.push(window)
165
169
  Window.current = window
166
170
  @@echo_area = Textbringer::EchoArea.new(1, Window.columns,
167
171
  Window.lines - 1, 0)
168
172
  Buffer.minibuffer.keymap = MINIBUFFER_LOCAL_MAP
169
173
  @@echo_area.buffer = Buffer.minibuffer
170
- @@windows.push(@@echo_area)
174
+ @@list.push(@@echo_area)
171
175
  @@started = true
172
176
  yield
173
177
  ensure
174
- @@windows.each do |win|
175
- win.delete
178
+ @@list.each do |win|
179
+ win.close
176
180
  end
177
- @@windows.clear
181
+ @@list.clear
178
182
  Curses.echo
179
183
  Curses.noraw
180
184
  Curses.nl
@@ -186,7 +190,7 @@ module Textbringer
186
190
  def self.redisplay
187
191
  return if Controller.current.executing_keyboard_macro?
188
192
  return if Window.current.has_input?
189
- @@windows.each do |window|
193
+ @@list.each do |window|
190
194
  window.redisplay unless window.current?
191
195
  end
192
196
  current.redisplay
@@ -194,7 +198,7 @@ module Textbringer
194
198
  end
195
199
 
196
200
  def self.redraw
197
- @@windows.each do |window|
201
+ @@list.each do |window|
198
202
  window.redraw unless window.current?
199
203
  end
200
204
  current.redraw
@@ -214,7 +218,7 @@ module Textbringer
214
218
  end
215
219
 
216
220
  def self.resize
217
- @@windows.delete_if do |window|
221
+ @@list.delete_if do |window|
218
222
  if !window.echo_area? &&
219
223
  window.y > Window.lines - CONFIG[:window_min_height]
220
224
  window.delete
@@ -223,9 +227,9 @@ module Textbringer
223
227
  false
224
228
  end
225
229
  end
226
- @@windows.each_with_index do |window, i|
230
+ @@list.each_with_index do |window, i|
227
231
  unless window.echo_area?
228
- if i < @@windows.size - 2
232
+ if i < @@list.size - 2
229
233
  window.resize(window.lines, Window.columns)
230
234
  else
231
235
  window.resize(Window.lines - 1 - window.y, Window.columns)
@@ -275,7 +279,7 @@ module Textbringer
275
279
  def delete
276
280
  unless @deleted
277
281
  if current?
278
- Window.current = @@windows.first
282
+ Window.current = @@list.first
279
283
  end
280
284
  delete_marks
281
285
  @window.close
@@ -283,6 +287,10 @@ module Textbringer
283
287
  end
284
288
  end
285
289
 
290
+ def close
291
+ @window.close
292
+ end
293
+
286
294
  def buffer=(buffer)
287
295
  delete_marks
288
296
  @buffer = buffer
@@ -571,23 +579,23 @@ module Textbringer
571
579
  resize(new_lines, columns)
572
580
  new_window = Window.new(old_lines - new_lines, columns, y + new_lines, x)
573
581
  new_window.buffer = buffer
574
- i = @@windows.index(self)
575
- @@windows.insert(i + 1, new_window)
582
+ i = @@list.index(self)
583
+ @@list.insert(i + 1, new_window)
576
584
  end
577
585
 
578
586
  def enlarge(n)
579
587
  if n > 0
580
588
  max_height = Window.lines -
581
- CONFIG[:window_min_height] * (@@windows.size - 2) - 1
589
+ CONFIG[:window_min_height] * (@@list.size - 2) - 1
582
590
  new_lines = [lines + n, max_height].min
583
591
  needed_lines = new_lines - lines
584
592
  resize(new_lines, columns)
585
- i = @@windows.index(self)
586
- indices = (i + 1).upto(@@windows.size - 2).to_a +
593
+ i = @@list.index(self)
594
+ indices = (i + 1).upto(@@list.size - 2).to_a +
587
595
  (i - 1).downto(0).to_a
588
596
  indices.each do |j|
589
597
  break if needed_lines == 0
590
- window = @@windows[j]
598
+ window = @@list[j]
591
599
  extended_lines = [
592
600
  window.lines - CONFIG[:window_min_height],
593
601
  needed_lines
@@ -596,20 +604,20 @@ module Textbringer
596
604
  needed_lines -= extended_lines
597
605
  end
598
606
  y = 0
599
- @@windows.each do |win|
607
+ @@list.each do |win|
600
608
  win.move(y, win.x)
601
609
  y += win.lines
602
610
  end
603
- elsif n < 0 && @@windows.size > 2
611
+ elsif n < 0 && @@list.size > 2
604
612
  new_lines = [lines + n, CONFIG[:window_min_height]].max
605
613
  diff = lines - new_lines
606
614
  resize(new_lines, columns)
607
- i = @@windows.index(self)
608
- if i < @@windows.size - 2
609
- window = @@windows[i + 1]
615
+ i = @@list.index(self)
616
+ if i < @@list.size - 2
617
+ window = @@list[i + 1]
610
618
  window.move(window.y - diff, window.x)
611
619
  else
612
- window = @@windows[i - 1]
620
+ window = @@list[i - 1]
613
621
  move(self.y + diff, self.x)
614
622
  end
615
623
  window.resize(window.lines + diff, window.columns)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: textbringer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shugo Maeda
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-13 00:00:00.000000000 Z
11
+ date: 2017-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses