vimamsa 0.1.9 → 0.1.10

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
  SHA256:
3
- metadata.gz: ca98d0950bc33d6c918e17c2092489ac69d5e5b722d781fe0f83736ccdfabb82
4
- data.tar.gz: f4347a60b616dc3ea2575e3fe53c59397bf90d84f44fed7c28f0d792e5fc900d
3
+ metadata.gz: bfc14cb231bc93909b4866e08cbd4503b4f4444527c0b65b4a9edb11d863faa0
4
+ data.tar.gz: 7b63cdbff33cdcdbf7d6f5d025d8ec13a6f39a3ee937f716ec990bba743f3239
5
5
  SHA512:
6
- metadata.gz: f3254d05d66c7dd92f79d9393986da65f9401e3b48627c620c7c9bf0cfec20c039b640a72cd70100f01757637a8af17a645228e3f0f789a0f09c6fc6ecf710ea
7
- data.tar.gz: 2391bb4e5a93ae86f180a7138799323dbe01bf8ac94385d8f523f109025a13511ea3ba10a31b9b9cedd02ee495822d2b162dda6bab2b8f8b0a2c61f068f6b42c
6
+ metadata.gz: 2176d7aaa01be873deb8687cf2b8d75044edba4ccfc3685cf334cae973c93e15ba6dc47d9667a9848209329b043f2ba8daf049f4340ddb130538584e17b5a5de
7
+ data.tar.gz: afcdd6c30018dc971fc165d8ed6f63f5b2ccf109a167d0ec39cf03c150ac03d7765c4c0d83e3a6ceabaae74cf44f759144dbe5e2d9aee1b191182ca7fb622035
data/README.md CHANGED
@@ -26,11 +26,16 @@ Packages for optional features:
26
26
  sudo apt install ack-grep clang-format
27
27
  ```
28
28
 
29
- For customization, edit dot_vimamsarc.rb and copy to ~/.vimamsarc
29
+ For customization, edit ~/.vimamsa/custom.rb
30
+
31
+ ## Screenshots
32
+
33
+ <a href="https://samiddhi.net/vimamsa/screenshot1.png" target="_blank"><img src="https://samiddhi.net/vimamsa/screenshot1.png" width="400"/></a>
34
+ <a href="https://samiddhi.net/vimamsa/screenshot2.png" target="_blank"><img src="https://samiddhi.net/vimamsa/screenshot2.png" width="400"/></a>
30
35
 
31
36
  ## Key bindings
32
37
 
33
- Key bindings are very much like in VIm. For details, see file lib/vimamsa/key_bindings.rb and lib/vimamsa/default_bindings.rb
38
+ Key bindings are very much like in VIm. For details, see file lib/vimamsa/key_bindings.rb and lib/vimamsa/key_bindings_vimlike.rb
34
39
 
35
40
  Keys that work somewhat similarly as in Vim:
36
41
 
@@ -72,7 +77,7 @@ ctrl-x means press and hold ctrl key, press x
72
77
  </td></tr>
73
78
  <tr> <td style="text-align:center;">,b</td> <td style="text-align:left;"> Switch buffer (jump to other open file)</td></tr>
74
79
  <tr> <td style="text-align:center;">,g</td> <td style="text-align:left;">search for input string inside current buffer</td></tr>
75
- <tr> <td style="text-align:center;">,f</td> <td style="text-align:left;">Fuzzy filename search</td></tr>
80
+ <tr> <td style="text-align:center;">,f</td> <td style="text-align:left;">File finder</td></tr>
76
81
  <tr> <td style="text-align:center;">space c</td> <td style="text-align:left;">insert character "c"</td></tr>
77
82
  </tbody>
78
83
  </table>
@@ -116,7 +121,7 @@ ctrl-x means press and hold ctrl key, press x
116
121
  </tbody>
117
122
  </table>
118
123
 
119
- Bindings can be customized in ~/.vimamsarc
124
+ Bindings can be customized in ~/.vimamsa/custom.rb
120
125
  For example, to bind ctrl-n to action "create new file":
121
126
  ```
122
127
  bindkey 'C ctrl-n', 'create_new_file()'
data/custom_example.rb CHANGED
@@ -13,7 +13,7 @@
13
13
  # setcnf :tab_width, 4
14
14
 
15
15
  # Open this file every time the program starts
16
- # setcnf :startup_file, "~/Documents/main.txt"
16
+ # setcnf :startup_file, "~/Documents/startup.txt"
17
17
 
18
18
  def insert_date()
19
19
  # $buffer.insert_txt("#{DateTime.now().strftime("==========\n%Y-%m-%d")}\n")
data/lib/vimamsa/ack.rb CHANGED
@@ -4,12 +4,8 @@ class FileContentSearch
4
4
  def self.start_gui()
5
5
  search_paths = vma.get_content_search_paths.join("<br/>")
6
6
 
