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.
@@ -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
-