vimamsa 0.1.13 → 0.1.15

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/custom_example.rb +12 -0
  3. data/lib/vimamsa/ack.rb +3 -4
  4. data/lib/vimamsa/actions.rb +1 -2
  5. data/lib/vimamsa/audio.rb +25 -1
  6. data/lib/vimamsa/buffer.rb +116 -591
  7. data/lib/vimamsa/buffer_changetext.rb +272 -0
  8. data/lib/vimamsa/buffer_cursor.rb +303 -0
  9. data/lib/vimamsa/buffer_list.rb +137 -133
  10. data/lib/vimamsa/buffer_manager.rb +15 -15
  11. data/lib/vimamsa/clipboard.rb +36 -0
  12. data/lib/vimamsa/conf.rb +136 -5
  13. data/lib/vimamsa/constants.rb +0 -10
  14. data/lib/vimamsa/debug.rb +9 -8
  15. data/lib/vimamsa/editor.rb +57 -84
  16. data/lib/vimamsa/encrypt.rb +6 -11
  17. data/lib/vimamsa/file_history.rb +0 -8
  18. data/lib/vimamsa/file_manager.rb +142 -10
  19. data/lib/vimamsa/gui.rb +106 -85
  20. data/lib/vimamsa/gui_dialog.rb +113 -0
  21. data/lib/vimamsa/gui_menu.rb +5 -1
  22. data/lib/vimamsa/gui_sourceview.rb +46 -29
  23. data/lib/vimamsa/gui_sourceview_autocomplete.rb +141 -0
  24. data/lib/vimamsa/gui_text.rb +49 -0
  25. data/lib/vimamsa/hyper_plain_text.rb +19 -5
  26. data/lib/vimamsa/key_actions.rb +41 -202
  27. data/lib/vimamsa/key_binding_tree.rb +129 -41
  28. data/lib/vimamsa/key_bindings_vimlike.rb +58 -48
  29. data/lib/vimamsa/langservp.rb +23 -3
  30. data/lib/vimamsa/macro.rb +35 -25
  31. data/lib/vimamsa/main.rb +7 -10
  32. data/lib/vimamsa/rbvma.rb +13 -11
  33. data/lib/vimamsa/search.rb +1 -1
  34. data/lib/vimamsa/search_replace.rb +106 -160
  35. data/lib/vimamsa/terminal.rb +34 -0
  36. data/lib/vimamsa/tests.rb +122 -0
  37. data/lib/vimamsa/util.rb +43 -4
  38. data/lib/vimamsa/version.rb +1 -1
  39. data/vimamsa.gemspec +5 -2
  40. metadata +59 -9
  41. /data/lib/vimamsa/{form_generator.rb → gui_form_generator.rb} +0 -0
@@ -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 = vma.buffers.collect { |buf| buf.fname }.inspect
5
+ bufstr = vma.buffers.list.collect { |buf| buf.fname }.inspect
7
6
  f.write(bufstr)
8
7
  f.close()
9
8
  end
@@ -20,73 +19,93 @@ def load_buffer_list()
20
19
  end
21
20
  end
22
21
 
23
- class BufferList < Array
24
- attr_reader :current_buf, :last_dir, :buffer_history
22
+ class BufferList
23
+ attr_reader :current_buf, :last_dir, :last_file, :buffer_history
24
+ attr_accessor :list
25
25
 
26
26
  def initialize()
27
27
  @last_dir = File.expand_path(".")
28
28
  @buffer_history = []
29
29
  super
30
- @current_buf=0
30
+ @current_buf = 0
31
+ @list = []
32
+ @h = {}
33
+ reset_navigation
31
34
  end
32
35
 
33
36
  # lastdir = File.expand_path(".") if lastdir.nil?
34
37
  def <<(_buf)
35
- super
36
38
  vma.buf = _buf
37
- @current_buf = self.size - 1
38
- @buffer_history << @current_buf
39
- @recent_ind = 0
39
+ self.add(_buf)
40
+
40
41
  $hook.call(:change_buffer, vma.buf)
