vimamsa 0.1.7 → 0.1.8

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: 7a71f8392835d7a5a3245366764eb79f6058ea3ded74cc1a308f021f950881ba
4
- data.tar.gz: 590ea0409a43aabafe349cfcff0cb91712e2a269e334b3663b64f6b895ae666f
3
+ metadata.gz: 6000318b31060bff83029148c2cf47cc6ff8c5939d2fc1d54951a54e8b49a538
4
+ data.tar.gz: 500cd81fe9bd605276a0802f182980c5a93d77ab5d2221548586673e85a85832
5
5
  SHA512:
6
- metadata.gz: 1bf328f8cbe0b69e85a9720790c8f4616e1996466ad65f6473cf1cff1173d78b9cec197145c653a5d33804571d383246492e593445da390cbe567fc6ccfbb24a
7
- data.tar.gz: 799f836afc3c0e304cac07f44e1b5c96affa3f6b5775b4d654b43a81168f2ab14cb4ee1218a3345ae3189203520885fd6cc1de7ce48205e78386b060c700f8ca
6
+ metadata.gz: 8b687b1b72df46bd9bc35622b239e9525e2dc15884f1066557e82c474e99c280577a32a3a7f60a776f5b6be0866dc86c79e2b364780413821a491160ad73875f
7
+ data.tar.gz: d5e8da0e6263f74f27ee84781efdea5126411a68ace27d244da6c5b9203924196d10bbe91541319af91539089c6391dfadfde3f76cbac6f475b2002c1fbaa16c
@@ -28,7 +28,7 @@ def reg_act(id, callfunc, name = "", opt = {})
28
28
  end
29
29
 
30
30
  def missing_callfunc
31
- puts "missing_callfunc"
31
+ debug "missing_callfunc"
32
32
  end
33
33
 
34
34
  #TODO: remove
@@ -74,10 +74,10 @@ def search_actions_update_callback(search_str = "")
74
74
  item_list = item_list2
75
75
 
76
76
  a = filter_items(item_list, 0, search_str)
77
- puts a.inspect
77
+ debug a.inspect
78
78
 
79
79
  r = a.collect { |x| [x[0][0], 0, x] }
80
- puts r.inspect
80
+ debug r.inspect
81
81
  $item_list = r
82
82
 
83
83
  r = a.collect { |x| ["[#{x[0][:key]}] #{x[0][:str]}", 0, x] }
@@ -88,13 +88,13 @@ def search_actions_select_callback(search_str, idx)
88
88
  item = $item_list[idx][2]
89
89
  acc = item[0][:action]
90
90
 
91
- puts "Selected:" + acc.to_s
91
+ debug "Selected:" + acc.to_s
92
92
  gui_select_window_close(0)
93
93
 
94
94
  if acc.class == String
95
95
  eval(acc)
96
96
  elsif acc.class == Symbol
97
- puts "Symbol"
97
+ debug "Symbol"
98
98
  call(acc)
99
99
  end
100
100
  end
@@ -106,7 +106,7 @@ def filter_items(item_list, item_key, search_str)
106
106
  [item, srn_dst(search_str, item[:str])]
107
107
  end
108
108
  scores.sort_by! { |x| -x[1] }
109
- puts scores.inspect
109
+ debug scores.inspect
110
110
  scores = scores[0..30]
111
111
 
112
112
  return scores
@@ -28,7 +28,7 @@ class Buffer < String
28
28
  @id = @@num_buffers
29
29
  @@num_buffers += 1
30
30
  gui_create_buffer(@id)
31
- puts "NEW BUFFER fn=#{fname} ID:#{@id}"
31
+ debug "NEW BUFFER fn=#{fname} ID:#{@id}"
32
32
 
33
33
  @module = nil
34
34
 
@@ -71,6 +71,15 @@ class Buffer < String
71
71
  @active_kbd_mode = nil
72
72
  end
73
73
 
74
+ def list_str()
75
+ if @fname.nil?
76
+ x = @title
77
+ else
78
+ x = @fname
79
+ end
80
+ return x
81
+ end
82
+
74
83
  def set_active
