vimamsa 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/custom_example.rb +47 -0
- data/demo.txt +25 -0
- data/lang/hyperplaintext.lang +9 -25
- data/lib/vimamsa/ack.rb +90 -7
- data/lib/vimamsa/actions.rb +21 -2
- data/lib/vimamsa/buffer.rb +53 -49
- data/lib/vimamsa/debug.rb +1 -1
- data/lib/vimamsa/easy_jump.rb +13 -18
- data/lib/vimamsa/editor.rb +57 -54
- data/lib/vimamsa/encrypt.rb +1 -1
- data/lib/vimamsa/file_finder.rb +1 -3
- data/lib/vimamsa/gui.rb +76 -73
- data/lib/vimamsa/gui_image.rb +43 -0
- data/lib/vimamsa/gui_menu.rb +0 -1
- data/lib/vimamsa/gui_select_window.rb +3 -0
- data/lib/vimamsa/gui_sourceview.rb +41 -14
- data/lib/vimamsa/hyper_plain_text.rb +31 -10
- data/lib/vimamsa/key_actions.rb +37 -16
- data/lib/vimamsa/key_binding_tree.rb +37 -113
- data/lib/vimamsa/key_bindings_vimlike.rb +25 -23
- data/lib/vimamsa/rbvma.rb +12 -9
- data/lib/vimamsa/search_replace.rb +8 -4
- data/lib/vimamsa/text_transforms.rb +2 -0
- data/lib/vimamsa/util.rb +34 -0
- data/lib/vimamsa/version.rb +1 -1
- data/lib/vimamsa.rb +5 -0
- data/sheep.jpg +0 -0
- data/styles/dark.xml +1 -0
- data/styles/molokai_edit.xml +1 -1
- metadata +9 -5
data/lib/vimamsa/editor.rb
CHANGED
@@ -70,13 +70,6 @@ class Editor
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def start
|
73
|
-
# $highlight = {}
|
74
|
-
|
75
|
-
# GLib::Idle.add
|
76
|
-
# Ripl.start :binding => binding
|
77
|
-
# GLib::Idle.add(proc{ debug "IDLEFUNC"})
|
78
|
-
# GLib::Idle.add(proc { idle_func })
|
79
|
-
|
80
73
|
@gui = $vmag #TODO
|
81
74
|
|
82
75
|
$hook = Hook.new
|
@@ -95,13 +88,15 @@ class Editor
|
|
95
88
|
# build_key_bindings_tree
|
96
89
|
@kbd = KeyBindingTree.new()
|
97
90
|
$kbd = @kbd
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
91
|
+
@kbd.add_mode("C", :command)
|
92
|
+
@kbd.add_mode("I", :insert)
|
93
|
+
@kbd.add_mode("V", :visual)
|
94
|
+
@kbd.add_mode("M", :minibuffer)
|
95
|
+
@kbd.add_mode("R", :readchar)
|
96
|
+
@kbd.add_mode("B", :browse)
|
97
|
+
@kbd.set_default_mode(:command)
|
98
|
+
@kbd.set_mode(:command)
|
99
|
+
@kbd.show_state_trail
|
105
100
|
require "vimamsa/key_bindings_vimlike"
|
106
101
|
sleep(0.03)
|
107
102
|
|
@@ -118,6 +113,14 @@ class Editor
|
|
118
113
|
end
|
119
114
|
listener.start
|
120
115
|
|
116
|
+
custom_fn = File.expand_path("~/.vimamsa/custom.rb")
|
117
|
+
if !File.exist?(custom_fn)
|
118
|
+
example_custom = IO.read(ppath("custom_example.rb"))
|
119
|
+
IO.write(custom_fn, example_custom)
|
120
|
+
end
|
121
|
+
|
122
|
+
mkdir_if_not_exists("~/.vimamsa/custom.rb")
|
123
|
+
|
121
124
|
$cnf[:theme] = "Twilight_edit"
|
122
125
|
$cnf[:syntax_highlight] = true
|
123
126
|
settings_path = get_dot_path("settings.rb")
|
@@ -132,6 +135,9 @@ class Editor
|
|
132
135
|
|
133
136
|
dotfile = read_file("", "~/.vimamsarc")
|
134
137
|
eval(dotfile) if dotfile
|
138
|
+
|
139
|
+
custom_script = read_file("", custom_fn)
|
140
|
+
eval(custom_script) if custom_script
|
135
141
|
|
136
142
|
# build_options
|
137
143
|
|
@@ -141,6 +147,8 @@ class Editor
|
|
141
147
|
if File.exist?(fname_)
|
142
148
|
fname = fname_
|
143
149
|
end
|
150
|
+
else
|
151
|
+
fname = ppath("demo.txt")
|
144
152
|
end
|
145
153
|
fname = ARGV[0] if ARGV.size >= 1 and File.file?(File.expand_path(ARGV[0]))
|
146
154
|
# vma.add_content_search_path(Dir.pwd)
|
@@ -189,11 +197,10 @@ class Editor
|
|
189
197
|
def buf()
|
190
198
|
return $buffer
|
191
199
|
end
|
192
|
-
|
200
|
+
|
193
201
|
def buffers()
|
194
202
|
return $buffers
|
195
203
|
end
|
196
|
-
|
197
204
|
|
198
205
|
def marshal_save(varname, vardata)
|
199
206
|
save_var_to_file(varname, Marshal.dump(vardata))
|
@@ -256,13 +263,18 @@ class Editor
|
|
256
263
|
@converters[converter_id].apply(txt)
|
257
264
|
end
|
258
265
|
|
266
|
+
# Used only by ack module at the moment
|
259
267
|
def get_content_search_paths()
|
260
268
|
r = @file_content_search_paths.clone
|
261
269
|
p = find_project_dir_of_cur_buffer()
|
270
|
+
if p.nil?
|
271
|
+
p = buf.dirname # Search dir of current file by default
|
272
|
+
end
|
262
273
|
|
263
274
|
if p and !@file_content_search_paths.include?(p)
|
264
275
|
r.insert(0, p)
|
265
276
|
end
|
277
|
+
|
266
278
|
return r
|
267
279
|
end
|
268
280
|
|
@@ -315,7 +327,7 @@ def set_clipboard(s)
|
|
315
327
|
debug s.inspect
|
316
328
|
debug [s, s.class, s.size]
|
317
329
|
log_error("s.class != String or s.size == 0")
|
318
|
-
Ripl.start :binding => binding
|
330
|
+
# Ripl.start :binding => binding
|
319
331
|
return
|
320
332
|
end
|
321
333
|
$clipboard << s
|
@@ -370,10 +382,17 @@ end
|
|
370
382
|
|
371
383
|
def show_key_bindings()
|
372
384
|
kbd_s = "❙Key bindings❙\n"
|
373
|
-
kbd_s << "
|
385
|
+
kbd_s << "\n⦁[Mode] keys : action⦁\n"
|
386
|
+
|
387
|
+
kbd_s << "[B]=Browse, [C]=Command, [I]=Insert, [V]=Visual\n"
|
388
|
+
kbd_s << "key!: Press key once, release before pressing any other keys\n"
|
389
|
+
|
390
|
+
kbd_s << "===============================================\n"
|
374
391
|
kbd_s << $kbd.to_s
|
375
|
-
kbd_s << "
|
376
|
-
create_new_file(nil, kbd_s)
|
392
|
+
kbd_s << "===============================================\n"
|
393
|
+
b = create_new_file(nil, kbd_s)
|
394
|
+
gui_set_file_lang(b.id, "hyperplaintext")
|
395
|
+
#
|
377
396
|
end
|
378
397
|
|
379
398
|
def diff_buffer()
|
@@ -451,6 +470,7 @@ end
|
|
451
470
|
GUESS_ENCODING_ORDER = [
|
452
471
|
Encoding::US_ASCII,
|
453
472
|
Encoding::UTF_8,
|
473
|
+
Encoding::ISO_8859_1,
|
454
474
|
Encoding::Shift_JIS,
|
455
475
|
Encoding::EUC_JP,
|
456
476
|
Encoding::EucJP_ms,
|
@@ -513,11 +533,23 @@ def load_buffer(fname)
|
|
513
533
|
#$buffer_history << $buffers.size - 1
|
514
534
|
end
|
515
535
|
|
516
|
-
def jump_to_file(filename, linenum =
|
536
|
+
def jump_to_file(filename, linenum = nil, charn = nil)
|
517
537
|
open_new_file(filename)
|
518
|
-
|
519
|
-
|
538
|
+
|
539
|
+
# Link to character position
|
540
|
+
if !charn.nil?
|
541
|
+
if charn == "c"
|
542
|
+
buf.jump_to_pos(linenum)
|
543
|
+
center_on_current_line
|
544
|
+
return
|
545
|
+
end
|
546
|
+
end
|
547
|
+
|
548
|
+
# Link to line
|
549
|
+
if !linenum.nil?
|
550
|
+
buf.jump_to_line(linenum)
|
520
551
|
center_on_current_line
|
552
|
+
return
|
521
553
|
end
|
522
554
|
end
|
523
555
|
|
@@ -547,40 +579,11 @@ def scan_word_start_marks(search_str)
|
|
547
579
|
return wsmarks
|
548
580
|
end
|
549
581
|
|
550
|
-
def draw_text(str, x, y)
|
551
|
-
vma.paint_stack << [4, x, y, str]
|
552
|
-
end
|
553
|
-
|
554
582
|
def hook_draw()
|
555
583
|
# TODO: as hook.register
|
556
584
|
# easy_jump_draw()
|
557
585
|
end
|
558
586
|
|
559
|
-
#TODO: delete this
|
560
|
-
def render_buffer(buffer = 0, reset = 0)
|
561
|
-
tmpbuf = $buffer.to_s
|
562
|
-
debug "pos:#{$buffer.pos} L:#{$buffer.lpos} C:#{$buffer.cpos}"
|
563
|
-
pos = $buffer.pos
|
564
|
-
selection_start = $buffer.selection_start
|
565
|
-
|
566
|
-
if $buffer.need_redraw?
|
567
|
-
reset = 1
|
568
|
-
end
|
569
|
-
t1 = Time.now
|
570
|
-
hook_draw()
|
571
|
-
|
572
|
-
if $buffer.need_redraw?
|
573
|
-
hpt_scan_images() if $debug #experimental
|
574
|
-
end
|
575
|
-
|
576
|
-
$buffer.highlight
|
577
|
-
if Time.now - t1 > 1 / 100.0
|
578
|
-
debug "SLOW render"
|
579
|
-
debug "Render time: #{Time.now - t1}"
|
580
|
-
end
|
581
|
-
$buffer.set_redrawed if reset == 1
|
582
|
-
end
|
583
|
-
|
584
587
|
def get_dot_path(sfx)
|
585
588
|
dot_dir = File.expand_path("~/.vimamsa")
|
586
589
|
Dir.mkdir(dot_dir) unless File.exist?(dot_dir)
|
@@ -591,10 +594,10 @@ end
|
|
591
594
|
def get_file_line_pointer(s)
|
592
595
|
#"/code/vimamsa/lib/vimamsa/buffer_select.rb:31:def"
|
593
596
|
# m = s.match(/(~[a-z]*)?\/.*\//)
|
594
|
-
m = s.match(/((~[a-z]*)?\/.*\/\S+):(\d+)/)
|
597
|
+
m = s.match(/((~[a-z]*)?\/.*\/\S+):(c?)(\d+)/)
|
595
598
|
if m != nil
|
596
599
|
if File.exist?(File.expand_path(m[1]))
|
597
|
-
return [m[1], m[
|
600
|
+
return [m[1], m[4].to_i, m[3]]
|
598
601
|
end
|
599
602
|
end
|
600
603
|
return nil
|
data/lib/vimamsa/encrypt.rb
CHANGED
@@ -38,7 +38,7 @@ end
|
|
38
38
|
|
39
39
|
def encrypt_cur_buffer()
|
40
40
|
callback = proc{|x|encrypt_cur_buffer_callback(x)}
|
41
|
-
gui_one_input_action("Encrypt", "Password:", "Encrypt", callback)
|
41
|
+
gui_one_input_action("Encrypt", "Password:", "Encrypt", callback,{:hide=>true})
|
42
42
|
end
|
43
43
|
|
44
44
|
def encrypt_cur_buffer_callback(password,b=nil)
|
data/lib/vimamsa/file_finder.rb
CHANGED
@@ -41,9 +41,7 @@ def recursively_find_files()
|
|
41
41
|
for d in $search_dirs
|
42
42
|
debug("FIND FILEs IN #{d}")
|
43
43
|
dlist = dlist + Dir.glob("#{d}/**/*").select { |e| File.file?(e) and $find_extensions.include?(File.extname(e)) }
|
44
|
-
|
45
|
-
end
|
46
|
-
#$dir_list = Dir.glob('./**/*').select { |e| File.file? e }
|
44
|
+
debug("FIND FILEs IN #{d} END") end #$dir_list = Dir.glob('./**/*').select { |e| File.file? e }
|
47
45
|
debug("END find files2")
|
48
46
|
$dir_list = dlist
|
49
47
|
debug("END find files")
|
data/lib/vimamsa/gui.rb
CHANGED
@@ -131,32 +131,28 @@ def set_system_clipboard(arg)
|
|
131
131
|
clipboard.text = arg
|
132
132
|
end
|
133
133
|
|
134
|
-
def gui_create_buffer(id)
|
134
|
+
def gui_create_buffer(id, bufo)
|
135
135
|
debug "gui_create_buffer(#{id})"
|
136
136
|
buf1 = GtkSource::Buffer.new()
|
137
|
-
view = VSourceView.new()
|
138
|
-
|
139
|
-
view.set_highlight_current_line(true)
|
140
|
-
view.set_show_line_numbers(true)
|
141
|
-
view.set_buffer(buf1)
|
137
|
+
view = VSourceView.new(nil, bufo)
|
142
138
|
|
143
139
|
ssm = GtkSource::StyleSchemeManager.new
|
144
140
|
ssm.set_search_path(ssm.search_path << ppath("styles/"))
|
145
|
-
# sty = ssm.get_scheme("dark")
|
146
141
|
sty = ssm.get_scheme("molokai_edit")
|
147
|
-
# debug ssm.scheme_ids
|
148
142
|
|
149
|
-
|
150
|
-
|
143
|
+
buf1.highlight_matching_brackets = true
|
144
|
+
buf1.style_scheme = sty
|
145
|
+
|
146
|
+
view.set_highlight_current_line(true)
|
147
|
+
view.set_show_line_numbers(true)
|
148
|
+
view.set_buffer(buf1)
|
151
149
|
|
152
150
|
provider = Gtk::CssProvider.new
|
153
151
|
provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
|
154
|
-
# provider.load(data: "textview { font-family: Arial; font-size: 12pt; }")
|
155
152
|
view.style_context.add_provider(provider)
|
156
153
|
view.wrap_mode = :char
|
157
154
|
view.set_tab_width(conf(:tab_width))
|
158
155
|
|
159
|
-
|
160
156
|
$vmag.buffers[id] = view
|
161
157
|
end
|
162
158
|
|
@@ -178,20 +174,13 @@ end
|
|
178
174
|
def gui_select_window_close(arg = nil)
|
179
175
|
end
|
180
176
|
|
181
|
-
# def set_window_title(str)
|
182
|
-
# unimplemented
|
183
|
-
# end
|
184
|
-
|
185
177
|
def gui_set_buffer_contents(id, txt)
|
186
|
-
# $vbuf.set_text(txt)
|
187
178
|
debug "gui_set_buffer_contents(#{id}, txt)"
|
188
|
-
|
189
|
-
$vmag.buffers[id].buffer.set_text(txt)
|
179
|
+
vma.gui.buffers[id].buffer.set_text(txt)
|
190
180
|
end
|
191
181
|
|
192
182
|
def gui_set_cursor_pos(id, pos)
|
193
|
-
|
194
|
-
# Ripl.start :binding => binding
|
183
|
+
vma.buf.view.set_cursor_pos(pos)
|
195
184
|
end
|
196
185
|
|
197
186
|
def gui_set_current_buffer(id)
|
@@ -207,17 +196,9 @@ def gui_set_current_buffer(id)
|
|
207
196
|
$vmag.sw.add(view)
|
208
197
|
|
209
198
|
view.grab_focus
|
210
|
-
#view.set_focus(10)
|
211
199
|
view.set_cursor_visible(true)
|
212
|
-
#view.move_cursor(1, 1, false)
|
213
200
|
view.place_cursor_onscreen
|
214
201
|
|
215
|
-
#TODO:
|
216
|
-
# itr = view.buffer.get_iter_at(:offset => 0)
|
217
|
-
# view.buffer.place_cursor(itr)
|
218
|
-
|
219
|
-
# wtitle = ""
|
220
|
-
# wtitle = buf.fname if !buf.fname.nil?
|
221
202
|
$vmag.sw.show_all
|
222
203
|
end
|
223
204
|
|
@@ -227,7 +208,7 @@ def gui_set_window_title(wtitle, subtitle = "")
|
|
227
208
|
end
|
228
209
|
|
229
210
|
class VMAgui
|
230
|
-
attr_accessor :buffers, :sw, :view, :buf1, :window
|
211
|
+
attr_accessor :buffers, :sw, :view, :buf1, :window, :delex, :statnfo
|
231
212
|
|
232
213
|
VERSION = "1.0"
|
233
214
|
|
@@ -243,6 +224,22 @@ class VMAgui
|
|
243
224
|
@buffers = {}
|
244
225
|
@view = nil
|
245
226
|
@buf1 = nil
|
227
|
+
@img_resizer_active = false
|
228
|
+
imgproc = proc {
|
229
|
+
GLib::Idle.add(proc {
|
230
|
+
if !buf.images.empty?
|
231
|
+
vma.gui.scale_all_images
|
232
|
+
|
233
|
+
w = Gtk::Window.new(:toplevel)
|
234
|
+
w.set_default_size(1, 1)
|
235
|
+
w.show_all
|
236
|
+
Thread.new { sleep 0.1; w.destroy }
|
237
|
+
end
|
238
|
+
|
239
|
+
false
|
240
|
+
})
|
241
|
+
}
|
242
|
+
@delex = DelayExecutioner.new(1, imgproc)
|
246
243
|
end
|
247
244
|
|
248
245
|
def run
|
@@ -251,6 +248,38 @@ class VMAgui
|
|
251
248
|
Gtk.main
|
252
249
|
end
|
253
250
|
|
251
|
+
def delay_scale()
|
252
|
+
if Time.now - @dtime > 2.0
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def scale_all_images
|
257
|
+
# puts "scale all"
|
258
|
+
for img in buf.images
|
259
|
+
if !img[:obj].destroyed?
|
260
|
+
img[:obj].scale_image
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def handle_image_resize
|
266
|
+
return if @img_resizer_active == true
|
267
|
+
@dtime = Time.now
|
268
|
+
|
269
|
+
$gcrw = 0
|
270
|
+
vma.gui.window.signal_connect "configure-event" do |widget, cr|
|
271
|
+
# Ripl.start :binding => binding
|
272
|
+
|
273
|
+
if $gcrw != cr.width
|
274
|
+
@delex.run
|
275
|
+
end
|
276
|
+
$gcrw = cr.width
|
277
|
+
false
|
278
|
+
end
|
279
|
+
|
280
|
+
@img_resizer_active = true
|
281
|
+
end
|
282
|
+
|
254
283
|
def start_overlay_draw()
|
255
284
|
@da = Gtk::Fixed.new
|
256
285
|
@overlay.add_overlay(@da)
|
@@ -267,7 +296,7 @@ class VMAgui
|
|
267
296
|
# debug "overlay_draw_text #{[x,y]}"
|
268
297
|
(x, y) = @view.pos_to_coord(textpos)
|
269
298
|
# debug "overlay_draw_text #{[x,y]}"
|
270
|
-
label = Gtk::Label.new("<span background='#
|
299
|
+
label = Gtk::Label.new("<span background='#000000ff' foreground='#ff0000' weight='ultrabold'>#{text}</span>")
|
271
300
|
label.use_markup = true
|
272
301
|
@da.put(label, x, y)
|
273
302
|
end
|
@@ -371,7 +400,7 @@ class VMAgui
|
|
371
400
|
overlay = Gtk::Overlay.new
|
372
401
|
overlay.add(sw)
|
373
402
|
# @vpaned.pack2(overlay, :resize => false)
|
374
|
-
@vbox.attach(overlay, 0, 2,
|
403
|
+
@vbox.attach(overlay, 0, 2, 2, 1)
|
375
404
|
# overlay.set_size_request(-1, 50)
|
376
405
|
# $ovrl = overlay
|
377
406
|
# $ovrl.set_size_request(-1, 30)
|
@@ -385,7 +414,7 @@ class VMAgui
|
|
385
414
|
ssm = GtkSource::StyleSchemeManager.new
|
386
415
|
ssm.set_search_path(ssm.search_path << ppath("styles/"))
|
387
416
|
sty = ssm.get_scheme("molokai_edit")
|
388
|
-
view.buffer.highlight_matching_brackets = false
|
417
|
+
view.buffer.highlight_matching_brackets = false #TODO
|
389
418
|
view.buffer.style_scheme = sty
|
390
419
|
provider = Gtk::CssProvider.new
|
391
420
|
# provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
|
@@ -406,7 +435,6 @@ class VMAgui
|
|
406
435
|
header.title = ""
|
407
436
|
header.has_subtitle = true
|
408
437
|
header.subtitle = ""
|
409
|
-
# Ripl.start :binding => binding
|
410
438
|
|
411
439
|
# icon = Gio::ThemedIcon.new("mail-send-receive-symbolic")
|
412
440
|
# icon = Gio::ThemedIcon.new("document-open-symbolic")
|
@@ -482,32 +510,7 @@ class VMAgui
|
|
482
510
|
|
483
511
|
header.pack_start(box)
|
484
512
|
@window.titlebar = header
|
485
|
-
@window.add(Gtk::TextView.new)
|
486
|
-
end
|
487
|
-
|
488
|
-
def create_menu_item(label, depth)
|
489
|
-
menuitem = Gtk::MenuItem.new(:label => label)
|
490
|
-
menuitem.submenu = create_menu(depth)
|
491
|
-
@menubar.append(menuitem)
|
492
|
-
end
|
493
|
-
|
494
|
-
def create_menu(depth)
|
495
|
-
return nil if depth < 1
|
496
|
-
|
497
|
-
menu = Gtk::Menu.new
|
498
|
-
last_item = nil
|
499
|
-
(0..5).each do |i|
|
500
|
-
j = i + 1
|
501
|
-
label = "item #{depth} - #{j}"
|
502
|
-
menu_item = Gtk::RadioMenuItem.new(nil, label)
|
503
|
-
menu_item.join_group(last_item) if last_item
|
504
|
-
last_item = menu_item
|
505
|
-
menu.append(menu_item)
|
506
|
-
menu_item.sensitive = false if i == 3
|
507
|
-
menu_item.submenu = create_menu(depth - 1)
|
508
|
-
end
|
509
|
-
|
510
|
-
menu
|
513
|
+
# @window.add(Gtk::TextView.new)
|
511
514
|
end
|
512
515
|
|
513
516
|
def init_window
|
@@ -515,10 +518,8 @@ class VMAgui
|
|
515
518
|
@window.set_default_size(650, 850)
|
516
519
|
@window.title = "Multiple Views"
|
517
520
|
@window.show_all
|
518
|
-
# vpaned = Gtk::Paned.new(:horizontal)
|
519
521
|
@vpaned = Gtk::Paned.new(:vertical)
|
520
|
-
|
521
|
-
# @vbox = Gtk::Box.new(:vertical, 0)
|
522
|
+
|
522
523
|
@vbox = Gtk::Grid.new()
|
523
524
|
@window.add(@vbox)
|
524
525
|
|
@@ -530,20 +531,21 @@ class VMAgui
|
|
530
531
|
@overlay = Gtk::Overlay.new
|
531
532
|
@overlay.add(@sw)
|
532
533
|
|
533
|
-
# @vpaned.pack1(@overlay, :resize => true)
|
534
|
-
# @vpaned.pack2(@menubar, :resize => false)
|
535
|
-
# @vbox.add(@menubar, :resize => false)
|
536
|
-
|
537
534
|
init_header_bar
|
538
535
|
|
539
|
-
|
536
|
+
@statnfo = Gtk::Label.new
|
537
|
+
provider = Gtk::CssProvider.new
|
538
|
+
provider.load(data: "textview { background-color:#353535; font-family: Monospace; font-size: 10pt; margin-top:4px;}")
|
539
|
+
@statnfo.style_context.add_provider(provider)
|
540
540
|
|
541
|
-
#
|
542
|
-
#
|
543
|
-
|
544
|
-
|
541
|
+
# Deprecated, but found no other way to do it. css doesn't work.
|
542
|
+
# TODO: should select color automatically from theme
|
543
|
+
@statnfo.override_background_color(Gtk::StateFlags::NORMAL, "#353535")
|
544
|
+
|
545
|
+
# column, row, width height
|
545
546
|
@vbox.attach(@menubar, 0, 0, 1, 1)
|
546
|
-
@vbox.attach(@
|
547
|
+
@vbox.attach(@statnfo, 1, 0, 1, 1)
|
548
|
+
@vbox.attach(@overlay, 0, 1, 2, 1)
|
547
549
|
@overlay.vexpand = true
|
548
550
|
@overlay.hexpand = true
|
549
551
|
|
@@ -555,6 +557,7 @@ class VMAgui
|
|
555
557
|
@window.show_all
|
556
558
|
vma.start
|
557
559
|
Vimamsa::Menu.new(@menubar)
|
560
|
+
|
558
561
|
@window.show_all
|
559
562
|
end
|
560
563
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
# Following this example:
|
3
|
+
# https://gabmus.org/posts/create_an_auto-resizing_image_widget_with_gtk3_and_python/
|
4
|
+
class ResizableImage < Gtk::DrawingArea
|
5
|
+
attr_accessor :fpath, :pixbuf, :oldimg, :draw_image, :view
|
6
|
+
|
7
|
+
def initialize(fpath, view)
|
8
|
+
@fpath = fpath
|
9
|
+
@pixbuf = GdkPixbuf::Pixbuf.new(:file => fpath)
|
10
|
+
@oldimg = @pixbuf
|
11
|
+
@draw_image = @pixbuf
|
12
|
+
@view = view
|
13
|
+
|
14
|
+
super()
|
15
|
+
end
|
16
|
+
|
17
|
+
# Scale to fit window width
|
18
|
+
def scale_image()
|
19
|
+
pb = @pixbuf
|
20
|
+
view = @view
|
21
|
+
imglimit = view.visible_rect.width - 10
|
22
|
+
|
23
|
+
if @oldimg.width > imglimit or @oldimg.width < imglimit - 10
|
24
|
+
nwidth = imglimit
|
25
|
+
nwidth = pb.width if pb.width < imglimit
|
26
|
+
nheight = (pb.height * (nwidth.to_f / pb.width)).to_i
|
27
|
+
pb = pb.scale_simple(nwidth, nheight, GdkPixbuf::InterpType::HYPER)
|
28
|
+
else
|
29
|
+
pb = @oldimg
|
30
|
+
end
|
31
|
+
@draw_image = pb
|
32
|
+
@oldimg = pb
|
33
|
+
self.set_size_request(pb.width, pb.height)
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
def do_draw(da, cr)
|
38
|
+
# puts @fpath
|
39
|
+
cr.set_source_pixbuf(@draw_image, 0, 0)
|
40
|
+
cr.paint
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
data/lib/vimamsa/gui_menu.rb
CHANGED
@@ -45,7 +45,6 @@ module Vimamsa
|
|
45
45
|
add_to_menu "Actions.experimental.DisableDebug", { :label => "Disable debug", :action => :disable_debug }
|
46
46
|
add_to_menu "Actions.experimental.ShowImages", { :label => "Show images ⟦img:path⟧", :action => :show_images }
|
47
47
|
|
48
|
-
|
49
48
|
add_to_menu "Actions.EncryptFile", { :label => "Encrypt file", :action => :encrypt_file }
|
50
49
|
add_to_menu "Help.KeyBindings", { :label => "Show key bindings", :action => :show_key_bindings }
|
51
50
|
|
@@ -1,6 +1,9 @@
|
|
1
1
|
def gui_select_update_window(item_list, jump_keys, select_callback, update_callback, opt={})
|
2
2
|
$selup = SelectUpdateWindow.new(nil, item_list, jump_keys, select_callback, update_callback, opt)
|
3
3
|
$selup.run
|
4
|
+
# opt fields:
|
5
|
+
# :title
|
6
|
+
# :desc
|
4
7
|
end
|
5
8
|
|
6
9
|
class SelectUpdateWindow
|
@@ -1,11 +1,30 @@
|
|
1
1
|
|
2
|
+
|
3
|
+
# class VSourceView < Gtk::TextView
|
2
4
|
class VSourceView < GtkSource::View
|
3
|
-
|
5
|
+
attr_accessor :bufo
|
6
|
+
# :highlight_matching_brackets
|
7
|
+
|
8
|
+
# def set_highlight_current_line(vbool)
|
9
|
+
# end
|
10
|
+
|
11
|
+
# def set_show_line_numbers(vbool)
|
12
|
+
# end
|
13
|
+
|
14
|
+
# def highlight_matching_brackets=(vbool)
|
15
|
+
# end
|
16
|
+
|
17
|
+
|
18
|
+
def initialize(title = nil,bufo=nil)
|
4
19
|
# super(:toplevel)
|
20
|
+
@highlight_matching_brackets = true
|
5
21
|
super()
|
22
|
+
@bufo = bufo #object of Buffer class buffer.rb
|
6
23
|
debug "vsource init"
|
7
24
|
@last_keyval = nil
|
8
25
|
@last_event = [nil, nil]
|
26
|
+
self.drag_dest_add_image_targets
|
27
|
+
self.drag_dest_add_uri_targets
|
9
28
|
|
10
29
|
signal_connect "button-press-event" do |_widget, event|
|
11
30
|
if event.button == Gdk::BUTTON_PRIMARY
|
@@ -19,6 +38,20 @@ class VSourceView < GtkSource::View
|
|
19
38
|
end
|
20
39
|
end
|
21
40
|
|
41
|
+
signal_connect("drag-data-received") do |widget, event, x, y, data, info, time|
|
42
|
+
puts "drag-data-received"
|
43
|
+
puts
|
44
|
+
if data.uris.size >= 1
|
45
|
+
imgpath = CGI.unescape(data.uris[0])
|
46
|
+
m = imgpath.match(/^file:\/\/(.*)/)
|
47
|
+
if m
|
48
|
+
fp = m[1]
|
49
|
+
handle_drag_and_drop(fp)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
true
|
53
|
+
end
|
54
|
+
|
22
55
|
signal_connect("key_press_event") do |widget, event|
|
23
56
|
handle_key_event(event, :key_press_event)
|
24
57
|
true
|
@@ -141,7 +174,7 @@ class VSourceView < GtkSource::View
|
|
141
174
|
|
142
175
|
def handle_deltas()
|
143
176
|
any_change = false
|
144
|
-
while d =
|
177
|
+
while d = @bufo.deltas.shift
|
145
178
|
any_change = true
|
146
179
|
pos = d[0]
|
147
180
|
op = d[1]
|
@@ -157,7 +190,7 @@ class VSourceView < GtkSource::View
|
|
157
190
|
end
|
158
191
|
end
|
159
192
|
if any_change
|
160
|
-
gui_set_cursor_pos(
|
193
|
+
gui_set_cursor_pos(@bufo.id, @bufo.pos) #TODO: only when necessary
|
161
194
|
end
|
162
195
|
|
163
196
|
# sanity_check #TODO
|
@@ -269,26 +302,20 @@ class VSourceView < GtkSource::View
|
|
269
302
|
|
270
303
|
def draw_cursor
|
271
304
|
if is_command_mode
|
272
|
-
itr = buffer.get_iter_at(:offset =>
|
273
|
-
itr2 = buffer.get_iter_at(:offset =>
|
305
|
+
itr = buffer.get_iter_at(:offset => @bufo.pos)
|
306
|
+
itr2 = buffer.get_iter_at(:offset => @bufo.pos + 1)
|
274
307
|
$view.buffer.select_range(itr, itr2)
|
275
|
-
elsif
|
308
|
+
elsif @bufo.visual_mode?
|
276
309
|
debug "VISUAL MODE"
|
277
|
-
(_start, _end) =
|
310
|
+
(_start, _end) = @bufo.get_visual_mode_range2
|
278
311
|
debug "#{_start}, #{_end}"
|
279
312
|
itr = buffer.get_iter_at(:offset => _start)
|
280
313
|
itr2 = buffer.get_iter_at(:offset => _end + 1)
|
281
314
|
$view.buffer.select_range(itr, itr2)
|
282
315
|
else # Insert mode
|
283
|
-
itr = buffer.get_iter_at(:offset =>
|
316
|
+
itr = buffer.get_iter_at(:offset => @bufo.pos)
|
284
317
|
$view.buffer.select_range(itr, itr)
|
285
318
|
debug "INSERT MODE"
|
286
319
|
end
|
287
320
|
end
|
288
|
-
|
289
|
-
# def quit
|
290
|
-
# destroy
|
291
|
-
# true
|
292
|
-
# end
|
293
321
|
end
|
294
|
-
|