41
- vma.gui.set_current_buffer(vma.buf.id)
42
- gui_set_cursor_pos(vma.buf.id, vma.buf.pos)
42
+ vma.gui.set_current_buffer(vma.buf.id) #TODO: handle elswhere?
43
+ # vma.buf.view.set_cursor_pos(vma.buf.pos) #TODO: handle elswhere?
43
44
  update_last_dir(_buf)
44
45
  end
45
46
 
46
47
  def add(_buf)
47
- self.append(_buf)
48
- @buffer_history << self.size - 1
48
+ @buffer_history << _buf.id
49
+ # @navigation_idx = _buf.id #TODO:??
50
+ @list << _buf
51
+ @h[_buf.id] = _buf
49
52
  end
50
53
 
51
- def switch()
52
- debug "SWITCH BUF. bufsize:#{self.size}, curbuf: #{@current_buf}"
53
- @current_buf += 1
54
- @current_buf = 0 if @current_buf >= self.size
55
- m = method("switch")
56
- set_last_command({ method: m, params: [] })
57
- set_current_buffer(@current_buf)
54
+ #NOTE: unused. enable?
55
+ # def switch()
56
+ # debug "SWITCH BUF. bufsize:#{self.size}, curbuf: #{@current_buf}"
57
+ # @current_buf += 1
58
+ # @current_buf = 0 if @current_buf >= self.size
59
+ # m = method("switch")
60
+ # set_last_command({ method: m, params: [] })
61
+ # set_current_buffer(@current_buf)
62
+ # end
63
+
64
+ def slist
65
+ # TODO: implement using heap/priorityque
66
+ @list.sort_by! { |x| x.access_time }
58
67
  end
59
68
 
60
69
  def get_last_visited_id
61
- last_buf = @buffer_history[-2]
62
- return self[last_buf].id
70
+ last_buf = nil
71
+ for i in 0..(slist.size - 1)
72
+ next if slist[i].is_active?
73
+ last_buf = slist[i].id
74
+ end
75
+ return last_buf
63
76
  end
64
77
 
65
78
  def switch_to_last_buf()
66
79
  debug "SWITCH TO LAST BUF:"
67
- debug @buffer_history
68
- last_buf = @buffer_history[-2]
69
- if last_buf
70
- set_current_buffer(last_buf)
80
+ # debug @buffer_history
81
+ # last_buf = @buffer_history[-2]
82
+
83
+ last_buf = slist[-2]
84
+ if !last_buf.nil?
85
+ set_current_buffer(last_buf.id)
71
86
  end
72
87
  end
73
88
 
89
+ def size
90
+ return @list.size
91
+ end
92
+
74
93
  def get_buffer_by_filename(fname)
75
94
  #TODO: check using stat/inode? http://ruby-doc.org/core-1.9.3/File/Stat.html#method-i-ino
76
- buf_idx = self.index { |b| b.fname == fname }
77
- return buf_idx
95
+ b = @list.find { |b| b.fname == fname }
96
+ return b.id unless b.nil?
97
+ return nil
78
98
  end
79
99
 
80
100
  def get_buffer_by_id(id)
81
- buf_idx = self.index { |b| b.id == id }
82
- return buf_idx
101
+ return @h[id]
83
102
  end
84
103
 
85
104
  def add_buf_to_history(buf_idx)
86
- if self.include?(buf_idx)
105
+ if @list.include?(buf_idx)
87
106
  @buffer_history << @buf_idx
88
- @recent_ind = 0
89
- compact_buf_history()
107
+ @navigation_idx = 0
108
+ # compact_buf_history()
90
109
  else
91
110
  debug "buffer_list, no such id:#{buf_idx}"
92
111
  return
@@ -94,40 +113,40 @@ class BufferList < Array
94
113
  end
95
114
 
96
115
  def add_current_buf_to_history()
97
- @recent_ind = 0
98
- @buffer_history << @current_buf
99
- compact_buf_history()
116
+ @h[@current_buf].update_access_time
100
117
  end
101
118
 
102
- def set_current_buffer_by_id(buf_id, update_history = true)
103
- idx = get_buffer_by_id(buf_id)
104
- if idx.nil?
105
- debug "IDX=nil"
106
- return
107
- end
119
+ def set_current_buffer_by_id(idx, update_history = true)
108
120
  set_current_buffer(idx, update_history)