75
84
  if !@active_kbd_mode.nil?
76
85
  $kbd.set_mode(@active_kbd_mode)
@@ -104,7 +113,7 @@ class Buffer < String
104
113
  # lang.get_metadata("block-comment-end")
105
114
  @lang_nfo = lang
106
115
  if !lang.nil? and !lang.id.nil?
107
- puts "Guessed LANG: #{lang.id}"
116
+ debug "Guessed LANG: #{lang.id}"
108
117
  @lang = lang.id
109
118
  end
110
119
 
@@ -113,10 +122,32 @@ class Buffer < String
113
122
  end
114
123
  end
115
124
 
125
+ def view()
126
+ # Get the VSourceView < GtkSource::View object corresponding to this buffer
127
+ return vma.gui.buffers[@id]
128
+ end
129
+
116
130
  def add_image(imgpath, pos)
117
131
  return if !is_legal_pos(pos)
118
- # insert_txt_at(" ", pos)
119
- gui_add_image(imgpath, pos)
132
+
133
+ pixbuf = GdkPixbuf::Pixbuf.new(:file => imgpath)
134
+
135
+ # puts GdkPixbuf::InterpType.constants
136
+ # GdkPixbuf::InterpType::HYPER
137
+ # https://docs.gtk.org/gdk-pixbuf/enum.InterpType.html#bilinear
138
+ # https://docs.gtk.org/gdk-pixbuf/method.Pixbuf.scale_simple.html
139
+ imglimit = view.visible_rect.width - 5
140
+ if pixbuf.width > imglimit
141
+ nwidth = imglimit
142
+ nheight = (pixbuf.height * (imglimit.to_f / pixbuf.width)).to_i
143
+ pixbuf = pixbuf.scale_simple(nwidth, nheight, GdkPixbuf::InterpType::HYPER)
144
+ end
145
+
146
+ vbuf = view.buffer
147
+ itr = vbuf.get_iter_at(:offset => pos)
148
+ itr2 = vbuf.get_iter_at(:offset => pos + 1)
149
+ vbuf.delete(itr, itr2)
150
+ vbuf.insert(itr, pixbuf)
120
151
  end
121
152
 
122
153
  def is_legal_pos(pos, op = :read)
@@ -197,20 +228,20 @@ class Buffer < String
197
228
  ok = true
198
229
  @bt.each_line { |r|
199
230
  if lines[i] != r #or true
200
- puts "NO MATCH FOR LINE:"
201
- puts "i=#{i}["
202
- # puts "[orig]pos=#{leaf.pos} |#{leaf.data}|"
203
- # puts "spos=#{spos} nchar=#{leaf.nchar} epos=#{epos} a[]=\nr=|#{r}|"
204
- puts "fromtree:|#{r}|"
205
- puts "frombuf:|#{lines[i]}"
206
- puts "]"
231
+ debug "NO MATCH FOR LINE:"
232
+ debug "i=#{i}["
233
+ # debug "[orig]pos=#{leaf.pos} |#{leaf.data}|"
234
+ # debug "spos=#{spos} nchar=#{leaf.nchar} epos=#{epos} a[]=\nr=|#{r}|"
235
+ debug "fromtree:|#{r}|"
236
+ debug "frombuf:|#{lines[i]}"
237
+ debug "]"
207
238
  ok = false
208
239
  end
209
240
  i += 1
210
241
  }
211
242
 
212
- puts "BT: NO ERRORS" if ok
213
- puts "BT: ERRORS" if !ok
243
+ debug "BT: NO ERRORS" if ok
244
+ debug "BT: ERRORS" if !ok
214
245
  end
215
246
 
216
247
  def set_content(str)
@@ -429,11 +460,11 @@ class Buffer < String
429
460
  end
430
461
 
431
462
  def update_index(pos, changeamount)
432
- # puts "pos #{pos}, changeamount #{changeamount}, @pos #{@pos}"
463
+ # debug "pos #{pos}, changeamount #{changeamount}, @pos #{@pos}"
433
464
  @edit_pos_history.collect! { |x| r = x if x <= pos; r = x + changeamount if x > pos; r }
