vimamsa 0.1.16 → 0.1.18

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.
@@ -67,6 +67,7 @@ class KeyBindingTree
67
67
  end
68
68
 
69
69
  def set_mode(label)
70
+ return if get_mode == :label
70
71
  @match_state = [@modes[label]] # used for matching input
71
72
  @mode_root_state = @modes[label]
72
73
  # @default_mode = label
@@ -290,8 +291,8 @@ class KeyBindingTree
290
291
  else
291
292
  method_desc = t.action
292
293
  if t.action.class == Symbol
293
- if !$actions[t.action].nil?
294
- a = $actions[t.action].method_name
294
+ if vma.actions.include?(t.action)
295
+ a = vma.actions[t.action].method_name
295
296
  if !a.nil? and !a.empty?
296
297
  method_desc = a
297
298
  end
@@ -477,7 +478,7 @@ class KeyBindingTree
477
478
  # return
478
479
  # end
479
480
  # $action_list << { :action => action, :key => key }
480
- if !$actions.has_key?(action)
481
+ if !vma.actions.include?(action)
481
482
  if action.class == String
482
483
  reg_act(action, proc { eval(action) }, action)
483
484
  end
@@ -566,7 +567,7 @@ class KeyBindingTree
566
567
  end
567
568
 
568
569
  def handle_key_bindigs_action(action, c)
569
- $acth << action
570
+ # $acth << action #TODO:needed here?
570
571
  @method_handles_repeat = false #TODO:??
571
572
  n = 1
572
573
  if @next_command_count and !(action.class == String and action.include?("set_next_command_count"))
@@ -619,8 +620,6 @@ def bindkey(key, action)
619
620
  $kbd.bindkey(key, action)
620
621
  end
621
622
 
622
- $action_list = []
623
-
624
623
  def exec_action(action)
625
624
  $kbd.last_action = $kbd.cur_action
626
625
  $kbd.cur_action = action
@@ -17,11 +17,32 @@ cnf.mode.default.cursor.background = "#03fcca"
17
17
  cnf.mode.visual.cursor.background = "#bc6040"
18
18
  cnf.mode.replace.cursor.background = "#fc0331"
19
19
  cnf.mode.browse.cursor.background = "#f803fc"
20
- # vma.kbd.show_state_trail
20
+ cnf.mode.insert.cursor.background = "#ffffff"
21
+
22
+ def _insert_move(op)
23
+ if op == :pagedown
24
+ vma.gui.page_down
25
+ elsif op == :pageup
26
+ vma.gui.page_up
27
+ else
28
+ buf.move(op)
29
+ end
30
+ end
31
+
32
+ def insert_select_move(op)
33
+ buf.continue_selection
34
+ _insert_move(op)
35
+ end
36
+
37
+ def insert_move(op)
38
+ buf.end_selection
39
+ _insert_move(op)
40
+ end
21
41
 
22
42
  bindkey ["VCB M", "B m"], :run_last_macro
23
43
 
24
44
  bindkey "VC s", :easy_jump
45
+ bindkey "I alt-s", :easy_jump
25
46
  bindkey "VC , m f", [:find_macro_gui, proc { vma.macro.find_macro_gui }, "Find named macro"]
26
47
  bindkey "C , m n", [:gui_name_macro, proc { vma.macro.gui_name_macro }, "Name last macro"]
27
48
  bindkey "C , j r", :jump_to_random
@@ -86,8 +107,8 @@ bindkey "B z", "center_on_current_line();call_action(:exit_browse_mode)"
86
107
  bindkey "B enter || B return || B esc || B j || B ctrl!", :exit_browse_mode
87
108
  bindkey "B s", :page_up
88
109
  bindkey "B d", :page_down
89
- bindkey "B r", proc { vma.gui.page_down(multip:0.25)}
90
- bindkey "B e", proc { vma.gui.page_up(multip:0.25)}
110
+ bindkey "B r", proc { vma.gui.page_down(multip: 0.25) }
111
+ bindkey "B e", proc { vma.gui.page_up(multip: 0.25) }
91
112
 
92
113
  bindkey "B i", :jump_to_start_of_buffer
93
114
  bindkey "B o", :jump_to_end_of_buffer