109
121
  end
110
122
 
111
- def set_current_buffer(buffer_i, update_history = true)
112
- buffer_i = self.size -1 if buffer_i > self.size
113
- buffer_i = 0 if buffer_i < 0
114
- vma.buf = self[buffer_i]
115
- return if !vma.buf
116
- @current_buf = buffer_i
117
- debug "SWITCH BUF2. bufsize:#{self.size}, curbuf: #{@current_buf}"
118
- fpath = vma.buf.fname
119
- if fpath and fpath.size > 50
120
- fpath = fpath[-50..-1]
121
- end
123
+ def set_current_buffer(idx, update_history = true)
124
+ # Set update_history = false if we are only browsing
122
125
 
123
- if update_history
124
- add_current_buf_to_history
126
+ if !vma.buf.nil? and vma.kbd.get_scope != :editor
127
+ # Save keyboard mode status of old buffer when switching buffer
128
+ vma.buf.mode_stack = vma.kbd.default_mode_stack.clone
125
129
  end
130
+ return if !@h[idx]
131
+ vma.buf = bu = @h[idx]
132
+ update_last_dir(vma.buf)
133
+ @current_buf = idx
134
+ debug "SWITCH BUF. bufsize:#{@list.size}, curbuf: #{@current_buf}"
126
135
 
127
136
  vma.hook.call(:change_buffer, vma.buf)
128
- vma.buf.set_active
129
137
 
130
- vma.gui.set_current_buffer(vma.buf.id)
138
+ bu.set_active # TODO
139
+ bu.update_access_time if update_history
140
+ vma.gui.set_current_buffer(idx)
141
+
142
+ #TODO: delete?
143
+ # if !vma.buf.mode_stack.nil? and vma.kbd.get_scope != :editor #TODO
144
+ # debug "set kbd mode stack #{vma.buf.mode_stack} #{vma.buf.id}", 2
145
+ # Reload previously saved keyboard mode status
146
+ # vma.kbd.set_mode_stack(vma.buf.mode_stack.clone) #TODO:needed?
147
+ # vma.kbd.set_mode_stack([vma.buf.default_mode])
148
+ # end
149
+ # vma.kbd.set_mode_to_default if vma.kbd.get_scope != :editor
131
150
 
132
151
  gui_set_window_title(vma.buf.title, vma.buf.subtitle)
133
152
 
@@ -135,12 +154,17 @@ class BufferList < Array
135
154
  @last_dir = File.dirname(vma.buf.fname)
136
155
  end
137
156
 
138
- # hpt_scan_images() if $debug # experimental
157
+ # hpt_scan_images() if cnf.debug? # experimental
158
+ end
159
+
160
+ def to_s
161
+ return self.class.to_s
139
162
  end
140
163
 
141
164
  def update_last_dir(buf)
142
165
  if buf.fname
143
166
  @last_dir = File.dirname(buf.fname)
167
+ @last_file = buf.fname
144
168
  end
145
169
  end
146
170
 
@@ -152,100 +176,80 @@ class BufferList < Array
152
176
  return @last_dir
153
177
  end
154
178
 
155
- def get_recent_buffers()
156
- bufs = []; b = {}
157
- @buffer_history.reverse.each { |x| bufs << x if !b[x] && x < self.size; b[x] = true }
158
- return bufs
179
+ def reset_navigation
180
+ @navigation_idx = 0
159
181
  end
160
182
 
161
- def history_switch_backwards()
162
- recent = get_recent_buffers()
163
- @recent_ind += 1
164
- @recent_ind = 0 if @recent_ind >= recent.size
165
- bufid = recent[@recent_ind]
166
- debug "IND:#{@recent_ind} RECENT:#{recent.join(" ")}"
167
- set_current_buffer(bufid, false)
183
+ def history_switch_backwards
184
+ @navigation_idx += 1
185
+ @navigation_idx = 0 if @navigation_idx >= list.size
186
+ b = slist[-1 - @navigation_idx]
187
+ debug "IND:#{@navigation_idx} RECENT:#{slist.collect { |x| x.fname }.join(" ")}"
188
+ set_current_buffer(b.id, false)
168
189
  end
