textbringer 0.1.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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