434
465
  # TODO: handle between removal case
435
466
  for k in @marks.keys
436
- # puts "change(?): pos=#{pos}, k=#{k}, #{@marks[k]}, #{changeamount}"
467
+ # debug "change(?): pos=#{pos}, k=#{k}, #{@marks[k]}, #{changeamount}"
437
468
  if @marks[k] > pos
438
469
  @marks[k] = @marks[k] + changeamount
439
470
  end
@@ -574,7 +605,7 @@ class Buffer < String
574
605
  ls = nil
575
606
  ls = @line_ends[a] if a != nil
576
607
  # if a != nil and ls != @line_ends[a]
577
- # puts "NO MATCH @line_ends[a]"
608
+ # debug "NO MATCH @line_ends[a]"
578
609
  # end
579
610
 
580
611
  if ls == nil
@@ -679,7 +710,7 @@ class Buffer < String
679
710
  end
680
711
 
681
712
  debug "Scan line_end time: #{Time.now - t1}"
682
- #puts @line_ends
713
+ #debug @line_ends
683
714
  end
684
715
 
685
716
  def sanity_check_line_ends()
@@ -696,7 +727,7 @@ class Buffer < String
696
727
  end
697
728
 
698
729
  def update_bufpos_on_change(positions, xpos, changeamount)