@@ -128,24 +149,41 @@ default_keys = {
128
149
  # "VC j" => "buf.move(FORWARD_LINE)",
129
150
  # "VC k" => "buf.move(BACKWARD_LINE)",
130
151
 
131
- "VC pagedown" => :page_down,
132
- "VC pageup" => :page_up,
152
+ "VCI pagedown" => :page_down,
153
+ "VCI pageup" => :page_up,
133
154
 
134
155
  "I down(vma.buf.view.autocp_active)" => "vma.buf.view.autocp_select_next",
135
156
  "I tab(vma.buf.view.autocp_active)" => "vma.buf.view.autocp_select_next",
136
157
  "I up(vma.buf.view.autocp_active)" => "vma.buf.view.autocp_select_previous",
137
158
  "I shift-tab(vma.buf.view.autocp_active)" => "vma.buf.view.autocp_select_previous",
138
159
  "I enter(vma.buf.view.autocp_active)" => "vma.buf.view.autocp_select",
139
-
140
- "I tab" => 'buf.insert_tab',
141
- "I shift-tab" => 'buf.unindent',
142
-
160
+
161
+ "I tab" => "buf.insert_tab",
162
+ "I shift-tab" => "buf.unindent",
163
+
143
164
  "I enter" => :insert_new_line,
144
165
 
145
- "VCIX left" => "buf.move(BACKWARD_CHAR)",
146
- "VCIX right" => "buf.move(FORWARD_CHAR)",
147
- "VCIX down" => "buf.move(FORWARD_LINE)",
148
- "VCIX up" => "buf.move(BACKWARD_LINE)",
166
+ "I shift-down" => "insert_select_move(BACKWARD_CHAR)",
167
+ "I shift-right" => "insert_select_move(FORWARD_CHAR)",
168
+ "I shift-down" => "insert_select_move(FORWARD_LINE)",
169
+ "I shift-up" => "insert_select_move(BACKWARD_LINE)",
170
+ "I shift-pagedown" => "insert_select_move(:pagedown)",
171
+ "I shift-pageup" => "insert_select_move(:pageup)",
172
+
173
+ "I left" => "insert_move(BACKWARD_CHAR)",
174
+ "I right" => "insert_move(FORWARD_CHAR)",
175
+ "I down" => "insert_move(FORWARD_LINE)",
176
+ "I up" => "insert_move(BACKWARD_LINE)",
177
+ "I pagedown" => "insert_move(:pagedown)",
178
+ "I pageup" => "insert_move(:pageup)",
179
+
180
+ #TODO:
181
+ "I @shift-click" => "insert_mode_shift_click(charpos)",
182
+
183
+ "VCX left" => "buf.move(BACKWARD_CHAR)",
184
+ "VCX right" => "buf.move(FORWARD_CHAR)",
185
+ "VCX down" => "buf.move(FORWARD_LINE)",
186
+ "VCX up" => "buf.move(BACKWARD_LINE)",
149
187
 
150
188
  "VC w" => "buf.jump_word(FORWARD,WORD_START)",
151
189
  "VC b" => "buf.jump_word(BACKWARD,WORD_START)",
@@ -192,7 +230,7 @@ default_keys = {
192
230
  "C , d c" => "debug_dump_clipboard",
193
231
  "C , d d" => "debug_dump_deltas",
194
232
  "C , d m" => :kbd_dump_state,
195
-
233
+
196
234
  "VC O" => "buf.jump(END_OF_LINE)",
197
235
  "VC $" => "buf.jump(END_OF_LINE)",
198
236
 
@@ -209,7 +247,7 @@ default_keys = {
209
247
 
210
248
  # Command mode only:
211
249
  "C ctrl-r" => "buf.redo()", # TODO:???
212
- "C v" => "buf.start_visual_mode",
250
+ "C v" => "buf.start_selection;vma.kbd.set_mode(:visual)",
213
251
  "C P" => "buf.paste(BEFORE)", # TODO: implement as replace for visual mode
214
252
  "C space <char>" => "buf.insert_txt(<char>)",
215
253
  "C space space" => "buf.insert_txt(' ')",
@@ -269,7 +307,7 @@ default_keys = {
269
307
  "C i" => "vma.kbd.set_mode(:insert)",
270
308
  "C R" => "vma.kbd.set_mode(:replace)",
271
309
  "C ctrl!" => "vma.kbd.set_mode(:insert)",
272
-
310
+
273
311
  # Replace mode
274
312
  "X esc || X ctrl!" => "vma.kbd.to_previous_mode",
275
313
  "X <char>" => "buf.replace_with_char(<char>);buf.move(FORWARD_CHAR)",
@@ -295,6 +333,7 @@ default_keys = {
295
333
  "CV , R" => "restart_application",
296
334
  # "I ctrl!" => "vma.kbd.to_previous_mode",
297
335
  "C shift!" => "buf.save",
336
+ "I ctrl-s" => "buf.save",
298
337
  "I <char>" => "buf.insert_txt(<char>)",
299
338
  "I esc || I ctrl!" => "vma.kbd.to_previous_mode",
300
339
 
@@ -312,7 +351,6 @@ default_keys = {
312
351
 
313
352
  "I ctrl-h" => :show_autocomplete,
314
353
  "I ctrl-j" => "vma.buf.view.hide_completions",
315
-
316
354
 
317
355
  "I space" => 'buf.insert_txt(" ")',
318
356
  # "I return" => 'buf.insert_new_line()',
@@ -320,7 +358,6 @@ default_keys = {
320
358
 
321
359
  bindkey "C , i p", "generate_password_to_buf(15)"
322
360
 
323
-
324
361
  default_keys.each { |key, value|
325
362
  bindkey(key, value)
326
363
  }
@@ -176,7 +176,9 @@ class LangSrv
176
176
  def open_file(fp, fc = nil)
177
177
  debug "open_file", 2
178
178
  fc = IO.read(fp) if fc.nil?
179
- fpuri = URI.join("file:///", fp).to_s
179
+
180
+ encoded_filepath = URI.encode_www_form_component(fp)
181
+ fpuri = URI.parse("file://#{encoded_filepath}")
180
182
 
181
183
  a = LSP::Interface::DidOpenTextDocumentParams.new(
182
184
  text_document: LSP::Interface::TextDocumentItem.new(
data/lib/vimamsa/macro.rb CHANGED
@@ -127,9 +127,12 @@ class Macro
127
127
  ret = exec_action(a)
128
128
  if ret == false
129
129
  error "Error while running macro"
130
- isok=false
130
+ isok = false
131
131
  break
132
132
  end
133
+
134
+ vma.buf.view.after_action
135
+ sleep cnf.macro.animation_delay!
133
136
  end
134
137
  end
135
138
  @running_macro = false
data/lib/vimamsa/rbvma.rb CHANGED
@@ -1,3 +1,5 @@
1
+
2
+ # require "bundler/setup"
1
3
  require "date"
2
4
  require "fileutils"
3
5
 
@@ -18,9 +20,7 @@ require "vimamsa/util"
18
20
  require "vimamsa/main"
19
21
  require "vimamsa/terminal"
20
22
 
21
- require "vimamsa/actions"
22
23
  require "vimamsa/key_binding_tree"
23
- require "vimamsa/key_actions"
24
24
 
25
25
  require "vimamsa/clipboard"
26
26
 
data/lib/vimamsa/tests.rb CHANGED
@@ -1,26 +1,26 @@
1
1
  require "digest"
2
2
 
3
3
  def run_tests()
4
- tests = ["test_paste_0","test_delete_0"]
4
+ tests = ["test_paste_0", "test_delete_0"]
5
5
  stats = []
6
6
  for t in tests
7
7
  r = eval(t)
8
8
  if r == true
9
9
  stats << "test #{t} OK"
10
10
  else
11
- stats << "test #{t} FAILED"
11
+ stats << "test #{t} FAILED"
12
12
  end
13
13
  end
14
- debug "TEST RESULTS:",2
14
+ debug "TEST RESULTS:", 2
15
15
  puts stats.join("\n")
16
16
  puts "===================="
17
-
18
17
  end
19
18
 
20
-
21
19
  #
22
20
 
23
21
  def test_paste_0(runmacro = true)
22
+ return
23
+ #TODO: update macro
24
24
  b = create_new_buffer(file_contents = "\n", prefix = "buf", setcurrent = true)
25
25
 
26
26
  b.insert_txt(JABBERWOCKY)
@@ -47,7 +47,7 @@ def test_paste_0(runmacro = true)
47
47
  end
48
48
  end
49
49
 
50
- def macro_test(macro, correct_hex, runmacro=true)
50
+ def macro_test(macro, correct_hex, runmacro = true)
51
51
  b = create_new_buffer(file_contents = "\n", prefix = "buf", setcurrent = true)
52
52
  b.insert_txt(JABBERWOCKY)
53
53
  b.insert_txt(LOREM_IPSUM)
@@ -117,6 +117,3 @@ O frabjous day! Callooh! Callay!”
117
117
  All mimsy were the borogoves,
118
118
  And the mome raths outgrabe.
119
119
  "
120
-
121
-
122
-
data/lib/vimamsa/util.rb CHANGED
@@ -3,11 +3,31 @@ require "open3"
3
3
  VOWELS = %w(a e i o u)
4
4
  CONSONANTS = %w(b c d f g h j k l m n p q r s t v w x y z)
5
5
 
6
+ def running_wayland?
7
+ sess = ENV["DESKTOP_SESSION"]
8
+ sess ||= ENV["XDG_SESSION_DESKTOP"]
9
+ sess ||= ENV["GDMSESSION"]
10
+ sess ||= ""
11
+ if sess.match(/wayland/)
12
+ return true
13
+ else
14
+ return false
15
+ end
16
+ end
17
+
6
18
  def tilde_path(abspath)
7
19
  userhome = File.expand_path("~/")
8
20
  abspath.sub(/^#{Regexp.escape(userhome)}\//, "~/")
9
21
  end
10
22
 
23
+ def to_camel_case(str)
24
+ words = str.split(/\W+/) # Split the input string into words
25
+ camel_case_words = words.map.with_index do |word, index|
26
+ index == 0 ? word.downcase : word.capitalize
27
+ end
28
+ camel_case_words.join
29
+ end
30
+
11
31
  def generate_password(length)
12
32
  password = ""
13
33
  while password.size < length
@@ -38,13 +58,16 @@ end
38
58
 
39
59
  def file_mime_type(fpath)
40
60
  fpath = File.expand_path(fpath)
41
- return false if !File.readable?(fpath)
61
+ return nil if !File.readable?(fpath)
42
62
  r = exec_cmd("file", "--mime-type", "--mime-encoding", fpath)
43
- return false if r.class != String
44
- return false if r.size < 2
63
+ return nil if r.class != String
64
+ return nil if r.size < 2
45
65
  m = r.match(".*:\s*(.*)")
46
- mimetype = m[1].match(/(.*);/)
47
- charset = m[1].match(/charset=(.*)/)
66
+ b = m[1].match(/(.*);/)
67
+ c = m[1].match(/charset=(.*)/)
68
+ return nil if b.nil? or c.nil?
69
+ mimetype = b[1]
70
+ charset = c[1]
48
71
  return [mimetype, charset]
49
72
  end
50
73
 
@@ -177,6 +200,17 @@ end
177
200
  # Used for image scaling after window resize
178
201
 
179
202
  class DelayExecutioner
203
+
204
+ # Run 'callable.call' if 'wait' time elapsed from last exec call for this id
205
+ def self.exec(id:, wait:, callable:)
206
+ @@h ||= {}
207
+ h = @@h
208
+ if h[id].nil?
209
+ h[id] = DelayExecutioner.new(wait, callable)
210
+ end
211
+ h[id].run
212
+ end
213
+
180
214
  def initialize(wait_time, _proc)
181
215
  @wait_time = wait_time
182
216
  @proc = _proc
@@ -198,7 +232,10 @@ class DelayExecutioner
198
232
  end
199
233
 
200
234
  def run()
235
+ # Reset @lastt to further delay execution until @wait_time from now
201
236
  @lastt = Time.now
237
+
238
+ # If already executed after last call to run()
202
239
  if @thread_running == false
203
240
  @thread_running = true
204
241
  start_thread
@@ -291,17 +328,22 @@ end
291
328
 
292
329
  def is_image_file(fpath)
293
330
  return false if !File.exist?(fpath)
294
- return false if !fpath.match(/.(jpg|jpeg|png)$/i)
295
- #TODO: check contents of file
296
- return true
331
+ # return false if !fpath.match(/.(jpg|jpeg|png)$/i)
332
+ mime = file_mime_type(fpath)
333
+ if !mime.nil?
334
+ if mime[0].match(/image\//)
335
+ return true
336
+ end
337
+ end
338
+ return false
297
339
  end
298
340
 
299
- def is_text_file(fpath)
300
- return false if !File.exist?(fpath)
301
- return false if !fpath.match(/.(txt|cpp|h|rb|c|php|java|py)$/i)
302
- #TODO: check contents of file
303
- return true
304
- end
341
+ # def is_text_file(fpath)
342
+ # return false if !File.exist?(fpath)
343
+ # return false if !fpath.match(/.(txt|cpp|h|rb|c|php|java|py)$/i)
344
+ # #TODO: check contents of file
345
+ # return true
346
+ # end
305
347
 
306
348
  def is_path(s)
307
349
  m = s.match(/(~[a-z]*)?\/.*\//)
@@ -1,3 +1,3 @@
1
1
  module Vimamsa
2
- VERSION = "0.1.16"
2
+ VERSION = "0.1.18"
3
3
  end
data/vimamsa.gemspec CHANGED
@@ -27,16 +27,16 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_runtime_dependency 'ripl', '~> 0.7.1'
29
29
  spec.add_runtime_dependency 'ripl-multi_line', '~> 0.3.1'
30
- spec.add_runtime_dependency 'gdk4', '~> 4.2.0'
31
- spec.add_runtime_dependency 'gtk4', '~> 4.2.0'
30
+ spec.add_runtime_dependency 'gdk4', '~> 4.2.1'
31
+ spec.add_runtime_dependency 'gtk4', '~> 4.2.1'
32
+ spec.add_runtime_dependency 'gtksourceview5', '~> 4.2.1'
33
+ spec.add_runtime_dependency 'gstreamer', '~> 4.2.1'
32
34
  spec.add_runtime_dependency 'rambling-trie', '~> 2.3.1'
33
35
 
34
36
  spec.add_runtime_dependency 'differ', '~> 0.1.2'
35
- spec.add_runtime_dependency 'gtksourceview5', '~> 4.2.0'
36
37
  spec.add_runtime_dependency 'parallel', '~> 1.14' #TODO: update?
37
38
  spec.add_runtime_dependency 'listen', '~> 3.4' #TODO: update?
38
39
  spec.add_runtime_dependency 'language_server-protocol', '~> 3.17.0.3'
39
- spec.add_runtime_dependency 'gstreamer', '~> 4.2.0'
40
40
 
41
41
  spec.extensions = ["ext/vmaext/extconf.rb"]
42
42
  spec.licenses = ['GPL-3.0+']
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.16
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sami Sieranoja
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-19 00:00:00.000000000 Z
11
+ date: 2024-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,126 +86,126 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 4.2.0
89
+ version: 4.2.1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 4.2.0
96
+ version: 4.2.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: gtk4
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 4.2.0
103
+ version: 4.2.1
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 4.2.0
110
+ version: 4.2.1
111
111
  - !ruby/object:Gem::Dependency
112
- name: rambling-trie
112
+ name: gtksourceview5
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 2.3.1
117
+ version: 4.2.1
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 2.3.1
124
+ version: 4.2.1
125
125
  - !ruby/object:Gem::Dependency
126
- name: differ
126
+ name: gstreamer
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 0.1.2
131
+ version: 4.2.1
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: 0.1.2
138
+ version: 4.2.1
139
139
  - !ruby/object:Gem::Dependency
140
- name: gtksourceview5
140
+ name: rambling-trie
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 4.2.0
145
+ version: 2.3.1
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 4.2.0
152
+ version: 2.3.1
153
153
  - !ruby/object:Gem::Dependency
154
- name: parallel
154
+ name: differ
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '1.14'
159
+ version: 0.1.2
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '1.14'
166
+ version: 0.1.2
167
167
  - !ruby/object:Gem::Dependency
168
- name: listen
168
+ name: parallel
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '3.4'
173
+ version: '1.14'
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '3.4'
180
+ version: '1.14'
181
181
  - !ruby/object:Gem::Dependency
182
- name: language_server-protocol
182
+ name: listen
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: 3.17.0.3
187
+ version: '3.4'
188
188
  type: :runtime
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: 3.17.0.3
194
+ version: '3.4'
195
195
  - !ruby/object:Gem::Dependency
196
- name: gstreamer
196
+ name: language_server-protocol
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 4.2.0
201
+ version: 3.17.0.3
202
202
  type: :runtime
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: 4.2.0
208
+ version: 3.17.0.3
209
209
  description: Vi/Vim -inspired experimental GUI-oriented text editor written with Ruby
210
210
  and GTK.
211
211
  email: