vimamsa 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,5 @@
1
-
2
-
3
- def hpt_open_link()
4
- end
5
-
6
1
  def hpt_check_cur_word(w)
7
- puts "check_cur_word(w)"
2
+ debug "check_cur_word(w)"
8
3
  m = w.match(/⟦(.*)⟧/)
9
4
  if m
10
5
  fpfx = m[1]
@@ -12,8 +7,10 @@ def hpt_check_cur_word(w)
12
7
  dn = File.dirname($buffer.fname)
13
8
 
14
9
  fcands = []
15
- fcands << "#{dn}/#{fpfx}"
16
- fcands << "#{dn}/#{fpfx}.txt"
10
+ if fpfx[0] != "/"
11
+ fcands << "#{dn}/#{fpfx}"
12
+ fcands << "#{dn}/#{fpfx}.txt"
13
+ end
17
14
  fcands << File.expand_path("#{fpfx}")
18
15
  fcands << File.expand_path("#{fpfx}.txt")
19
16
 
@@ -38,22 +35,23 @@ def hpt_check_cur_word(w)
38
35
  return nil
39
36
  end
40
37
 
38
+ # Scan images inserted with ⟦img:filepath⟧ syntax
41
39
  def hpt_scan_images()
42
40
  return if !buf.fname
43
41
  return if !buf.fname.match(/.*txt$/)
44
42
  imgpos = scan_indexes(buf, /⟦img:.+?⟧/)
45
43
  imgtags = buf.scan(/(⟦img:(.+?)⟧)/)
46
- # i = 0
47
44
  c = 0