699
- # puts "xpos=#{xpos} changeamount=#{changeamount}"
730
+ # debug "xpos=#{xpos} changeamount=#{changeamount}"
700
731
  positions.collect { |x|
701
732
  r = nil
702
733
  r = x if x < xpos
@@ -731,7 +762,7 @@ class Buffer < String
731
762
  i_nl = scan_indexes(changestr, /\n/)
732
763
  i_nl.collect! { |x| x + pos }
733
764
  end
734
- # puts "change:#{changeamount}"
765
+ # debug "change:#{changeamount}"
735
766
  #TODO: this is the bottle neck in insert_txt action
736
767
  @line_ends.collect! { |x|
737
768
  r = nil
@@ -879,10 +910,10 @@ class Buffer < String
879
910
  range = @pos..wmarks[0]
880
911
  end
881
912
  elsif range_id == :to_line_end
882
- puts "TO LINE END"
913
+ debug "TO LINE END"
883
914
  range = @pos..(@line_ends[@lpos] - 1)
884
915
  elsif range_id == :to_line_start
885
- puts "TO LINE START: #{@lpos}"
916
+ debug "TO LINE START: #{@lpos}"
886
917
 
887
918
  if @cpos == 0
888
919
  range = nil
@@ -918,15 +949,15 @@ class Buffer < String
918
949
  end
919
950
 
920
951
  def move(direction)
921
- puts "cpos:#{@cpos} lpos:#{@lpos} @larger_cpos:#{@larger_cpos}"
952
+ debug "cpos:#{@cpos} lpos:#{@lpos} @larger_cpos:#{@larger_cpos}"
922
953
  if direction == :forward_page
923
- puts "FORWARD PAGE"
954
+ debug "FORWARD PAGE"
924
955
  visible_range = get_visible_area()
925
956
  set_pos(visible_range[1])
926
957
  top_where_cursor()
927
958
  end
928
959
  if direction == :backward_page
929
- puts "backward PAGE"
960
+ debug "backward PAGE"
930
961
  visible_range = get_visible_area()
931
962
  set_pos(visible_range[0])
932
963
  bottom_where_cursor()
@@ -1029,7 +1060,7 @@ class Buffer < String
1029
1060
  if wtype == :url
1030
1061
  open_url(word)
1031
1062
  elsif wtype == :linepointer
1032
- puts word.inspect
1063
+ debug word.inspect
1033
1064
  jump_to_file(word[0], word[1])
1034
1065
  elsif wtype == :textfile
1035
1066
  open_existing_file(word)
@@ -1096,10 +1127,10 @@ class Buffer < String
1096
1127
  word_start = pos if word_start == nil
1097
1128
  word_end = pos if word_end == nil
1098
1129
  word = self[word_start..word_end]
1099
- puts "'WORD: #{word}'"
1130
+ debug "'WORD: #{word}'"
1100
1131
  message("'#{word}'")
1101
1132
  linep = get_file_line_pointer(word)
1102
- puts "linep'#{linep}'"
1133
+ debug "linep'#{linep}'"
1103
1134
  path = File.expand_path(word)
1104
1135
  wtype = nil
1105
1136
  if is_url(word)
@@ -1112,7 +1143,7 @@ class Buffer < String
1112
1143
  wtype = :file
1113
1144
  end
1114
1145
  # elsif hpt_check_cur_word(word) #TODO: check only
1115
- # puts word
1146
+ # debug word
1116
1147
  elsif linep != nil
1117
1148
  wtype = :linepointer
1118
1149
  word = linep
@@ -1140,14 +1171,14 @@ class Buffer < String
1140
1171
  word_start = pos if word_start == nil
1141
1172
  word_end = pos if word_end == nil
1142
1173
  word = self[word_start..word_end]
1143
- puts "'#{word}'"
1174
+ debug "'#{word}'"
1144
1175
  message("'#{word}'")
1145
- #puts wm
1176
+ #debug wm
1146
1177
  end
1147
1178
 
1148
1179
  def jump_to_next_instance_of_word()
1149
1180
  if $kbd.last_action == $kbd.cur_action and @current_word != nil
1150
- # puts "REPEATING *"
1181
+ # debug "REPEATING *"
1151
1182
  else
1152
1183
  start_search = [@pos - 150, 0].max
1153
1184
 
@@ -1246,10 +1277,10 @@ class Buffer < String
1246
1277
 
1247
1278
  if target == FIRST_NON_WHITESPACE
1248
1279
  l = current_line()
1249
- puts l.inspect
1280
+ debug l.inspect
1250
1281
  @cpos = line(@lpos).size - 1
1251
1282
  a = scan_indexes(l, /\S/)
1252
- puts a.inspect
1283
+ debug a.inspect
1253
1284
  if a.any?
1254
1285
  @cpos = a[0]
1255
1286
  else
@@ -1358,14 +1389,13 @@ class Buffer < String
1358
1389
  if m
1359
1390
  c = c + " " * m[1].size if m
1360
1391
  end
1361
-
1362
1392
 
1363
1393
  #if tab indent
1364
1394
  m = /^(\t+)([^\t]+|$)/.match(last_line)
1365
1395
  if m
1366
1396
  c = c + "\t" * m[1].size if m
1367
1397
  end
1368
-
1398
+
1369
1399
  # debug m.inspect
1370
1400
  end
1371
1401
  if mode == BEFORE
@@ -1379,8 +1409,8 @@ class Buffer < String
1379
1409
 
1380
1410
  #self.insert(insert_pos,c)
1381
1411
  add_delta([insert_pos, INSERT, c.size, c], true)
1382
- #puts("encoding: #{c.encoding}")
1383
- #puts "c.size: #{c.size}"
1412
+ #debug("encoding: #{c.encoding}")
1413
+ #debug "c.size: #{c.size}"
1384
1414
  #recalc_line_ends #TODO: optimize?
1385
1415
  calculate_line_and_column_pos
1386
1416
  #need_redraw!
@@ -1454,7 +1484,7 @@ class Buffer < String
1454
1484
  text = $register[register]
1455
1485
  end
1456
1486
  end
1457
- puts "PASTE: #{text}"
1487
+ debug "PASTE: #{text}"
1458
1488
 
1459
1489
  return if text == ""
1460
1490
 
@@ -1511,7 +1541,7 @@ class Buffer < String
1511
1541
  debug "COPY SELECTION"
1512
1542
  s = self[get_visual_mode_range]
1513
1543
  if x == :append
1514
- puts "APPEND"
1544
+ debug "APPEND"
1515
1545
  s += "\n" + get_clipboard()
1516
1546
  end
1517
1547
 
@@ -23,6 +23,7 @@ end
23
23
  class BufferList < Array
24
24
  attr_reader :current_buf
25
25
 
26
+
26
27
  def <<(_buf)
27
28
  super
28
29
  $buffer = _buf
@@ -57,6 +58,12 @@ class BufferList < Array
57
58
  buf_idx = self.index { |b| b.fname == fname }
58
59
  return buf_idx
59
60
  end
61
+
62
+ def get_buffer_by_id(id)
63
+ buf_idx = self.index { |b| b.id == id }
64
+ return buf_idx
65
+ end
66
+
60
67
 
61
68
  def add_current_buf_to_history()
62
69
  @recent_ind = 0
@@ -138,7 +145,24 @@ class BufferList < Array
138
145
  $buffer_history = bh.reverse
139
146
  end
140
147
 
148
+
149
+ # Close buffer in the background
150
+ # TODO: if open in another widget
151
+ def close_other_buffer(buffer_i)
152
+ return if self.size <= buffer_i
153
+ return if @current_buf == buffer_i
154
+
155
+ bufname = self[buffer_i].basename
156
+ message("Closed buffer #{bufname}")
157
+
158
+ self.slice!(buffer_i)
159
+ $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
+ end
162
+
163
+
141
164
  def close_buffer(buffer_i, from_recent = false)
165
+ return if buffer_i.nil?
142
166
  return if self.size <= buffer_i
143
167
 
144
168
  bufname = self[buffer_i].basename
@@ -0,0 +1,83 @@
1
+ class BufferManager
2
+ attr_reader :buf
3
+ @@cur = nil # Current object of class
4
+
5
+ def self.cur()
6
+ return @@cur
7
+ end
8
+
9
+ def self.init()
10
+ vma.kbd.add_minor_mode("bmgr", :buf_mgr, :command)
11
+ reg_act(:bmgr_select, proc { buf.module.select_line }, "")
12
+ reg_act(:bmgr_close, proc { buf.module.close_selected }, "")
13
+
14
+ reg_act(:start_buf_manager, proc { BufferManager.new.run; vma.kbd.set_mode(:buf_mgr) }, "Buffer manager")
15
+
16
+ bindkey "bmgr enter", :bmgr_select
17
+ bindkey "bmgr c", :bmgr_close
18
+ end
19
+
20
+ def initialize()
21
+ @buf = nil
22
+ @line_to_id = {}
23
+ end
24
+
25
+ def buf_of_current_line()
26
+ l = @buf.lpos - @header.size
27
+ return nil if l < 0
28
+ bufid = @line_to_id[l]
29
+ buf_i = vma.buffers.get_buffer_by_id(bufid)
30
+ return buf_i
31
+ end
32
+
33
+ def close_selected
34
+ buf_i = buf_of_current_line()
35
+ if buf_i.nil?
36
+ message("buf already closed")
37
+ return
38
+ end
39
+ vma.buffers.close_other_buffer(buf_i)
40
+ end
41
+
42
+ def select_line
43
+ buf_i = buf_of_current_line()
44
+ return if buf_i.nil?
45
+
46
+ vma.buffers.close_current_buffer()
47
+ vma.buffers.set_current_buffer(buf_i)
48
+ @@cur = nil
49
+ end
50
+
51
+ def run
52
+ if !@@cur.nil? #One instance open already
53
+ #Close it
54
+ buf_i = vma.buffers.get_buffer_by_id(@@cur.buf.id)
55
+ vma.buffers.close_buffer(buf_i)
56
+ end
57
+ @@cur = self
58
+ @header = []
59
+ @header << "Current buffers:"
60
+ @header << "keys: <enter> to select, <c> to close buffer"
61
+ @header << "=" * 40
62
+
63
+ s = ""
64
+ s << @header.join("\n")
65
+ s << "\n"
66
+ i = 0
67
+ for b in vma.buffers.sort_by { |x| x.list_str }
68
+ x = b.list_str
69
+ s << "#{x}\n"
70
+ @line_to_id[i] = b.id
71
+ i += 1
72
+ end
73
+
74
+ if @buf.nil?
75
+ @buf = create_new_file(nil, s)
76
+ @buf.module = self
77
+ @buf.active_kbd_mode = :buf_mgr
78
+ else
79
+ @buf.set_content(s)
80
+ end
81
+ @buf.set_line_and_column_pos(@header.size, 0)
82
+ end
83
+ end
@@ -0,0 +1,21 @@
1
+ $cnf = {} # TODO
2
+
3
+ def conf(id)
4
+ return $cnf[id]
5
+ end
6
+
7
+ def set_conf(id, val)
8
+ $cnf[id] = val
9
+ end
10
+
11
+ def setcnf(id, val)
12
+ set_conf(id, val)
13
+ end
14
+
15
+ setcnf :indent_based_on_last_line, true
16
+ setcnf :extensions_to_open, [".txt", ".h", ".c", ".cpp", ".hpp", ".rb", ".inc", ".php", ".sh", ".m", ".gd", ".js"]
17
+
18
+
19
+ setcnf "log.verbose", 1
20
+ setcnf :tab_width, 4
21
+
data/lib/vimamsa/debug.rb CHANGED
@@ -21,8 +21,9 @@ def debug_dump_deltas()
21
21
  end
22
22
 
23
23
  $log_messages = []
24
- def log_message(message)
25
- puts message
24
+
25
+ def log_message(message,vlevel)
26
+ puts message if conf("log.verbose") >= vlevel
26
27
  $log_messages << message
27
28
  end
28
29
 
@@ -41,12 +41,12 @@ class EasyJump
41
41
  def easy_jump_input_char(c, event_type)
42
42
  return true if event_type != :key_press
43
43
  # vma.paint_stack = []
44
- puts "EASY JUMP: easy_jump_input_char [#{c}]"
44
+ debug "EASY JUMP: easy_jump_input_char [#{c}]"
45
45
  @easy_jump_input << c.upcase
46
46
  if @jump_sequence.include?(@easy_jump_input)
47
47
  jshash = Hash[@jump_sequence.map.with_index.to_a]
48
48
  nthword = jshash[@easy_jump_input]
49
- puts "nthword:#{nthword} #{[@easy_jump_wsmarks[nthword], @jump_sequence[nthword]]}"
49
+ debug "nthword:#{nthword} #{[@easy_jump_wsmarks[nthword], @jump_sequence[nthword]]}"
50
50
  buf.set_pos(@easy_jump_wsmarks[nthword])
51
51
  # @kbd.set_mode(:command)
52
52
  vma.kbd.remove_keyhandling_override
@@ -63,8 +63,8 @@ class EasyJump
63
63
  end
64
64
 
65
65
  def easy_jump_draw()
66
- # puts @jump_sequence.inspect
67
- # puts @easy_jump_wsmarks.inspect
66
+ # debug @jump_sequence.inspect
67
+ # debug @easy_jump_wsmarks.inspect
68
68
  vma.gui.start_overlay_draw
69
69
  for i in 0..(@easy_jump_wsmarks.size - 1)
70
70
  vma.gui.overlay_draw_text(@jump_sequence[i], @easy_jump_wsmarks[i])
@@ -73,12 +73,12 @@ class EasyJump
73
73
 
74
74
  return
75
75
  return if @jump_sequence.empty?
76
- puts "EASY JUMP DRAW"
76
+ debug "EASY JUMP DRAW"
77
77
  screen_cord = cpp_function_wrapper(0, [@easy_jump_wsmarks])
78
78
  screen_cord = screen_cord[1..@jump_sequence.size]
79
79
  screen_cord.each_with_index { |point, i|
80
80
  mark_str = @jump_sequence[i]
81
- #puts "draw #{point[0]}x#{point[1]}"
81
+ #debug "draw #{point[0]}x#{point[1]}"
82
82
  draw_text(mark_str, point[0] + 3, point[1])
83
83
  #break if m > @cpos
84
84
  }
@@ -159,7 +159,7 @@ class EasyJump
159
159
  }
160
160
 
161
161
  #printf("Size of sequence: %d\n",sequence.size)
162
- #puts sequence.inspect
162
+ #debug sequence.inspect
163
163
  return sequence
164
164
  end
165
165
  end