169
190
 
170
191
  def history_switch_forwards()
171
- recent = get_recent_buffers()
172
- @recent_ind -= 1
173
- @recent_ind = self.size - 1 if @recent_ind < 0
174
- bufid = recent[@recent_ind]
175
- debug "IND:#{@recent_ind} RECENT:#{recent.join(" ")}"
176
- set_current_buffer(bufid, false)
192
+ @navigation_idx -= 1
193
+ @navigation_idx = list.size - 1 if @navigation_idx < 0
194
+
195
+ b = slist[-1 - @navigation_idx]
196
+ debug "IND:#{@navigation_idx} RECENT:#{slist.collect { |x| x.fname }.join(" ")}"
197
+ set_current_buffer(b.id, false)
177
198
  end
178
199
 
179
- def compact_buf_history()
180
- h = {}
181
- # Keep only first occurence in history
182
- bh = @buffer_history.reverse.select { |x| r = h[x] == nil; h[x] = true; r }
183
- @buffer_history = bh.reverse
200
+ def get_last_non_active_buffer
201
+ for bu in slist.reverse
202
+ return bu.id if !bu.is_active
203
+ end
204
+ return nil
184
205
  end
185
206
 
186
- # Close buffer in the background
187
- # TODO: if open in another widget
188
- def close_other_buffer(buffer_i)
189
- return if self.size <= buffer_i
190
- return if @current_buf == buffer_i
207
+ def close_buffer(idx, from_recent = false, auto_open: true)
208
+ return if idx.nil?
209
+ bu = @h[idx]
210
+ return if bu.nil?
191
211
 
192
- bufname = self[buffer_i].basename
212
+ bufname = bu.basename
193
213
  message("Closed buffer #{bufname}")
194
214
 
195
- self.slice!(buffer_i)
196
- @buffer_history = @buffer_history.collect { |x| r = x; r = x - 1 if x > buffer_i; r = nil if x == buffer_i; r }.compact
197
- end
215
+ @list.delete(@h[idx])
216
+ @h.delete(idx)
198
217
 
199
- def close_buffer(buffer_i, from_recent = false)
200
- return if buffer_i.nil?
201
- return if self.size <= buffer_i
202
-
203
- bufname = self[buffer_i].basename
204
- message("Closed buffer #{bufname}")
205
- recent = get_recent_buffers
206
- jump_to_buf = recent[@recent_ind + 1]
207
- jump_to_buf = 0 if jump_to_buf == nil
208
-
209
- self.slice!(buffer_i)
210
- @buffer_history = @buffer_history.collect { |x| r = x; r = x - 1 if x > buffer_i; r = nil if x == buffer_i; r }.compact
211
-
212
- if @current_buf == buffer_i
213
- if from_recent
214
- @current_buf = jump_to_buf
215
- else
216
- # Find last edited buffer that is not already open
217
- @current_buf = @buffer_history.filter{|x| !vma.gui.is_buffer_open(self[x].id)}.last
218
+ if auto_open
219
+ @current_buf = get_last_non_active_buffer
220
+ if @list.size == 0 or @current_buf.nil?
221
+ bu = Buffer.new("\n")
222
+ add(bu)
223
+ @current_buf = bu.id
218
224
  end
225
+ set_current_buffer(@current_buf, false)
219
226
  end
220
- if self.size == 0 or @current_buf.nil?
221
- self << Buffer.new("\n")
222
- @current_buf = 0
223
- else
224
- @current_buf = 0 if @current_buf >= self.size
225
- end
226
- set_current_buffer(@current_buf, false)
227
227
  end
228
228
 
229
- def close_all_buffers()
230
- message("Closing all buffers")
231
- while true
232
- if self.size == 1
233
- close_buffer(0)
234
- break
235
- else
236
- close_buffer(0)
237
- end
238
- end
239
- # self << Buffer.new("\n")
229
+ # Close buffer in the background
230
+ def close_other_buffer(idx)
231
+ close_buffer(idx, auto_open: false)
240
232
  end
241
233
 