48
45
  imgpos.each.with_index { |x, i|
49
46
  a = imgpos[i]
50
47
  t = imgtags[i]
51
48
  insert_pos = a + t[0].size + c
52
49
  imgfn = File.expand_path(t[1])
53
- # Ripl.start :binding => binding
54
50
  next if !File.exist?(imgfn)
51
+ # Show as image in gui, handle as empty space in txt file
55
52
  if buf[insert_pos..(insert_pos + 2)] != "\n \n"
56
53
  buf.insert_txt_at("\n \n", insert_pos)
54
+ buf.view.handle_deltas
57
55
  c += 3
58
56
  end
59
57
  buf.add_image(imgfn, insert_pos + 1)
@@ -28,6 +28,10 @@ def is_visual_mode()
28
28
  return 0
29
29
  end
30
30
 
31
+
32
+ reg_act(:enable_debug, proc { $debug=true }, "Enable debug")
33
+ reg_act(:disable_debug, proc {$debug=false }, "Disable debug")
34
+
31
35
  reg_act(:easy_jump, proc { EasyJump.start }, "Easy jump")
32
36
  reg_act(:savedebug, "savedebug", "Save debug info", { :group => :debug })
33
37
  reg_act(:open_file_dialog, "open_file_dialog", "Open file", { :group => :file })
@@ -127,16 +127,16 @@ class KeyBindingTree
127
127
  @match_state.each { |parent|
128
128
  parent.children.each { |c|
129
129
  # printf(" KEY MATCH: ")
130
- # puts [c.key_name, key_name].inspect
130
+ # debug [c.key_name, key_name].inspect
131
131
  if c.key_name == key_name and c.eval_rule == ""
132
132
  new_state << c
133
133
  elsif c.key_name == key_name and c.eval_rule != ""
134
- puts "CHECK EVAL: #{c.eval_rule}"
134
+ debug "CHECK EVAL: #{c.eval_rule}"
135
135
  if eval(c.eval_rule)
136
136
  new_state << c
137
- puts "EVAL TRUE"
137
+ debug "EVAL TRUE"
138
138
  else
139
- puts "EVAL FALSE"
139
+ debug "EVAL FALSE"
140
140
  end
141
141
  end
142
142
  }
@@ -195,7 +195,7 @@ class KeyBindingTree
195
195
  end
196
196
 
197
197
  @state_trail = [@mode_root_state]
198
- # puts get_state_trail_str()
198
+ # debug get_state_trail_str()
199
199
  # $next_command_count = nil # TODO: set somewhere else?
200
200
  end
201
201
 
@@ -305,18 +305,18 @@ class KeyBindingTree
305
305
 
306
306
  if new_state != nil
307
307
  @state_trail << new_state
308
- puts get_state_trail_str()
309
- # # puts "CUR STATE: #{@state_trail.collect{|x| x.to_s}.join}"
308
+ debug get_state_trail_str()
309
+ # # debug "CUR STATE: #{@state_trail.collect{|x| x.to_s}.join}"
310
310
  # s_trail = ""
311
311
  # for st in @state_trail
312
312
  # st = st[0] if st.class == Array
313
313
  # s_trail << " #{st.to_s}"
314
314
  # end
315
- # puts "CUR STATE: #{s_trail}"
315
+ # debug "CUR STATE: #{s_trail}"
316
316
  # for cstate in new_state[0].children
317
317
  # act_s = "..."
318
318
  # act_s = cstate.action.to_s if cstate.action != nil
319
- # puts " #{cstate.to_s} #{act_s}"
319
+ # debug " #{cstate.to_s} #{act_s}"
320
320
  # end
321
321
  # new_state[0].children.collect{|x|x.to_s}
322
322
  end
@@ -330,7 +330,7 @@ class KeyBindingTree
330
330
  end
331
331
 
332
332
  if event_type == :key_release and c == "shift!"
333
- # Pressing a modifier key (shift) puts state back to root
333
+ # Pressing a modifier key (shift) sets state back to root
334
334
  # only on key release when no other key has been pressed
335
335
  # after said modifier key (shift).
336
336
  set_state_to_root
@@ -346,14 +346,14 @@ class KeyBindingTree
346
346
 
347
347
  if s_act.any? and !state_with_children.any?
348
348
  eval_s = s_act.first.action if eval_s == nil
349
- puts "FOUND MATCH:#{eval_s}"
350
- puts "CHAR: #{c}"
349
+ debug "FOUND MATCH:#{eval_s}"
350
+ debug "CHAR: #{c}"
351
351
  c.gsub!("\\", %q{\\\\} * 4) # Escape \ -chars
352
352
  c.gsub!("'", "#{'\\' * 4}'") # Escape ' -chars
353
353
 
354
354
  eval_s.gsub!("<char>", "'#{c}'") if eval_s.class == String
355
- puts eval_s
356
- puts c
355
+ debug eval_s
356
+ debug c
357
357
  handle_key_bindigs_action(eval_s, c)
358
358
  set_state_to_root
359
359
  end
@@ -365,7 +365,7 @@ class KeyBindingTree
365
365
  # Receive keyboard event from Qt
366
366
  def handle_key_event(event)
367
367
  start_profiler
368
- # puts "GOT KEY EVENT: #{key.inspect}"
368
+ # debug "GOT KEY EVENT: #{key.inspect}"
369
369
  debug "GOT KEY EVENT:: #{event} #{event[2]}"
370
370
  debug "|#{event.inspect}|"
371
371
  $debuginfo["cur_event"] = event
@@ -392,11 +392,11 @@ class KeyBindingTree
392
392
  end
393
393
  end
394
394
 
395
- # puts "----D------------"
396
- # puts @modifiers.inspect
397
- # puts event.inspect
398
- # puts event[4] & ALTMODIFIER
399
- # puts "-----------------"
395
+ # debug "----D------------"
396
+ # debug @modifiers.inspect
397
+ # debug event.inspect
398
+ # debug event[4] & ALTMODIFIER
399
+ # debug "-----------------"
400
400
 
401
401
  @modifiers.delete(keycode) if event_type == KEY_RELEASE
402
402
 
@@ -422,7 +422,7 @@ class KeyBindingTree
422
422
  if $translate_table.include?(keycode)
423
423
  key_str2 = $translate_table[keycode].downcase
424
424
  end
425
- # puts "key_str=|#{key_str}| key_str=|#{key_str.inspect}| key_str2=|#{key_str2}|"
425
+ # debug "key_str=|#{key_str}| key_str=|#{key_str.inspect}| key_str2=|#{key_str2}|"
426
426
  prefixed_key_str = key_prefix + key_str2
427
427
 
428
428
  # Space is only key in $event_keysym_translate_table
@@ -430,7 +430,7 @@ class KeyBindingTree
430
430
  key_str = " " if key_str == "space" # HACK
431
431
 
432
432
  # if keycode == @last_event[0] and event_type == KEY_RELEASE
433
- # puts "KEY! key_str=|#{key_str}| prefixed_key_str=|#{prefixed_key_str}|"
433
+ # debug "KEY! key_str=|#{key_str}| prefixed_key_str=|#{prefixed_key_str}|"
434
434
  # end
435
435
 
436
436
  if key_str != "" or prefixed_key_str != ""
@@ -485,7 +485,7 @@ class KeyBindingTree
485
485
  m = key.match(/^(\S+)\s(\S.*)$/)
486
486
  if m
487
487
  modetmp = m[1]
488
- puts [key, modetmp, m].inspect
488
+ debug [key, modetmp, m].inspect
489
489
  modes = modetmp.split("") if modetmp.match(/^\p{Lu}+$/) # Uppercase
490
490
  modes = [modetmp] if modetmp.match(/^\p{Ll}+$/) # Lowercase
491
491
  keydef = m[2]
@@ -568,10 +568,10 @@ class KeyBindingTree
568
568
  # debug("NameError with eval cmd #{action}: " + $!.to_s)
569
569
  # raise
570
570
  rescue Exception => e
571
- puts "BACKTRACE"
572
- puts e.backtrace
573
- puts e.inspect
574
- puts "BACKTRACE END"
571
+ debug "BACKTRACE"
572
+ debug e.backtrace
573
+ debug e.inspect
574
+ debug "BACKTRACE END"
575
575
  if $!.class == SystemExit
576
576
  exit
577
577
  else
@@ -30,7 +30,7 @@ bindkey "C , t 4", :set_line_style_h4
30
30
  bindkey "C , t b", :set_line_style_bold
31
31
  bindkey "C , t t", :set_line_style_title
32
32
  bindkey "C , t c", :clear_line_styles
33
- bindkey "C , b", :gui_select_buffer
33
+ bindkey "C , b", :start_buf_manager
34
34
  # bindkey "C , f o", :open_file_dialog
35
35
  bindkey "CI ctrl-o", :open_file_dialog
36
36
  # bindkey "M enter", :minibuffer_end
data/lib/vimamsa/macro.rb CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  def gui_find_macro_update_callback(search_str = "")
3
- puts "gui_find_macro_update_callback: #{search_str}"
3
+ debug "gui_find_macro_update_callback: #{search_str}"
4
4
  heystack = $macro.named_macros
5
5
  return [] if heystack.empty?
6
6
  $macro_search_list = []
@@ -14,10 +14,10 @@ def gui_find_macro_update_callback(search_str = "")
14
14
  end
15
15
 
16
16
  def gui_find_macro_select_callback(search_str, idx)
17
- puts "gui_find_macro_select_callback"
17
+ debug "gui_find_macro_select_callback"
18
18
  selected = $macro_search_list[idx]
19
19
  m = $macro.named_macros[selected[0]].clone
20
- puts "SELECTED MACRO:#{selected}, #{m}"
20
+ debug "SELECTED MACRO:#{selected}, #{m}"
21
21
  id = $macro.last_macro
22
22
  $macro.recorded_macros[id] = m
23
23
  $macro.run_macro(id)
@@ -64,7 +64,7 @@ class Macro
64
64
  end
65
65
 
66
66
  def name_macro(name, id = nil)
67
- puts "NAME MACRO #{name}"
67
+ debug "NAME MACRO #{name}"
68
68
  if id.nil?
69
69
  id = @last_macro
70
70
  end
@@ -134,7 +134,7 @@ class Macro
134
134
  # Ripl.start :binding => binding
135
135
  for a in acts
136
136
  ret = exec_action(a)
137
- puts ret
137
+ debug ret
138
138
  if ret == false
139
139
  message("Error while running macro")
140
140
  break
data/lib/vimamsa/rbvma.rb CHANGED
@@ -22,21 +22,22 @@ require "vimamsa/gui_menu"
22
22
  require "vimamsa/gui_select_window"
23
23
  require "vimamsa/gui_sourceview"
24
24
 
25
- require "vimamsa/macro"
25
+ require "vimamsa/ack"
26
26
  require "vimamsa/buffer"
27
- require "vimamsa/debug"
27
+ require "vimamsa/buffer_list"
28
+ require "vimamsa/buffer_manager"
28
29
  require "vimamsa/constants"
30
+ require "vimamsa/debug"
29
31
  require "vimamsa/easy_jump"
32
+ require "vimamsa/encrypt"
33
+ require "vimamsa/file_finder"
34
+ require "vimamsa/file_manager"
30
35
  require "vimamsa/hook"
36
+ require "vimamsa/hyper_plain_text"
37
+ require "vimamsa/macro"
31
38
  require "vimamsa/search"
32
39
  require "vimamsa/search_replace"
33
- require "vimamsa/buffer_list"
34
- require "vimamsa/file_finder"
35
- require "vimamsa/hyper_plain_text"
36
- require "vimamsa/ack"
37
- require "vimamsa/encrypt"
38
- require "vimamsa/file_manager"
39
-
40
+ require "vimamsa/conf"
40
41
  # load "vendor/ver/lib/ver/vendor/textpow.rb"
41
42
  # load "vendor/ver/lib/ver/syntax/detector.rb"
42
43
  # load "vendor/ver/config/detect.rb"
@@ -48,7 +49,7 @@ def vma()
48
49
  end
49
50
 
50
51
  def unimplemented
51
- puts "unimplemented"
52
+ debug "unimplemented"
52
53
  end
53
54
 
54
55
 
@@ -32,7 +32,7 @@ class Search
32
32
  @reg = Regexp.new(regex, Regexp::IGNORECASE)
33
33
  end
34
34
  @search_indexes = scan_indexes(buffer, @reg)
35
- puts @search_indexes.inspect
35
+ debug @search_indexes.inspect
36
36
  @cur_search_i = -1
37
37
  if @search_indexes.any?
38
38
  @cur_search_i = 0
@@ -50,7 +50,7 @@ class FileSelector
50
50
  # puts "def select_line"
51
51
  fn = fullp(@buf.get_current_line[0..-2])
52
52
  if File.directory?(fn)
53
- puts "CHDIR: #{fn}"
53
+ debug "CHDIR: #{fn}"
54
54
  dir_to_buf(fn)
55
55
  # elsif vma.can_open_extension?(fn) #TODO: remove this check?
56
56
  # jump_to_file(fn)
@@ -59,7 +59,6 @@ class FileSelector
59
59
  else
60
60
  open_with_default_program(fn)
61
61
  end
62
- # puts l.inspect
63
62
  end
64
63
  end
65
64
 
@@ -91,7 +90,7 @@ def grep_cur_buffer(search_str, b = nil)
91
90
  # @current_buf = buffer_i
92
91
 
93
92
  b.line_action_handler = proc { |lineno|
94
- puts "GREP HANDLER:#{lineno}"
93
+ debug "GREP HANDLER:#{lineno}"
95
94
  jumpto = $grep_matches[lineno]
96
95
  if jumpto.class == Integer
97
96
  $buffers.set_current_buffer($grep_bufid, update_history = true)
@@ -114,7 +113,7 @@ end
114
113
  def gui_replace_callback(vals)
115
114
  search_str = vals["search"]
116
115
  replace_str = vals["replace"]
117
- puts "gui_replace_callback: #{search_str} => #{replace_str}"
116
+ debug "gui_replace_callback: #{search_str} => #{replace_str}"
118
117
  gui_select_window_close(0)
119
118
  buf_replace(search_str, replace_str)
120
119
  end
@@ -1,3 +1,3 @@
1
1
  module Vimamsa
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
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.7
4
+ version: 0.1.8
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-04-25 00:00:00.000000000 Z
11
+ date: 2022-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -190,6 +190,8 @@ files:
190
190
  - lib/vimamsa/actions.rb
191
191
  - lib/vimamsa/buffer.rb
192
192
  - lib/vimamsa/buffer_list.rb
193
+ - lib/vimamsa/buffer_manager.rb
194
+ - lib/vimamsa/conf.rb
193
195
  - lib/vimamsa/constants.rb
194
196
  - lib/vimamsa/debug.rb
195
197
  - lib/vimamsa/easy_jump.rb
@@ -199,7 +201,6 @@ files:
199
201
  - lib/vimamsa/file_history.rb
200
202
  - lib/vimamsa/file_manager.rb
201
203
  - lib/vimamsa/gui.rb
202
- - lib/vimamsa/gui_gtk_sourceview.rb
203
204
  - lib/vimamsa/gui_menu.rb
204
205
  - lib/vimamsa/gui_select_window.rb
205
206
  - lib/vimamsa/gui_sourceview.rb
@@ -1,294 +0,0 @@
1
-
2
- class VSourceView < GtkSource::View
3
- def initialize(title = nil)
4
- # super(:toplevel)
5
- super()
6
- puts "vsource init"
7
- @last_keyval = nil
8
- @last_event = [nil, nil]
9
-
10
- signal_connect "button-press-event" do |_widget, event|
11
- if event.button == Gdk::BUTTON_PRIMARY
12
- # puts "Gdk::BUTTON_PRIMARY"
13
- false
14
- elsif event.button == Gdk::BUTTON_SECONDARY
15
- # puts "Gdk::BUTTON_SECONDARY"
16
- true
17
- else
18
- true
19
- end
20
- end
21
-
22
- signal_connect("key_press_event") do |widget, event|
23
- handle_key_event(event, :key_press_event)
24
- true
25
- end
26
-
27
- signal_connect("key_release_event") do |widget, event|
28
- handle_key_event(event, :key_release_event)
29
- true
30
- end
31
-
32
- signal_connect("move-cursor") do |widget, event|
33
- $update_cursor = true
34
- false
35
- end
36
-
37
- signal_connect "button-release-event" do |widget, event|
38
- $buffer.set_pos(buffer.cursor_position)
39
- false
40
- end
41
- @curpos_mark = nil
42
- end
43
-
44
- def handle_key_event(event, sig)
45
- if $update_cursor
46
- curpos = buffer.cursor_position
47
- puts "MOVE CURSOR: #{curpos}"
48
- buf.set_pos(curpos)
49
- $update_cursor = false
50
- end
51
- puts $view.visible_rect.inspect
52
-
53
- puts "key event"
54
- puts event
55
-
56
- key_name = event.string
57
- if event.state.control_mask?
58
- key_name = Gdk::Keyval.to_name(event.keyval)
59
- # Gdk::Keyval.to_name()
60
- end
61
-
62
- keyval_trans = {}
63
- keyval_trans[Gdk::Keyval::KEY_Control_L] = "ctrl"
64
- keyval_trans[Gdk::Keyval::KEY_Control_R] = "ctrl"
65
-
66
- keyval_trans[Gdk::Keyval::KEY_Escape] = "esc"
67
-
68
- keyval_trans[Gdk::Keyval::KEY_Return] = "enter"
69
- keyval_trans[Gdk::Keyval::KEY_ISO_Enter] = "enter"
70
- keyval_trans[Gdk::Keyval::KEY_KP_Enter] = "enter"
71
- keyval_trans[Gdk::Keyval::KEY_Alt_L] = "alt"
72
- keyval_trans[Gdk::Keyval::KEY_Alt_R] = "alt"
73
-
74
- keyval_trans[Gdk::Keyval::KEY_BackSpace] = "backspace"
75
- keyval_trans[Gdk::Keyval::KEY_KP_Page_Down] = "pagedown"
76
- keyval_trans[Gdk::Keyval::KEY_KP_Page_Up] = "pageup"
77
- keyval_trans[Gdk::Keyval::KEY_Page_Down] = "pagedown"
78
- keyval_trans[Gdk::Keyval::KEY_Page_Up] = "pageup"
79
- keyval_trans[Gdk::Keyval::KEY_Left] = "left"
80
- keyval_trans[Gdk::Keyval::KEY_Right] = "right"
81
- keyval_trans[Gdk::Keyval::KEY_Down] = "down"
82
- keyval_trans[Gdk::Keyval::KEY_Up] = "up"
83
- keyval_trans[Gdk::Keyval::KEY_space] = "space"
84
-
85
- keyval_trans[Gdk::Keyval::KEY_Shift_L] = "shift"
86
- keyval_trans[Gdk::Keyval::KEY_Shift_R] = "shift"
87
- keyval_trans[Gdk::Keyval::KEY_Tab] = "tab"
88
-
89
- key_trans = {}
90
- key_trans["\e"] = "esc"
91
- tk = keyval_trans[event.keyval]
92
- key_name = tk if !tk.nil?
93
-
94
- key_str_parts = []
95
- key_str_parts << "ctrl" if event.state.control_mask? and key_name != "ctrl"
96
- key_str_parts << "alt" if event.state.mod1_mask? and key_name != "alt"
97
-
98
- key_str_parts << key_name
99
- key_str = key_str_parts.join("-")
100
- keynfo = { :key_str => key_str, :key_name => key_name, :keyval => event.keyval }
101
- puts keynfo.inspect
102
- # $kbd.match_key_conf(key_str, nil, :key_press)
103
- # puts "key_str=#{key_str} key_"
104
-
105
- if key_str != "" # or prefixed_key_str != ""
106
- if sig == :key_release_event and event.keyval == @last_keyval
107
- $kbd.match_key_conf(key_str + "!", nil, :key_release)
108
- @last_event = [event, :key_release]
109
- elsif sig == :key_press_event
110
- $kbd.match_key_conf(key_str, nil, :key_press)
111
- @last_event = [event, key_str, :key_press]
112
- end
113
- @last_keyval = event.keyval #TODO: outside if?
114
- end
115
-
116
- handle_deltas
117
-
118
- # set_focus(5)
119
- # false
120
-
121
- end
122
-
123
- def pos_to_coord(i)
124
- b = buffer
125
- iter = b.get_iter_at(:offset => i)
126
- iterxy = get_iter_location(iter)
127
- winw = parent_window.width
128
- view_width = visible_rect.width
129
- gutter_width = winw - view_width
130
-
131
- x = iterxy.x + gutter_width
132
- y = iterxy.y
133
-
134
- # buffer_to_window_coords(Gtk::TextWindowType::TEXT, iterxy.x, iterxy.y).inspect
135
- # puts buffer_to_window_coords(Gtk::TextWindowType::TEXT, x, y).inspect
136
- (x, y) = buffer_to_window_coords(Gtk::TextWindowType::TEXT, x, y)
137
- # Ripl.start :binding => binding
138
-
139
- return [x, y]
140
- end
141
-
142
- def handle_deltas()
143
- any_change = false
144
- while d = buf.deltas.shift
145
- any_change = true
146
- pos = d[0]
147
- op = d[1]
148
- num = d[2]
149
- txt = d[3]
150
- if op == DELETE
151
- startiter = buffer.get_iter_at(:offset => pos)
152
- enditer = buffer.get_iter_at(:offset => pos + num)
153
- buffer.delete(startiter, enditer)
154
- elsif op == INSERT
155
- startiter = buffer.get_iter_at(:offset => pos)
156
- buffer.insert(startiter, txt)
157
- end
158
- end
159
- if any_change
160
- gui_set_cursor_pos($buffer.id, $buffer.pos) #TODO: only when necessary
161
- end
162
-
163
- # sanity_check #TODO
164
- end
165
-
166
- def sanity_check()
167
- a = buffer.text
168
- b = buf.to_s
169
- # puts "===================="
170
- # puts a.lines[0..10].join()
171
- # puts "===================="
172
- # puts b.lines[0..10].join()
173
- # puts "===================="
174
- if a == b
175
- puts "Buffers match"
176
- else
177
- puts "ERROR: Buffer's don't match."
178
- end
179
- end
180
-
181
- def set_cursor_pos(pos)
182
- # return
183
- itr = buffer.get_iter_at(:offset => pos)
184
- itr2 = buffer.get_iter_at(:offset => pos + 1)
185
- buffer.place_cursor(itr)
186
-
187
- # $view.signal_emit("extend-selection", Gtk::MovementStep.new(:PAGES), -1, false)
188
-
189
- within_margin = 0.075 #margin as a [0.0,0.5) fraction of screen size
190
- use_align = false
191
- xalign = 0.5 #0.0=top 1.0=bottom, 0.5=center
192
- yalign = 0.5
193
-
194
- if @curpos_mark.nil?
195
- @curpos_mark = buffer.create_mark("cursor", itr, false)
196
- else
197
- buffer.move_mark(@curpos_mark, itr)
198
- end
199
- scroll_to_mark(@curpos_mark, within_margin, use_align, xalign, yalign)
200
- $idle_scroll_to_mark = true
201
- ensure_cursor_visible
202
-
203
- # scroll_to_iter(itr, within_margin, use_align, xalign, yalign)
204
-
205
- # $view.signal_emit("extend-selection", Gtk::TextExtendSelection.new, itr,itr,itr2)
206
- # Ripl.start :binding => binding
207
- draw_cursor
208
-
209
- return true
210
- end
211
-
212
- def cursor_visible_idle_func
213
- puts "cursor_visible_idle_func"
214
- # From https://picheta.me/articles/2013/08/gtk-plus--a-method-to-guarantee-scrolling.html
215
- # vr = visible_rect
216
-
217
- # b = $view.buffer
218
- # iter = buffer.get_iter_at(:offset => buffer.cursor_position)
219
- # iterxy = get_iter_location(iter)
220
-
221
- sleep(0.01)
222
- # intr = iterxy.intersect(vr)
223
- if is_cursor_visible == false
224
- # set_cursor_pos(buffer.cursor_position)
225
-
226
- itr = buffer.get_iter_at(:offset => buffer.cursor_position)
227
-
228
- within_margin = 0.075 #margin as a [0.0,0.5) fraction of screen size
229
- use_align = false
230
- xalign = 0.5 #0.0=top 1.0=bottom, 0.5=center
231
- yalign = 0.5
232
-
233
- scroll_to_iter(itr, within_margin, use_align, xalign, yalign)
234
-
235
- # return true # Call this func again
236
- else
237
- return false # Don't call this idle func again
238
- end
239
- end
240
-
241
- def is_cursor_visible
242
- vr = visible_rect
243
- iter = buffer.get_iter_at(:offset => buffer.cursor_position)
244
- iterxy = get_iter_location(iter)
245
- iterxy.width = 1 if iterxy.width == 0
246
- iterxy.height = 1 if iterxy.height == 0
247
-
248
- intr = iterxy.intersect(vr)
249
- if intr.nil?
250
- puts iterxy.inspect
251
- puts vr.inspect
252
- # Ripl.start :binding => binding
253
-
254
- # exit!
255
- return false
256
- else
257
- return true
258
- end
259
- end
260
-
261
- def ensure_cursor_visible
262
- if is_cursor_visible == false
263
- Thread.new {
264
- sleep 0.01
265
- GLib::Idle.add(proc { cursor_visible_idle_func })
266
- }
267
- end
268
- end
269
-
270
- def draw_cursor
271
- if is_command_mode
272
- itr = buffer.get_iter_at(:offset => buf.pos)
273
- itr2 = buffer.get_iter_at(:offset => buf.pos + 1)
274
- $view.buffer.select_range(itr, itr2)
275
- elsif buf.visual_mode?
276
- puts "VISUAL MODE"
277
- (_start, _end) = buf.get_visual_mode_range2
278
- puts "#{_start}, #{_end}"
279
- itr = buffer.get_iter_at(:offset => _start)
280
- itr2 = buffer.get_iter_at(:offset => _end + 1)
281
- $view.buffer.select_range(itr, itr2)
282
- else # Insert mode
283
- itr = buffer.get_iter_at(:offset => buf.pos)
284
- $view.buffer.select_range(itr, itr)
285
- puts "INSERT MODE"
286
- end
287
- end
288
-
289
- # def quit
290
- # destroy
291
- # true
292
- # end
293
- end
294
-