7
- nfo = "<html><h2>Search contents of text files</h2>
8
- <div style='width:300px'>
9
- <p>Hint: add empty file named .vma_project to dirs you want to search.</p>\n<p>If .vma_project exists in parent dir of current file, searches within that dir</p></div></html>"
10
-
11
- nfo = "<span size='x-large'>Search contents of all files using ack</span>
12
- Will search the following directories:
7
+ nfo = "<span size='x-large'>Search contents of text files</span>
8
+ Will search all .txt files in the following directories:
13
9
  #{search_paths}
14
10
 
15
11
  <span>Hint: add empty file named .vma_project to directories you want to search in.
@@ -25,6 +21,7 @@ Will search the following directories:
25
21
  fext = Set[".txt"]
26
22
  dlist = []
27
23
  for d in vma.get_content_search_paths
24
+ # Search for files with extension .txt and size < 200k
28
25
  dlist = dlist + Dir.glob("#{d}/**/*").select { |e| File.file?(e) and fext.include?(File.extname(e)) and File.size(e) < 200e3 }
29
26
  end
30
27
  bufstr = "Results:\n\n"
@@ -33,8 +30,6 @@ Will search the following directories:
33
30
  ind = scan_indexes(txt, /#{instr}/i)
34
31
  if !ind.empty?
35
32
  for x in ind
36
- # Ripl.start :binding => binding
37
-
38
33
  starti = x - 30
39
34
  endi = x + 30
40
35
  starti = 0 if starti < 0
@@ -68,38 +63,6 @@ Will search the following directories:
68
63
  gui_one_input_action(nfo, "Search:", "search", callback)
69
64
  end
70
65
 
71
- def ack_buffer(instr, b = nil)
72
- instr = Shellwords.escape(instr)
73
- bufstr = ""
74
- for path in vma.get_content_search_paths
75
- bufstr += run_cmd("ack -Q --type-add=gd=.gd -k --nohtml --nojs --nojson '#{instr}' #{path}")
76
- end
77
- if bufstr.size > 5
78
- create_new_file(nil, bufstr)
79
- else
80
- message("No results for input:#{instr}")
81
- end
82
- end
83
-
84
- def gui_ack()
85
- search_paths = vma.get_content_search_paths.join("<br/>")
86
-
87
- nfo = "<html><h2>Search contents of all files using ack</h2>
88
- <div style='width:300px'>
89
- <p>Hint: add empty file named .vma_project to dirs you want to search.</p>\n<p>If .vma_project exists in parent dir of current file, searches within that dir</p></div></html>"
90
-
91
- nfo = "<span size='x-large'>Search contents of all files using ack</span>
92
- Will search the following directories:
93
- #{search_paths}
94
-
95
- <span>Hint: add empty file named .vma_project to directories you want to search in.
96
- If .vma_project exists in parent directory of current file, searches within that directory.
97
- </span>"
98
-
99
- callback = proc { |x| ack_buffer(x) }
100
- gui_one_input_action(nfo, "Search:", "search", callback)
101
- end
102
-
103
66
  def ack_buffer(instr, b = nil)
104
67
  instr = Shellwords.escape(instr)
105
68
  bufstr = ""
@@ -320,6 +320,7 @@ class Buffer < String
320
320
  @dirname = File.dirname(@fname)
321
321
  userhome = File.expand_path("~")
322
322
  @subtitle = @dirname.gsub(/^#{userhome}/, "~")
323
+ vma.buffers.last_dir = @dirname
323
324
 
324
325
  detect_file_language
325
326
  end
@@ -574,8 +575,7 @@ class Buffer < String
574
575
 
575
576
  def comment_linerange(r)
576
577
  com_str = get_com_str()
577
- #lines = $buffer[r].split(/(\n)/).each_slice(2).map { |x| x[0] }
578
- lines = $buffer[r].lines
578
+ lines = self[r].lines
579
579
  mod = ""
580
580
  lines.each { |line|
581
581
  m = line.match(/^(\s*)(\S.*)/)
@@ -637,14 +637,14 @@ class Buffer < String
637
637
  elsif op == :uncomment
638
638
  uncomment_linerange(first..last)
639
639
  end
640
- $buffer.end_visual_mode
640
+ self.end_visual_mode
641
641
  end
642
642
  end
643
643
 
644
644
  def uncomment_linerange(r)
645
645
  com_str = get_com_str()
646
- #r=$buffer.line_range($buffer.lpos, 2)
647
- lines = $buffer[r].split(/(\n)/).each_slice(2).map { |x| x[0] }
646
+ #r=self.line_range(self.lpos, 2)
647
+ lines = self[r].split(/(\n)/).each_slice(2).map { |x| x[0] }
648
648
  mod = lines.collect { |x| x.sub(/^(\s*)(#{com_str}\s?)/, '\1') + "\n" }.join()
649
649
  replace_range(r, mod)
650
650
  end
@@ -1356,7 +1356,7 @@ class Buffer < String
1356
1356
  d2 = [@pos, INSERT, 1, char]
1357
1357
  add_delta(d1, true)
1358
1358
  add_delta(d2, true)
1359
- debug "DELTAS:#{$buffer.deltas.inspect} "
1359
+ debug "DELTAS:#{self.deltas.inspect} "
1360
1360
  end
1361
1361
 
1362
1362
  def insert_txt_at(c, pos)
@@ -1449,7 +1449,6 @@ class Buffer < String
1449
1449
  for d in deltas
1450
1450
  add_delta(d, true, true)
1451
1451
  end
1452
- # $buffer.update_content(IO.read('test.txt'))
1453
1452
  end
1454
1453
 
1455
1454
  def need_redraw!
@@ -1685,7 +1684,7 @@ class Buffer < String
1685
1684
  # If current file has fname, save to that fname
1686
1685
  # Else search for previously open files and save to the directory of
1687
1686
  # the last viewed file that has a filename
1688
- # $buffers[$buffer_history.reverse[1]].fname
1687
+ # selffers[$buffer_history.reverse[1]].fname
1689
1688
 
1690
1689
  if @fname
1691
1690
  savepath = File.dirname(@fname)
@@ -1747,7 +1746,7 @@ class Buffer < String
1747
1746
  def indent()
1748
1747
  file = Tempfile.new("out")
1749
1748
  infile = Tempfile.new("in")
1750
- file.write($buffer.to_s)
1749
+ file.write(self.to_s)
1751
1750
  file.flush
1752
1751
  bufc = "FOO"
1753
1752
 
@@ -1773,12 +1772,17 @@ class Buffer < String
1773
1772
  else
1774
1773
  return
1775
1774
  end
1776
- $buffer.update_content(bufc)
1775
+ self.update_content(bufc)
1777
1776
  center_on_current_line #TODO: needed?
1778
1777
  file.close; file.unlink
1779
1778
  infile.close; infile.unlink
1780
1779
  end
1781
1780
 
1781
+ def close()
1782
+ idx = vma.buffers.get_buffer_by_id(@id)
1783
+ vma.buffers.close_buffer(idx)
1784
+ end
1785
+
1782
1786
  def backup()
1783
1787
  fname = @fname
1784
1788
  return if !@fname
@@ -1799,7 +1803,7 @@ end
1799
1803
  #TODO
1800
1804
  def write_to_file(savepath, s)
1801
1805
  if is_path_writable(savepath)
1802
- IO.write(savepath, $buffer.to_s)
1806
+ IO.write(savepath, self.to_s)
1803
1807
  else
1804
1808
  message("PATH NOT WRITABLE: #{savepath}")
1805
1809
  end
@@ -1814,7 +1818,7 @@ def is_path_writable(fpath)
1814
1818
  end
1815
1819
 
1816
1820
  def backup_all_buffers()
1817
- for buf in $buffers
1821
+ for buf in selffers
1818
1822
  buf.backup
1819
1823
  end
1820
1824
  message("Backup all buffers")
@@ -1,9 +1,8 @@
1
-
2
1
  def save_buffer_list()
3
2
  message("Save buffer list")
4
3
  buffn = get_dot_path("buffers.txt")
5
4
  f = File.open(buffn, "w")
6
- bufstr = $buffers.collect { |buf| buf.fname }.inspect
5
+ bufstr = vma.buffers.collect { |buf| buf.fname }.inspect
7
6
  f.write(bufstr)
8
7
  f.close()
9
8
  end
@@ -21,18 +20,23 @@ def load_buffer_list()
21
20
  end
22
21
 
23
22
  class BufferList < Array
24
- attr_reader :current_buf
23
+ attr_reader :current_buf, :last_dir
25
24
 
25
+ def initialize()
26
+ @last_dir = File.expand_path(".")
27
+ super
28
+ end
26
29
 
30
+ # lastdir = File.expand_path(".") if lastdir.nil?
27
31
  def <<(_buf)
28
32
  super
29
- $buffer = _buf
33
+ vma.buf = _buf
30
34
  @current_buf = self.size - 1
31
35
  $buffer_history << @current_buf
32
36
  @recent_ind = 0
33
- $hook.call(:change_buffer, $buffer)
34
- gui_set_current_buffer($buffer.id)
35
- gui_set_cursor_pos($buffer.id, $buffer.pos)
37
+ $hook.call(:change_buffer, vma.buf)
38
+ gui_set_current_buffer(vma.buf.id)
39
+ gui_set_cursor_pos(vma.buf.id, vma.buf.pos)
36
40
  end
37
41
 
38
42
  def switch()
@@ -58,12 +62,11 @@ class BufferList < Array
58
62
  buf_idx = self.index { |b| b.fname == fname }
59
63
  return buf_idx
60
64
  end
61
-
62
- def get_buffer_by_id(id)
65
+
66
+ def get_buffer_by_id(id)
63
67
  buf_idx = self.index { |b| b.id == id }
64
68
  return buf_idx
65
69
  end
66
-
67
70
 
68
71
  def add_current_buf_to_history()
69
72
  @recent_ind = 0
@@ -74,11 +77,11 @@ class BufferList < Array
74
77
  def set_current_buffer(buffer_i, update_history = true)
75
78
  buffer_i = self.size -1 if buffer_i > self.size
76
79
  buffer_i = 0 if buffer_i < 0
77
- $buffer = self[buffer_i]
78
- return if !$buffer
80
+ vma.buf = self[buffer_i]
81
+ return if !vma.buf
79
82
  @current_buf = buffer_i
80
83
  debug "SWITCH BUF2. bufsize:#{self.size}, curbuf: #{@current_buf}"
81
- fpath = $buffer.fname
84
+ fpath = vma.buf.fname
82
85
  if fpath and fpath.size > 50
83
86
  fpath = fpath[-50..-1]
84
87
  end
@@ -87,31 +90,25 @@ class BufferList < Array
87
90
  add_current_buf_to_history
88
91
  end
89
92
 
90
- $hook.call(:change_buffer, $buffer)
91
- $buffer.set_active
93
+ $hook.call(:change_buffer, vma.buf)
94
+ vma.buf.set_active
92
95
 
93
- gui_set_current_buffer($buffer.id)
94
- gui_set_window_title($buffer.title,$buffer.subtitle)
96
+ gui_set_current_buffer(vma.buf.id)
97
+ gui_set_window_title(vma.buf.title, vma.buf.subtitle)
98
+
99
+ if vma.buf.fname
100
+ @last_dir = File.dirname(vma.buf.fname)
101
+ end
95
102
 
96
103
  # hpt_scan_images() if $debug # experimental
97
104
  end
98
105
 
106
+ def last_dir=(d)
107
+ @last_dir = d
108
+ end
109
+
99
110
  def get_last_dir
100
- lastdir = nil
101
- if $buffer.fname
102
- lastdir = File.dirname($buffer.fname)
103
- else
104
- for bufid in $buffer_history.reverse[1..-1]
105
- bf = $buffers[bufid]
106
- debug "FNAME:#{bf.fname}"
107
- if bf.fname
108
- lastdir = File.dirname(bf.fname)
109
- break
110
- end
111
- end
112
- end
113
- lastdir = File.expand_path(".") if lastdir.nil?
114
- return lastdir
111
+ return @last_dir
115
112
  end
116
113
 
117
114
  def get_recent_buffers()
@@ -145,26 +142,23 @@ class BufferList < Array
145
142
  $buffer_history = bh.reverse
146
143
  end
147
144
 
148
-
149
145
  # Close buffer in the background
150
146
  # TODO: if open in another widget
151
147
  def close_other_buffer(buffer_i)
152
148
  return if self.size <= buffer_i
153
149
  return if @current_buf == buffer_i
154
-
150
+
155
151
  bufname = self[buffer_i].basename
156
152
  message("Closed buffer #{bufname}")
157
153
 
158
154
  self.slice!(buffer_i)
159
155
  $buffer_history = $buffer_history.collect { |x| r = x; r = x - 1 if x > buffer_i; r = nil if x == buffer_i; r }.compact
160
-
161
156
  end
162
157
 
163
-
164
158
  def close_buffer(buffer_i, from_recent = false)
165
159
  return if buffer_i.nil?
166
160
  return if self.size <= buffer_i
167
-
161
+
168
162
  bufname = self[buffer_i].basename
169
163
  message("Closed buffer #{bufname}")
170
164
  recent = get_recent_buffers
data/lib/vimamsa/debug.rb CHANGED
@@ -81,19 +81,19 @@ end
81
81
 
82
82
  def run_test(test_id)
83
83
  target_results = read_file("", "tests/test_#{test_id}_output.txt")
84
- old_buffer = $buffer
85
- $buffer = Buffer.new("", "")
84
+ old_buffer = vma.buf
85
+ vma.buf = Buffer.new("", "")
86
86
  load "tests/test_#{test_id}.rb"
87
- test_ok = $buffer.to_s.strip == target_results.strip
87
+ test_ok = vma.buf.to_s.strip == target_results.strip
88
88
  puts "##################"
89
89
  puts target_results
90
90
  puts "##################"
91
- puts $buffer.to_s
91
+ puts vma.buf.to_s
92
92
  puts "##################"
93
93
  puts "TEST OK" if test_ok
94
94
  puts "TEST FAILED" if !test_ok
95
95
  puts "##################"
96
- $buffer = old_buffer
96
+ vma.buf = old_buffer
97
97
  end
98
98
 
99
99
  #TODO: remove?
@@ -121,7 +121,7 @@ def run_random_jump_test__tmpl(test_time = 60 * 60 * 10)
121
121
  # puts buf.current_line()
122
122
  # puts "======================"
123
123
 
124
- render_buffer($buffer)
124
+ render_buffer(vma.buf)
125
125
 
126
126
  gui_sleep(rand() / 2)
127
127
  if rand() < (1 / 40.0)
@@ -130,9 +130,9 @@ def run_random_jump_test__tmpl(test_time = 60 * 60 * 10)
130
130
 
131
131
  gui_trigger_event
132
132
  buf.insert_txt("X") if rand() > 0.25
133
- render_buffer($buffer)
133
+ render_buffer(vma.buf)
134
134
 
135
- $buffers.set_current_buffer(rand($buffers.size)) if rand > 0.25
135
+ vma.buffers.set_current_buffer(rand(vma.buffers.size)) if rand > 0.25
136
136
  step += 1
137
137
  end
138
138
  end
@@ -165,11 +165,11 @@ class Editor
165
165
  else
166
166
  buffer = Buffer.new(" \n")
167
167
  end
168
- $buffers << buffer
168
+ vma.buffers << buffer
169
169
 
170
170
  # load_theme($cnf[:theme])
171
171
 
172
- # render_buffer($buffer, 1) #TODO
172
+ # render_buffer(vma.buf, 1) #TODO
173
173
 
174
174
  # gui_select_buffer_init #TODO
175
175
  # gui_file_finder_init #TODO
@@ -197,6 +197,10 @@ class Editor
197
197
  def buf()
198
198
  return $buffer
199
199
  end
200
+ def buf=(aa)
201
+ $buffer=aa
202
+ end
203
+
200
204
 
201
205
  def buffers()
202
206
  return $buffers
@@ -256,7 +260,7 @@ class Editor
256
260
  # Register converter
257
261
  def reg_conv(converter, converter_id)
258
262
  @converters[converter_id] = converter
259
- reg_act(converter_id, proc { $buffer.convert_selected_text(converter_id) }, "Converter #{converter_id}", { :scope => [:selection] })
263
+ reg_act(converter_id, proc { vma.buf.convert_selected_text(converter_id) }, "Converter #{converter_id}", { :scope => [:selection] })
260
264
  end
261
265
 
262
266
  def apply_conv(converter_id, txt)
@@ -268,7 +272,7 @@ class Editor
268
272
  r = @file_content_search_paths.clone
269
273
  p = find_project_dir_of_cur_buffer()
270
274
  if p.nil?
271
- p = buf.dirname # Search dir of current file by default
275
+ p = vma.buffers.last_dir
272
276
  end
273
277
 
274
278
  if p and !@file_content_search_paths.include?(p)
@@ -303,7 +307,7 @@ end
303
307
 
304
308
  def open_file_dialog()
305
309
  path = ""
306
- path = $buffer.fname if $buffer.fname
310
+ path = vma.buf.fname if vma.buf.fname
307
311
  gui_open_file_dialog(File.dirname(path))
308
312
  end
309
313
 
@@ -339,8 +343,8 @@ end
339
343
 
340
344
  def set_cursor_pos(new_pos)
341
345
  buf.set_pos(new_pos)
342
- #render_buffer($buffer)
343
- debug "New pos: #{new_pos}lpos:#{$buffer.lpos} cpos:#{$buffer.cpos}"
346
+ #render_buffer(vma.buf)
347
+ debug "New pos: #{new_pos}lpos:#{vma.buf.lpos} cpos:#{vma.buf.cpos}"
344
348
  end
345
349
 
346
350
  def set_last_command(cmd)
@@ -361,7 +365,7 @@ end
361
365
 
362
366
  def repeat_last_find()
363
367
  return if !defined? $last_find_command
364
- $buffer.jump_to_next_instance_of_char($last_find_command[:char],
368
+ vma.buf.jump_to_next_instance_of_char($last_find_command[:char],
365
369
  $last_find_command[:direction])
366
370
  end
367
371
 
@@ -397,10 +401,10 @@ end
397
401
 
398
402
  def diff_buffer()
399
403
  bufstr = ""
400
- orig_path = $buffer.fname
404
+ orig_path = vma.buf.fname
401
405
  infile = Tempfile.new("out")
402
406
  infile = Tempfile.new("in")
403
- infile.write($buffer.to_s)
407
+ infile.write(vma.buf.to_s)
404
408
  infile.flush
405
409
  cmd = "diff -w '#{orig_path}' #{infile.path}"
406
410
  # debug cmd
@@ -446,7 +450,7 @@ def minibuffer_new_char(c)
446
450
  $minibuffer.insert_txt(c)
447
451
  debug "MINIBUFFER: #{c}"
448
452
  end
449
- #$buffer = $minibuffer
453
+ #vma.buf = $minibuffer
450
454
  end
451
455
 
452
456
  # def readchar_new_char(c)
@@ -499,7 +503,8 @@ def create_new_file(filename = nil, file_contents = "\n")
499
503
  debug "NEW FILE CREATED"
500
504
  buffer = Buffer.new(file_contents)
501
505
  # gui_set_current_buffer(buffer.id) #TODO: remove?
502
- $buffers << buffer
506
+ vma.buffers << buffer
507
+ vma.kbd.set_mode_to_default
503
508
  return buffer
504
509
  end
505
510
 
@@ -517,7 +522,7 @@ end
517
522
 
518
523
  def load_buffer(fname)
519
524
  return if !File.exist?(fname)
520
- existing_buffer = $buffers.get_buffer_by_filename(fname)
525
+ existing_buffer = vma.buffers.get_buffer_by_filename(fname)
521
526
  if existing_buffer != nil
522
527
  $buffer_history << existing_buffer
523
528
  return
@@ -529,8 +534,8 @@ def load_buffer(fname)
529
534
  debug("DONE LOAD: #{fname}")
530
535
  #buf = filter_buffer(buffer)
531
536
  # debug("END FILTER: #{fname}")
532
- $buffers << buffer
533
- #$buffer_history << $buffers.size - 1
537
+ vma.buffers << buffer
538
+ #$buffer_history << vma.buffers.size - 1
534
539
  end
535
540
 
536
541
  def jump_to_file(filename, linenum = nil, charn = nil)
@@ -561,11 +566,11 @@ end
561
566
  def open_new_file(filename, file_contents = "")
562
567
  #TODO: expand path
563
568
  filename = File.expand_path(filename)
564
- b = $buffers.get_buffer_by_filename(filename)
569
+ b = vma.buffers.get_buffer_by_filename(filename)
565
570
  # File is already opened to existing buffer
566
571
  if b != nil
567
572
  message "Switching to: #{filename}"
568
- $buffers.set_current_buffer(b)
573
+ vma.buffers.set_current_buffer(b)
569
574
  else
570
575
  message "New file opened: #{filename}"
571
576
  fname = filename
@@ -680,8 +685,8 @@ end
680
685
  def find_project_dir_of_cur_buffer()
681
686
  # Find "project dir" of current file. If currently editing file in path "/foo/bar/baz/fn.txt" and file named "/foo/bar/.vma_project" exists, then dir /foo/bar is treated as project dir and subject to e.g. ack search.
682
687
  pdir = nil
683
- if $buffer.fname
684
- pdir = find_project_dir_of_fn($buffer.fname)
688
+ if vma.buf.fname
689
+ pdir = find_project_dir_of_fn(vma.buf.fname)
685
690
  end
686
691
  # debug "Proj dir of current file: #{pdir}"
687
692
  return pdir
@@ -33,7 +33,7 @@ class Encrypt
33
33
  end
34
34
 
35
35
  def decrypt_cur_buffer(password, b = nil)
36
- $buffer.decrypt(password)
36
+ vma.buf.decrypt(password)
37
37
  end
38
38
 
39
39
  def encrypt_cur_buffer()
@@ -42,6 +42,6 @@ def encrypt_cur_buffer()
42
42
  end
43
43
 
44
44
  def encrypt_cur_buffer_callback(password,b=nil)
45
- $buffer.set_encrypted(password)
45
+ vma.buf.set_encrypted(password)
46
46
  end
47
47
 
@@ -1,4 +1,3 @@
1
-
2
1
  class FileManager
3
2
  @@cur
4
3
 
@@ -28,14 +27,14 @@ class FileManager
28
27
 
29
28
  # bindkey "C o", :delete_state
30
29
 
31
- $kbd.add_minor_mode("fexp", :file_exp, :command)
30
+ vma.kbd.add_minor_mode("fexp", :file_exp, :command)
32
31
 
33
32
  bindkey "fexp o m", :fexp_sort_mtime
34
33
  bindkey "fexp o f", :fexp_sort_fname
35
34
 
36
35
  # bindkey "fexp l", [:fexp_right, proc { debug "==fexp_right==" }, ""]
37
36
  bindkey "fexp h", :fexp_chdir_parent
38
- bindkey "fexp esc", [:fexp_quit, proc { $kbd.set_mode(:command) }, ""]
37
+ bindkey "fexp esc", [:fexp_quit, proc { FileManager.cur.quit }, ""]
39
38
  bindkey "fexp enter", :fexp_select
40
39
  bindkey "fexp l", :fexp_select
41
40
 
@@ -66,6 +65,8 @@ class FileManager
66
65
 
67
66
  def dir_to_buf(dirpath, b = nil)
68
67
  # File.stat("testfile").mtime
68
+
69
+ vma.buffers.last_dir = dirpath
69
70
  dirpath = File.expand_path(dirpath)
70
71
  @header = []
71
72
  @header << "#{dirpath}"
@@ -92,9 +93,7 @@ class FileManager
92
93
  end
93
94
  end
94
95
 
95
- # sort_by = :mtime
96
- # sort_by = :name
97
- # Ripl.start :binding => binding
96
+
98
97
  @cfiles.sort_by! { |x| x[1].mtime }.reverse! if @sort_by == :mtime
99
98
  @cfiles.sort_by! { |x| x[1].size }.reverse! if @sort_by == :size
100
99
  @cfiles.sort_by! { |x| x[0] } if @sort_by == :name
@@ -140,6 +139,9 @@ class FileManager
140
139
  else
141
140
  open_with_default_program(fn)
142
141
  end
143
- # debug l.inspect
142
+ end
143
+
144
+ def quit
145
+ @buf.close
144
146
  end
145
147
  end
data/lib/vimamsa/gui.rb CHANGED
@@ -407,7 +407,7 @@ class VMAgui
407
407
  $sw2 = sw
408
408
  sw.set_size_request(-1, 12)
409
409
 
410
- view = VSourceView.new()
410
+ view = VSourceView.new(nil, nil)
411
411
  view.set_highlight_current_line(false)
412
412
  view.set_show_line_numbers(false)
413
413
  # view.set_buffer(buf1)
@@ -515,7 +515,11 @@ class VMAgui
515
515
 
516
516
  def init_window
517
517
  @window = Gtk::Window.new(:toplevel)
518
- @window.set_default_size(650, 850)
518
+ sh = @window.screen.height
519
+ sw = @window.screen.width
520
+ # TODO:Maximise vertically
521
+ @window.set_default_size((sw * 0.45).to_i, sh - 20)
522
+
519
523
  @window.title = "Multiple Views"
520
524
  @window.show_all
521
525
  @vpaned = Gtk::Paned.new(:vertical)
@@ -15,7 +15,8 @@ class VSourceView < GtkSource::View
15
15
  # end
16
16
 
17
17
 
18
- def initialize(title = nil,bufo=nil)
18
+ # def initialize(title = nil,bufo=nil)
19
+ def initialize(title,bufo)
19
20
  # super(:toplevel)
20
21
  @highlight_matching_brackets = true
21
22
  super()
@@ -68,7 +69,7 @@ class VSourceView < GtkSource::View
68
69
  end
69
70
 
70
71
  signal_connect "button-release-event" do |widget, event|
71
- $buffer.set_pos(buffer.cursor_position)
72
+ vma.buf.set_pos(buffer.cursor_position)
72
73
  false
73
74
  end
74
75
  @curpos_mark = nil
@@ -3,8 +3,8 @@ def hpt_check_cur_word(w)
3
3
  m = w.match(/⟦(.*)⟧/)
4
4
  if m
5
5
  fpfx = m[1]
6
- if $buffer.fname
7
- dn = File.dirname($buffer.fname)
6
+ if vma.buf.fname
7
+ dn = File.dirname(vma.buf.fname)
8
8
 
9
9
  fcands = []
10
10
  if fpfx[0] != "/"
@@ -15,7 +15,7 @@
15
15
  # 'C , r v b'=> 'revert_buffer',
16
16
  #
17
17
  # In insert mode: press and hold ctrl, press "a"
18
- # 'I ctrl-a'=> '$buffer.jump(BEGINNING_OF_LINE)',
18
+ # 'I ctrl-a'=> 'vma.buf.jump(BEGINNING_OF_LINE)',
19
19
  #
20
20
 
21
21
  $cnf = {} # TODO
@@ -485,17 +485,17 @@ class KeyBindingTree
485
485
  # like '20j' => go to next line 20 times.
486
486
  end
487
487
  rescue SyntaxError
488
- debug("SYNTAX ERROR with eval cmd #{action}: " + $!.to_s)
488
+ message("SYNTAX ERROR with eval cmd #{action}: " + $!.to_s)
489
489
  # rescue NoMethodError
490
490
  # debug("NoMethodError with eval cmd #{action}: " + $!.to_s)
491
491
  # rescue NameError
492
492
  # debug("NameError with eval cmd #{action}: " + $!.to_s)
493
493
  # raise
494
494
  rescue Exception => e
495
- debug "BACKTRACE"
496
- debug e.backtrace
497
- debug e.inspect
498
- debug "BACKTRACE END"
495
+ puts "BACKTRACE"
496
+ puts e.backtrace
497
+ puts e.inspect
498
+ puts "BACKTRACE END"
499
499
  if $!.class == SystemExit
500
500
  exit
501
501
  else
data/lib/vimamsa/main.rb CHANGED
@@ -37,15 +37,15 @@ $experimental = false
37
37
 
38
38
  # Return currently active buffer
39
39
  def buf()
40
- return $buffer
40
+ return vma.buf
41
41
  end
42
42
 
43
43
  def bufs()
44
- return $buffers
44
+ return vma.buffers
45
45
  end
46
46
 
47
47
  def buflist()
48
- return $buffers
48
+ return vma.buffers
49
49
  end
50
50
 
51
51
  require "vimamsa/editor.rb"
@@ -3,7 +3,7 @@ def execute_search(input_str)
3
3
  $search = Search.new
4
4
  eval_str="execute_search(#{input_str.dump})"
5
5
  $macro.overwrite_current_action(eval_str)
6
- return $search.set(input_str, "simple", $buffer)
6
+ return $search.set(input_str, "simple", vma.buf)
7
7
  end
8
8
 
9
9
  def invoke_search()
@@ -70,10 +70,10 @@ end
70
70
 
71
71
  def grep_cur_buffer(search_str, b = nil)
72
72
  debug "grep_cur_buffer(search_str)"
73
- lines = $buffer.split("\n")
73
+ lines = vma.buf.split("\n")
74
74
  r = Regexp.new(Regexp.escape(search_str), Regexp::IGNORECASE)
75
75
  fpath = ""
76
- fpath = $buffer.pathname.expand_path.to_s + ":" if $buffer.pathname
76
+ fpath = vma.buf.pathname.expand_path.to_s + ":" if vma.buf.pathname
77
77
  res_str = ""
78
78
 
79
79
  $grep_matches = []
@@ -84,7 +84,7 @@ def grep_cur_buffer(search_str, b = nil)
84
84
  $grep_matches << i + 1 # Lines start from index 1
85
85
  end
86
86
  }
87
- $grep_bufid = $buffers.current_buf
87
+ $grep_bufid = vma.buffers.current_buf
88
88
  b = create_new_file(nil, res_str)
89
89
  # set_current_buffer(buffer_i, update_history = true)
90
90
  # @current_buf = buffer_i
@@ -93,7 +93,7 @@ def grep_cur_buffer(search_str, b = nil)
93
93
  debug "GREP HANDLER:#{lineno}"
94
94
  jumpto = $grep_matches[lineno]
95
95
  if jumpto.class == Integer
96
- $buffers.set_current_buffer($grep_bufid, update_history = true)
96
+ vma.buffers.set_current_buffer($grep_bufid, update_history = true)
97
97
  buf.jump_to_line(jumpto)
98
98
  end
99
99
  }
@@ -136,21 +136,21 @@ def invoke_replace()
136
136
  end
137
137
 
138
138
  def buf_replace(search_str, replace_str)
139
- if $buffer.visual_mode?
140
- r = $buffer.get_visual_mode_range
141
- txt = $buffer[r]
139
+ if vma.buf.visual_mode?
140
+ r = vma.buf.get_visual_mode_range
141
+ txt = vma.buf[r]
142
142
  txt.gsub!(search_str, replace_str)
143
- $buffer.replace_range(r, txt)
144
- $buffer.end_visual_mode
143
+ vma.buf.replace_range(r, txt)
144
+ vma.buf.end_visual_mode
145
145
  else
146
- repbuf = $buffer.to_s.clone
146
+ repbuf = vma.buf.to_s.clone
147
147
  repbuf.gsub!(search_str, replace_str)
148
- tmppos = $buffer.pos
149
- if repbuf == $buffer.to_s.clone
148
+ tmppos = vma.buf.pos
149
+ if repbuf == vma.buf.to_s.clone
150
150
  message("NO CHANGE. Replacing #{search_str} with #{replace_str}.")
151
151
  else
152
- $buffer.set_content(repbuf)
153
- $buffer.set_pos(tmppos)
152
+ vma.buf.set_content(repbuf)
153
+ vma.buf.set_pos(tmppos)
154
154
  message("Replacing #{search_str} with #{replace_str}.")
155
155
  end
156
156
  end
@@ -3,7 +3,7 @@ class Converter
3
3
  @obj = obj
4
4
  @type = type
5
5
  if id != nil
6
- $vma.reg_conv(self, id)
6
+ vma.reg_conv(self, id)
7
7
  end
8
8
  end
9
9
 
@@ -1,3 +1,3 @@
1
1
  module Vimamsa
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
3
3
  end
data/vimamsa.gemspec CHANGED
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_runtime_dependency 'gdk3', '~> 3.4'
31
31
  spec.add_runtime_dependency 'gtk3', '~> 3.4'
32
32
  spec.add_runtime_dependency 'differ', '~> 0.1'
33
- spec.add_runtime_dependency 'gtksourceview3', '~> 3.4'
34
- # spec.add_runtime_dependency 'gtksourceview4'
33
+ # spec.add_runtime_dependency 'gtksourceview3', '~> 3.4'
34
+ spec.add_runtime_dependency 'gtksourceview4'
35
35
  spec.add_runtime_dependency 'parallel', '~> 1.14'
36
36
  spec.add_runtime_dependency 'listen', '~> 3.4'
37
37
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vimamsa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sami Sieranoja
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-15 00:00:00.000000000 Z
11
+ date: 2022-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -123,19 +123,19 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.1'
125
125
  - !ruby/object:Gem::Dependency
126
- name: gtksourceview3
126
+ name: gtksourceview4
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '3.4'
131
+ version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '3.4'
138
+ version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: parallel
141
141
  requirement: !ruby/object:Gem::Requirement