234
+ #TODO
235
+ # def close_all_buffers()
236
+ # message("Closing all buffers")
237
+ # while @list.size > 0
238
+ # if self.size == 1
239
+ # close_buffer(0)
240
+ # break
241
+ # else
242
+ # close_buffer(0)
243
+ # end
244
+ # end
245
+ # # self << Buffer.new("\n")
246
+ # end
247
+
242
248
  def close_scrap_buffers()
243
- i = 0
244
- while i < self.size
245
- if !self[i].pathname
246
- close_buffer(i)
247
- else
248
- i += 1
249
+ l = @list.clone
250
+ for bu in l
251
+ if !bu.pathname
252
+ close_buffer(bu.id)
249
253
  end
250
254
  end
251
255
  end
@@ -256,7 +260,7 @@ class BufferList < Array
256
260
 
257
261
  def delete_current_buffer(from_recent = false)
258
262
  fn = buf.fname
259
- close_buffer(@current_buf, from_recent)
263
+ close_buffer(@current_buf)
260
264
  #TODO: confirm with user, "Do you want to delete file X"
261
265
  if is_existing_file(fn)
262
266
  message("Deleting file: #{fn}")
@@ -7,11 +7,12 @@ class BufferManager
7
7
  end
8
8
 
9
9
  def self.init()
10
- vma.kbd.add_minor_mode("bmgr", :buf_mgr, :command)
10
+ # vma.kbd.add_minor_mode("bmgr", :buf_mgr, :command)
11
+ vma.kbd.add_minor_mode("bmgr", :bmgr, :command)
11
12
  reg_act(:bmgr_select, proc { buf.module.select_line }, "")
12
13
  reg_act(:bmgr_close, proc { buf.module.close_selected }, "")
13
14
 
14
- reg_act(:start_buf_manager, proc { BufferManager.new.run; vma.kbd.set_mode(:buf_mgr) }, "Buffer manager")
15
+ reg_act(:start_buf_manager, proc { BufferManager.new.run; vma.kbd.set_mode(:bmgr) }, "Buffer manager")
15
16
 
16
17
  bindkey "bmgr enter", :bmgr_select
17
18
  bindkey "bmgr c", :bmgr_close
@@ -27,28 +28,26 @@ class BufferManager
27
28
  l = @buf.lpos - @header.size
28
29
  return nil if l < 0
29
30
  bufid = @line_to_id[l]
30
- buf_i = vma.buffers.get_buffer_by_id(bufid)
31
- return buf_i
31
+ return bufid
32
32
  end
33
33
 
34
34
  def close_selected
35
- buf_i = buf_of_current_line()
36
- if buf_i.nil?
35
+ idx = buf_of_current_line()
36
+ r = @buf.current_line_range
37
+ Gui.hilight_range(@buf,r, color:"#666666ff")
38
+ if idx.nil?
37
39
  message("buf already closed")
38
40
  return
39
41
  end
40
- vma.buffers.close_other_buffer(buf_i)
42
+ vma.buffers.close_other_buffer(idx)
41
43
  end
42
44
 
43
45
  def select_line
44
- buf_i = buf_of_current_line()
45
- return if buf_i.nil?
46
+ idx = buf_of_current_line()
47
+ return if idx.nil?
46
48
 
47
- # vma.buffers.close_current_buffer() #TODO:??
48
- vma.buffers.set_current_buffer(buf_i)
49
-
50
- bid = vma.buffers.get_buffer_by_id(@buf.id)
51
- vma.buffers.close_other_buffer(bid)
49
+ vma.buffers.set_current_buffer(idx)
50
+ vma.buffers.close_other_buffer(@buf.id)
52
51
  @@cur = nil
53
52
  end
54
53
 
@@ -69,7 +68,7 @@ class BufferManager
69
68
  s << "\n"
70
69
  i = 0
71
70
  jump_to_line = 0
72
- for b in vma.buffers.sort_by { |x| x.list_str }
71
+ for b in vma.buffers.list.sort_by { |x| x.list_str }
73
72
  if b.id == vma.buf.id # current file
74
73
  # s << " "
75
74
  jump_to_line = i
@@ -84,6 +83,7 @@ class BufferManager
84
83
 
85
84
  if @buf.nil?
86
85
  @buf = create_new_buffer(s,"bufmgr")
86
+ @buf.default_mode = :buf_mgr
87
87
  @buf.module = self
88
88
  @buf.active_kbd_mode = :buf_mgr
89
89
  else
@@ -0,0 +1,36 @@
1
+ class Clipboard
2
+ def initialize
3
+ @clipboard = []
4
+ end
5
+
6
+ def [](key)
7
+ return @clipboard[key]
8
+ end
9
+
10
+ def <<(str)
11
+ return @clipboard << str
12
+ end
13
+
14
+ def set(s)
15
+ if !(s.class <= String) or s.size == 0
16
+ debug s.inspect
17
+ debug [s, s.class, s.size]
18
+ log_error("s.class != String or s.size == 0")
19
+ return
20
+ end
21
+ @clipboard << s
22
+ set_system_clipboard(s)
23
+ vma.register[vma.cur_register] = s
24
+ debug "SET CLIPBOARD: [#{s}]"
25
+ debug "REGISTER: #{vma.cur_register}:#{vma.register[vma.cur_register]}"
26
+ end
27
+
28
+ def get()
29
+ return @clipboard[-1]
30
+ end
31
+ end
32
+
33
+ def set_system_clipboard(arg)
34
+ debug arg,2
35
+ vma.gui.window.display.clipboard.set(arg)
36
+ end
data/lib/vimamsa/conf.rb CHANGED
@@ -13,18 +13,149 @@ def setcnf(id, val)
13
13
  end
14
14
 
15
15
  setcnf :custom_lsp, {}
16
- conf(:custom_lsp)[:ruby] = {name: "solargraph", command:"solargraph stdio", type: "stdio"}
17
- conf(:custom_lsp)[:cpp] = {name: "clangd", command:"clangd-12 --offset-encoding=utf-8", type: "stdio"}
18
- conf(:custom_lsp)[:python] = {name: "pyright", command:"pyright-langserver --stdio --verbose", type: "stdio"}
19
16
 
20
17
  setcnf :indent_based_on_last_line, true
21
18
  setcnf :extensions_to_open, [".txt", ".h", ".c", ".cpp", ".hpp", ".rb", ".inc", ".php", ".sh", ".m", ".gd", ".js", ".py"]
22
19
  setcnf :default_search_extensions, ["txt", "rb"]
23
20
 
24
-
25
21
  setcnf "log.verbose", 1
26
- setcnf :tab_width, 4
27
22
  setcnf :enable_lsp, false
28
23
 
24
+ setcnf :tab_width, 2
25
+ setcnf :tab_to_spaces_default, false
26
+ setcnf :tab_to_spaces_languages, ["c", "java", "ruby", "hyperplaintext", "php"]
27
+ setcnf :tab_to_spaces_not_languages, ["makefile"]
28
+
29
29
  setcnf :workspace_folders, []
30
30
 
31
+
32
+ # New way to configure:
33
+ # To set conf value:
34
+ # cnf.foo.bar.baz = 3
35
+
36
+ #To get conf value:
37
+ # cnf.foo.bar.baz?
38
+ # cnf.foo.bar.baz!
39
+ # get(cnf.foo.bar.baz)
40
+ # (All get the same result)
41
+
42
+ class ConfId
43
+ def initialize(first)
44
+ @id = [first]
45
+ end
46
+
47
+ def method_missing(method_name, *args)
48
+ # pp "asize:#{args.size}"
49
+ if m = method_name.match(/(.*)=$/)
50
+ @id << m[1].to_sym
51
+ # pp [@id, args[0]]
52
+ set(self, args[0])
53
+ return args[0]
54
+ elsif m = method_name.match(/(.*)[\!\?]$/)
55
+ @id << m[1].to_sym
56
+ r = get(self)
57
+
58
+ if r.class == Hash and r.empty?
59
+ # The accessed key was not defined
60
+ return nil
61
+ else
62
+ return r
63
+ end
64
+ else
65
+ @id << method_name
66
+ end
67
+
68
+ return self
69
+ end
70
+
71
+ def to_s
72
+ @id.join(".")
73
+ end
74
+
75
+ def to_a
76
+ return @id
77
+ end
78
+ end
79
+
80
+ class Conf
81
+ attr_reader :confh
82
+
83
+ def initialize()
84
+ @id = []
85
+ @confh = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
86
+ end
87
+
88
+ def method_missing(method_name, *args)
89
+ c = ConfId.new(method_name)
90
+
91
+ #TODO: improve
92
+ if m = method_name.match(/(.*)[\!\?]$/)
93
+ c = ConfId.new(m[1])
94
+ return get(c)
95
+ end
96
+
97
+ if m = method_name.match(/(.*)=$/)
98
+ c = ConfId.new(m[1])
99
+ set(c, args[0])
100
+ return args[0]
101
+ end
102
+
103
+ return c
104
+ end
105
+ end
106
+
107
+
108
+
109
+ $confh = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
110
+ # set cnf.foo.bar.baz, 3
111
+ # => $confh = {:foo=>{:bar=>{:baz=>3}}}
112
+ def set(_id, val)
113
+ a = $confh
114
+ id = _id.to_a
115
+ last = id.pop
116
+ for x in id
117
+ a = a[x]
118
+ end
119
+ a[last] = val
120
+ end
121
+
122
+ def get(id)
123
+ id = id.to_a
124
+ a = $confh
125
+ for x in id
126
+ return nil if a[x].nil?
127
+ return nil if a.empty?
128
+ a = a[x]
129
+ end
130
+ return a
131
+ end
132
+
133
+ $vimamsa_conf = Conf.new
134
+
135
+ def cnf()
136
+ return $vimamsa_conf
137
+ end
138
+
139
+ cnf.indent_based_on_last_line = true
140
+ cnf.extensions_to_open = [".txt", ".h", ".c", ".cpp", ".hpp", ".rb", ".inc", ".php", ".sh", ".m", ".gd", ".js", ".py"]
141
+ cnf.default_search_extensions = ["txt", "rb"]
142
+
143
+ cnf.log.verbose = 1
144
+ cnf.lsp.enabled = false
145
+ cnf.fexp.experimental = false
146
+ cnf.experimental = false
147
+
148
+ cnf.tab.width = 2
149
+ cnf.tab.to_spaces_default = false
150
+ cnf.tab.to_spaces_languages = ["c", "java", "ruby", "hyperplaintext", "php"]
151
+ cnf.tab.to_spaces_not_languages = ["makefile"]
152
+ cnf.workspace_folders = []
153
+
154
+ cnf.match.highlight.color = "#10bd8e"
155
+
156
+ cnf.lsp.enabled = false
157
+
158
+ cnf.font.size = 11
159
+ cnf.font.family = "Monospace"
160
+
161
+
@@ -15,8 +15,6 @@ CURRENT_CHAR_FORWARD = 2005
15
15
  CURRENT_CHAR_BACKWARD = 2006
16
16
  START_OF_BUFFER = 2007
17
17
  END_OF_BUFFER = 2008
18
- BACKWARD = 2009
19
- FORWARD = 2010
20
18
  END_OF_LINE = 2011
21
19
  BEGINNING_OF_LINE = 2012
22
20
  WORD_START = 2013
@@ -30,14 +28,6 @@ REPLACE = 3002
30
28
  KEY_PRESS = 6
31
29
  KEY_RELEASE = 7 # QEvent::KeyRelease
32
30
 
33
- # http://qt-project.org/doc/qt-5.0/qtcore/qt.html#KeyboardModifier-enum
34
- ALTMODIFIER = 0x08000000
35
- NOMODIFIER = 0x00000000 # No modifier key is pressed.
36
- SHIFTMODIFIER = 0x02000000 # A Shift key on the keyboard is pressed.
37
- CONTROLMODIFIER = 0x04000000 # A Ctrl key on the keyboard is pressed.
38
- ALTMODIFIER = 0x08000000 # An Alt key on the keyboard is pressed.
39
- METAMODIFIER = 0x10000000 # A Meta key on the keyboard is pressed.
40
- KEYPADMODIFIER = 0x20000000 # A keypad button is pressed.
41
31
 
42
32
 
43
33