vimamsa 0.1.7 → 0.1.10
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 +4 -4
- data/README.md +9 -4
- data/custom_example.rb +47 -0
- data/demo.txt +25 -0
- data/lang/hyperplaintext.lang +9 -25
- data/lib/vimamsa/ack.rb +55 -9
- data/lib/vimamsa/actions.rb +27 -8
- data/lib/vimamsa/buffer.rb +120 -82
- data/lib/vimamsa/buffer_list.rb +48 -30
- data/lib/vimamsa/buffer_manager.rb +83 -0
- data/lib/vimamsa/conf.rb +21 -0
- data/lib/vimamsa/debug.rb +11 -10
- data/lib/vimamsa/easy_jump.rb +15 -20
- data/lib/vimamsa/editor.rb +100 -85
- data/lib/vimamsa/encrypt.rb +3 -3
- data/lib/vimamsa/file_finder.rb +6 -9
- data/lib/vimamsa/file_history.rb +3 -3
- data/lib/vimamsa/file_manager.rb +16 -13
- data/lib/vimamsa/gui.rb +95 -90
- data/lib/vimamsa/gui_image.rb +43 -0
- data/lib/vimamsa/gui_menu.rb +11 -2
- data/lib/vimamsa/gui_select_window.rb +16 -13
- data/lib/vimamsa/gui_sourceview.rb +66 -38
- data/lib/vimamsa/hyper_plain_text.rb +40 -21
- data/lib/vimamsa/key_actions.rb +38 -13
- data/lib/vimamsa/key_binding_tree.rb +50 -126
- data/lib/vimamsa/key_bindings_vimlike.rb +26 -24
- data/lib/vimamsa/macro.rb +5 -5
- data/lib/vimamsa/main.rb +3 -3
- data/lib/vimamsa/rbvma.rb +22 -18
- data/lib/vimamsa/search.rb +2 -2
- data/lib/vimamsa/search_replace.rb +25 -22
- data/lib/vimamsa/text_transforms.rb +3 -1
- 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
- data/vimamsa.gemspec +2 -2
- metadata +16 -11
- data/lib/vimamsa/gui_gtk_sourceview.rb +0 -294
@@ -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
|
data/lib/vimamsa/conf.rb
ADDED
@@ -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
|
-
|
25
|
-
|
24
|
+
|
25
|
+
def log_message(message,vlevel=1)
|
26
|
+
puts message if conf("log.verbose") >= vlevel
|
26
27
|
$log_messages << message
|
27
28
|
end
|
28
29
|
|
@@ -80,19 +81,19 @@ end
|
|
80
81
|
|
81
82
|
def run_test(test_id)
|
82
83
|
target_results = read_file("", "tests/test_#{test_id}_output.txt")
|
83
|
-
old_buffer =
|
84
|
-
|
84
|
+
old_buffer = vma.buf
|
85
|
+
vma.buf = Buffer.new("", "")
|
85
86
|
load "tests/test_#{test_id}.rb"
|
86
|
-
test_ok =
|
87
|
+
test_ok = vma.buf.to_s.strip == target_results.strip
|
87
88
|
puts "##################"
|
88
89
|
puts target_results
|
89
90
|
puts "##################"
|
90
|
-
puts
|
91
|
+
puts vma.buf.to_s
|
91
92
|
puts "##################"
|
92
93
|
puts "TEST OK" if test_ok
|
93
94
|
puts "TEST FAILED" if !test_ok
|
94
95
|
puts "##################"
|
95
|
-
|
96
|
+
vma.buf = old_buffer
|
96
97
|
end
|
97
98
|
|
98
99
|
#TODO: remove?
|
@@ -120,7 +121,7 @@ def run_random_jump_test__tmpl(test_time = 60 * 60 * 10)
|
|
120
121
|
# puts buf.current_line()
|
121
122
|
# puts "======================"
|
122
123
|
|
123
|
-
render_buffer(
|
124
|
+
render_buffer(vma.buf)
|
124
125
|
|
125
126
|
gui_sleep(rand() / 2)
|
126
127
|
if rand() < (1 / 40.0)
|
@@ -129,9 +130,9 @@ def run_random_jump_test__tmpl(test_time = 60 * 60 * 10)
|
|
129
130
|
|
130
131
|
gui_trigger_event
|
131
132
|
buf.insert_txt("X") if rand() > 0.25
|
132
|
-
render_buffer(
|
133
|
+
render_buffer(vma.buf)
|
133
134
|
|
134
|
-
|
135
|
+
vma.buffers.set_current_buffer(rand(vma.buffers.size)) if rand > 0.25
|
135
136
|
step += 1
|
136
137
|
end
|
137
138
|
end
|
data/lib/vimamsa/easy_jump.rb
CHANGED
@@ -9,7 +9,6 @@ class EasyJump
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def initialize()
|
12
|
-
# message "EASY JUMP"
|
13
12
|
visible_range = get_visible_area()
|
14
13
|
visible_text = buf[visible_range[0]..visible_range[1]]
|
15
14
|
wsmarks = scan_word_start_marks(visible_text)
|
@@ -17,12 +16,24 @@ class EasyJump
|
|
17
16
|
lsh = Hash[line_starts.collect { |x| [x, true] }]
|
18
17
|
wsmh = Hash[wsmarks.collect { |x| [x, true] }]
|
19
18
|
|
19
|
+
# Exclude work starts that are too close to start of line
|
20
20
|
wsmarks.select! { |x|
|
21
21
|
r = true
|
22
22
|
r = false if lsh[x] or lsh[x - 1] or lsh[x - 2]
|
23
23
|
r
|
24
24
|
}
|
25
25
|
|
26
|
+
# Exclude those word start positions that are too close to each other
|
27
|
+
wsmarks.sort!
|
28
|
+
wsm2 = [wsmarks[0]]
|
29
|
+
for i in 1..(wsmarks.size - 1)
|
30
|
+
if (wsmarks[i] - wsm2[-1]) >= 4 or visible_text[wsm2[-1]..wsmarks[i]].include?("\n")
|
31
|
+
|
32
|
+
wsm2 << wsmarks[i]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
wsmarks = wsm2
|
36
|
+
|
26
37
|
linestart_buf = (line_starts).collect { |x| x + visible_range[0] }
|
27
38
|
wsmarks_buf = (wsmarks).collect { |x| x + visible_range[0] }
|
28
39
|
|
@@ -41,12 +52,12 @@ class EasyJump
|
|
41
52
|
def easy_jump_input_char(c, event_type)
|
42
53
|
return true if event_type != :key_press
|
43
54
|
# vma.paint_stack = []
|
44
|
-
|
55
|
+
debug "EASY JUMP: easy_jump_input_char [#{c}]"
|
45
56
|
@easy_jump_input << c.upcase
|
46
57
|
if @jump_sequence.include?(@easy_jump_input)
|
47
58
|
jshash = Hash[@jump_sequence.map.with_index.to_a]
|
48
59
|
nthword = jshash[@easy_jump_input]
|
49
|
-
|
60
|
+
debug "nthword:#{nthword} #{[@easy_jump_wsmarks[nthword], @jump_sequence[nthword]]}"
|
50
61
|
buf.set_pos(@easy_jump_wsmarks[nthword])
|
51
62
|
# @kbd.set_mode(:command)
|
52
63
|
vma.kbd.remove_keyhandling_override
|
@@ -63,25 +74,11 @@ class EasyJump
|
|
63
74
|
end
|
64
75
|
|
65
76
|
def easy_jump_draw()
|
66
|
-
# puts @jump_sequence.inspect
|
67
|
-
# puts @easy_jump_wsmarks.inspect
|
68
77
|
vma.gui.start_overlay_draw
|
69
78
|
for i in 0..(@easy_jump_wsmarks.size - 1)
|
70
|
-
vma.gui.overlay_draw_text(@jump_sequence[i], @easy_jump_wsmarks[i])
|
79
|
+
vma.gui.overlay_draw_text(@jump_sequence[i], @easy_jump_wsmarks[i])
|
71
80
|
end
|
72
81
|
vma.gui.end_overlay_draw
|
73
|
-
|
74
|
-
return
|
75
|
-
return if @jump_sequence.empty?
|
76
|
-
puts "EASY JUMP DRAW"
|
77
|
-
screen_cord = cpp_function_wrapper(0, [@easy_jump_wsmarks])
|
78
|
-
screen_cord = screen_cord[1..@jump_sequence.size]
|
79
|
-
screen_cord.each_with_index { |point, i|
|
80
|
-
mark_str = @jump_sequence[i]
|
81
|
-
#puts "draw #{point[0]}x#{point[1]}"
|
82
|
-
draw_text(mark_str, point[0] + 3, point[1])
|
83
|
-
#break if m > @cpos
|
84
|
-
}
|
85
82
|
end
|
86
83
|
|
87
84
|
def make_jump_sequence(num_items)
|
@@ -158,8 +155,6 @@ class EasyJump
|
|
158
155
|
}
|
159
156
|
}
|
160
157
|
|
161
|
-
#printf("Size of sequence: %d\n",sequence.size)
|
162
|
-
#puts sequence.inspect
|
163
158
|
return sequence
|
164
159
|
end
|
165
160
|
end
|
data/lib/vimamsa/editor.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require "pty"
|
2
2
|
|
3
3
|
def exec_in_terminal(cmd, autoclose = false)
|
4
|
-
#
|
4
|
+
# debug "CMD:#{cmd}"
|
5
5
|
|
6
6
|
# global to prevent garbage collect unlink
|
7
7
|
$initf = Tempfile.new("bashinit")
|
8
|
-
#
|
8
|
+
# debug $initf.path
|
9
9
|
$initf.write(cmd)
|
10
10
|
if autoclose
|
11
11
|
$initf.write("\nsleep 10; exit;\n")
|
@@ -37,7 +37,7 @@ class Editor
|
|
37
37
|
#attr_writer :call_func, :update_highlight
|
38
38
|
|
39
39
|
def initialize()
|
40
|
-
# Thread.new{10000.times{|x|sleep(3);10000.times{|y|y+2};
|
40
|
+
# Thread.new{10000.times{|x|sleep(3);10000.times{|y|y+2};debug "FOOTHREAD #{x}"}}
|
41
41
|
|
42
42
|
# Search for content inside files (e.g. using ack/grep) in:
|
43
43
|
@file_content_search_paths = []
|
@@ -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{ puts "IDLEFUNC"})
|
78
|
-
# GLib::Idle.add(proc { idle_func })
|
79
|
-
|
80
73
|
@gui = $vmag #TODO
|
81
74
|
|
82
75
|
$hook = Hook.new
|
@@ -95,28 +88,39 @@ 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
|
|
108
103
|
FileManager.init
|
104
|
+
BufferManager.init
|
109
105
|
|
110
106
|
mkdir_if_not_exists("~/.vimamsa")
|
111
107
|
mkdir_if_not_exists("~/.vimamsa/backup")
|
112
108
|
mkdir_if_not_exists("~/.vimamsa/listen")
|
113
109
|
listen_dir = File.expand_path "~/.vimamsa/listen"
|
114
110
|
listener = Listen.to(listen_dir) do |modified, added, removed|
|
115
|
-
|
111
|
+
debug([modified: modified, added: added, removed: removed])
|
116
112
|
open_file_listener(added)
|
117
113
|
end
|
118
114
|
listener.start
|
119
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
|
+
|
120
124
|
$cnf[:theme] = "Twilight_edit"
|
121
125
|
$cnf[:syntax_highlight] = true
|
122
126
|
settings_path = get_dot_path("settings.rb")
|
@@ -131,6 +135,9 @@ class Editor
|
|
131
135
|
|
132
136
|
dotfile = read_file("", "~/.vimamsarc")
|
133
137
|
eval(dotfile) if dotfile
|
138
|
+
|
139
|
+
custom_script = read_file("", custom_fn)
|
140
|
+
eval(custom_script) if custom_script
|
134
141
|
|
135
142
|
# build_options
|
136
143
|
|
@@ -140,6 +147,8 @@ class Editor
|
|
140
147
|
if File.exist?(fname_)
|
141
148
|
fname = fname_
|
142
149
|
end
|
150
|
+
else
|
151
|
+
fname = ppath("demo.txt")
|
143
152
|
end
|
144
153
|
fname = ARGV[0] if ARGV.size >= 1 and File.file?(File.expand_path(ARGV[0]))
|
145
154
|
# vma.add_content_search_path(Dir.pwd)
|
@@ -156,11 +165,11 @@ class Editor
|
|
156
165
|
else
|
157
166
|
buffer = Buffer.new(" \n")
|
158
167
|
end
|
159
|
-
|
168
|
+
vma.buffers << buffer
|
160
169
|
|
161
170
|
# load_theme($cnf[:theme])
|
162
171
|
|
163
|
-
# render_buffer(
|
172
|
+
# render_buffer(vma.buf, 1) #TODO
|
164
173
|
|
165
174
|
# gui_select_buffer_init #TODO
|
166
175
|
# gui_file_finder_init #TODO
|
@@ -188,6 +197,14 @@ class Editor
|
|
188
197
|
def buf()
|
189
198
|
return $buffer
|
190
199
|
end
|
200
|
+
def buf=(aa)
|
201
|
+
$buffer=aa
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
def buffers()
|
206
|
+
return $buffers
|
207
|
+
end
|
191
208
|
|
192
209
|
def marshal_save(varname, vardata)
|
193
210
|
save_var_to_file(varname, Marshal.dump(vardata))
|
@@ -243,20 +260,25 @@ class Editor
|
|
243
260
|
# Register converter
|
244
261
|
def reg_conv(converter, converter_id)
|
245
262
|
@converters[converter_id] = converter
|
246
|
-
reg_act(converter_id, proc {
|
263
|
+
reg_act(converter_id, proc { vma.buf.convert_selected_text(converter_id) }, "Converter #{converter_id}", { :scope => [:selection] })
|
247
264
|
end
|
248
265
|
|
249
266
|
def apply_conv(converter_id, txt)
|
250
267
|
@converters[converter_id].apply(txt)
|
251
268
|
end
|
252
269
|
|
270
|
+
# Used only by ack module at the moment
|
253
271
|
def get_content_search_paths()
|
254
272
|
r = @file_content_search_paths.clone
|
255
273
|
p = find_project_dir_of_cur_buffer()
|
274
|
+
if p.nil?
|
275
|
+
p = vma.buffers.last_dir
|
276
|
+
end
|
256
277
|
|
257
278
|
if p and !@file_content_search_paths.include?(p)
|
258
279
|
r.insert(0, p)
|
259
280
|
end
|
281
|
+
|
260
282
|
return r
|
261
283
|
end
|
262
284
|
|
@@ -264,7 +286,7 @@ class Editor
|
|
264
286
|
exts = $cnf[:extensions_to_open]
|
265
287
|
extname = Pathname.new(filepath).extname.downcase
|
266
288
|
can_open = exts.include?(extname)
|
267
|
-
|
289
|
+
debug "CAN OPEN?: #{can_open}"
|
268
290
|
return can_open
|
269
291
|
end
|
270
292
|
end
|
@@ -275,7 +297,7 @@ def _quit()
|
|
275
297
|
end
|
276
298
|
|
277
299
|
def fatal_error(msg)
|
278
|
-
|
300
|
+
debug msg
|
279
301
|
exit!
|
280
302
|
end
|
281
303
|
|
@@ -285,7 +307,7 @@ end
|
|
285
307
|
|
286
308
|
def open_file_dialog()
|
287
309
|
path = ""
|
288
|
-
path =
|
310
|
+
path = vma.buf.fname if vma.buf.fname
|
289
311
|
gui_open_file_dialog(File.dirname(path))
|
290
312
|
end
|
291
313
|
|
@@ -296,7 +318,7 @@ def system_clipboard_changed(clipboard_contents)
|
|
296
318
|
$paste_lines = false
|
297
319
|
end
|
298
320
|
$clipboard << clipboard_contents
|
299
|
-
#
|
321
|
+
# debug $clipboard[-1]
|
300
322
|
$clipboard = $clipboard[-([$clipboard.size, max_clipboard_items].min)..-1]
|
301
323
|
end
|
302
324
|
|
@@ -306,10 +328,10 @@ end
|
|
306
328
|
|
307
329
|
def set_clipboard(s)
|
308
330
|
if !(s.class <= String) or s.size == 0
|
309
|
-
|
310
|
-
|
331
|
+
debug s.inspect
|
332
|
+
debug [s, s.class, s.size]
|
311
333
|
log_error("s.class != String or s.size == 0")
|
312
|
-
Ripl.start :binding => binding
|
334
|
+
# Ripl.start :binding => binding
|
313
335
|
return
|
314
336
|
end
|
315
337
|
$clipboard << s
|
@@ -321,8 +343,8 @@ end
|
|
321
343
|
|
322
344
|
def set_cursor_pos(new_pos)
|
323
345
|
buf.set_pos(new_pos)
|
324
|
-
#render_buffer(
|
325
|
-
debug "New pos: #{new_pos}lpos:#{
|
346
|
+
#render_buffer(vma.buf)
|
347
|
+
debug "New pos: #{new_pos}lpos:#{vma.buf.lpos} cpos:#{vma.buf.cpos}"
|
326
348
|
end
|
327
349
|
|
328
350
|
def set_last_command(cmd)
|
@@ -343,7 +365,7 @@ end
|
|
343
365
|
|
344
366
|
def repeat_last_find()
|
345
367
|
return if !defined? $last_find_command
|
346
|
-
|
368
|
+
vma.buf.jump_to_next_instance_of_char($last_find_command[:char],
|
347
369
|
$last_find_command[:direction])
|
348
370
|
end
|
349
371
|
|
@@ -364,23 +386,30 @@ end
|
|
364
386
|
|
365
387
|
def show_key_bindings()
|
366
388
|
kbd_s = "❙Key bindings❙\n"
|
367
|
-
kbd_s << "
|
389
|
+
kbd_s << "\n⦁[Mode] keys : action⦁\n"
|
390
|
+
|
391
|
+
kbd_s << "[B]=Browse, [C]=Command, [I]=Insert, [V]=Visual\n"
|
392
|
+
kbd_s << "key!: Press key once, release before pressing any other keys\n"
|
393
|
+
|
394
|
+
kbd_s << "===============================================\n"
|
368
395
|
kbd_s << $kbd.to_s
|
369
|
-
kbd_s << "
|
370
|
-
create_new_file(nil, kbd_s)
|
396
|
+
kbd_s << "===============================================\n"
|
397
|
+
b = create_new_file(nil, kbd_s)
|
398
|
+
gui_set_file_lang(b.id, "hyperplaintext")
|
399
|
+
#
|
371
400
|
end
|
372
401
|
|
373
402
|
def diff_buffer()
|
374
403
|
bufstr = ""
|
375
|
-
orig_path =
|
404
|
+
orig_path = vma.buf.fname
|
376
405
|
infile = Tempfile.new("out")
|
377
406
|
infile = Tempfile.new("in")
|
378
|
-
infile.write(
|
407
|
+
infile.write(vma.buf.to_s)
|
379
408
|
infile.flush
|
380
409
|
cmd = "diff -w '#{orig_path}' #{infile.path}"
|
381
|
-
#
|
410
|
+
# debug cmd
|
382
411
|
bufstr << run_cmd(cmd)
|
383
|
-
#
|
412
|
+
# debug bufstr
|
384
413
|
infile.close; infile.unlink
|
385
414
|
create_new_file(nil, bufstr)
|
386
415
|
end
|
@@ -421,7 +450,7 @@ def minibuffer_new_char(c)
|
|
421
450
|
$minibuffer.insert_txt(c)
|
422
451
|
debug "MINIBUFFER: #{c}"
|
423
452
|
end
|
424
|
-
|
453
|
+
#vma.buf = $minibuffer
|
425
454
|
end
|
426
455
|
|
427
456
|
# def readchar_new_char(c)
|
@@ -434,7 +463,7 @@ end
|
|
434
463
|
|
435
464
|
def message(s)
|
436
465
|
s = "[#{DateTime.now().strftime("%H:%M")}] #{s}"
|
437
|
-
|
466
|
+
debug s
|
438
467
|
|
439
468
|
$vmag.add_to_minibuf(s)
|
440
469
|
# $minibuffer = Buffer.new(s, "")
|
@@ -445,6 +474,7 @@ end
|
|
445
474
|
GUESS_ENCODING_ORDER = [
|
446
475
|
Encoding::US_ASCII,
|
447
476
|
Encoding::UTF_8,
|
477
|
+
Encoding::ISO_8859_1,
|
448
478
|
Encoding::Shift_JIS,
|
449
479
|
Encoding::EUC_JP,
|
450
480
|
Encoding::EucJP_ms,
|
@@ -473,7 +503,8 @@ def create_new_file(filename = nil, file_contents = "\n")
|
|
473
503
|
debug "NEW FILE CREATED"
|
474
504
|
buffer = Buffer.new(file_contents)
|
475
505
|
# gui_set_current_buffer(buffer.id) #TODO: remove?
|
476
|
-
|
506
|
+
vma.buffers << buffer
|
507
|
+
vma.kbd.set_mode_to_default
|
477
508
|
return buffer
|
478
509
|
end
|
479
510
|
|
@@ -491,7 +522,7 @@ end
|
|
491
522
|
|
492
523
|
def load_buffer(fname)
|
493
524
|
return if !File.exist?(fname)
|
494
|
-
existing_buffer =
|
525
|
+
existing_buffer = vma.buffers.get_buffer_by_filename(fname)
|
495
526
|
if existing_buffer != nil
|
496
527
|
$buffer_history << existing_buffer
|
497
528
|
return
|
@@ -503,15 +534,27 @@ def load_buffer(fname)
|
|
503
534
|
debug("DONE LOAD: #{fname}")
|
504
535
|
#buf = filter_buffer(buffer)
|
505
536
|
# debug("END FILTER: #{fname}")
|
506
|
-
|
507
|
-
#$buffer_history <<
|
537
|
+
vma.buffers << buffer
|
538
|
+
#$buffer_history << vma.buffers.size - 1
|
508
539
|
end
|
509
540
|
|
510
|
-
def jump_to_file(filename, linenum =
|
541
|
+
def jump_to_file(filename, linenum = nil, charn = nil)
|
511
542
|
open_new_file(filename)
|
512
|
-
|
513
|
-
|
543
|
+
|
544
|
+
# Link to character position
|
545
|
+
if !charn.nil?
|
546
|
+
if charn == "c"
|
547
|
+
buf.jump_to_pos(linenum)
|
548
|
+
center_on_current_line
|
549
|
+
return
|
550
|
+
end
|
551
|
+
end
|
552
|
+
|
553
|
+
# Link to line
|
554
|
+
if !linenum.nil?
|
555
|
+
buf.jump_to_line(linenum)
|
514
556
|
center_on_current_line
|
557
|
+
return
|
515
558
|
end
|
516
559
|
end
|
517
560
|
|
@@ -523,11 +566,11 @@ end
|
|
523
566
|
def open_new_file(filename, file_contents = "")
|
524
567
|
#TODO: expand path
|
525
568
|
filename = File.expand_path(filename)
|
526
|
-
b =
|
569
|
+
b = vma.buffers.get_buffer_by_filename(filename)
|
527
570
|
# File is already opened to existing buffer
|
528
571
|
if b != nil
|
529
572
|
message "Switching to: #{filename}"
|
530
|
-
|
573
|
+
vma.buffers.set_current_buffer(b)
|
531
574
|
else
|
532
575
|
message "New file opened: #{filename}"
|
533
576
|
fname = filename
|
@@ -541,39 +584,11 @@ def scan_word_start_marks(search_str)
|
|
541
584
|
return wsmarks
|
542
585
|
end
|
543
586
|
|
544
|
-
def draw_text(str, x, y)
|
545
|
-
vma.paint_stack << [4, x, y, str]
|
546
|
-
end
|
547
|
-
|
548
587
|
def hook_draw()
|
549
588
|
# TODO: as hook.register
|
550
589
|
# easy_jump_draw()
|
551
590
|
end
|
552
591
|
|
553
|
-
def render_buffer(buffer = 0, reset = 0)
|
554
|
-
tmpbuf = $buffer.to_s
|
555
|
-
debug "pos:#{$buffer.pos} L:#{$buffer.lpos} C:#{$buffer.cpos}"
|
556
|
-
pos = $buffer.pos
|
557
|
-
selection_start = $buffer.selection_start
|
558
|
-
|
559
|
-
if $buffer.need_redraw?
|
560
|
-
reset = 1
|
561
|
-
end
|
562
|
-
t1 = Time.now
|
563
|
-
hook_draw()
|
564
|
-
|
565
|
-
if $buffer.need_redraw?
|
566
|
-
hpt_scan_images() if $debug #experimental
|
567
|
-
end
|
568
|
-
|
569
|
-
$buffer.highlight
|
570
|
-
if Time.now - t1 > 1 / 100.0
|
571
|
-
debug "SLOW render"
|
572
|
-
debug "Render time: #{Time.now - t1}"
|
573
|
-
end
|
574
|
-
$buffer.set_redrawed if reset == 1
|
575
|
-
end
|
576
|
-
|
577
592
|
def get_dot_path(sfx)
|
578
593
|
dot_dir = File.expand_path("~/.vimamsa")
|
579
594
|
Dir.mkdir(dot_dir) unless File.exist?(dot_dir)
|
@@ -584,10 +599,10 @@ end
|
|
584
599
|
def get_file_line_pointer(s)
|
585
600
|
#"/code/vimamsa/lib/vimamsa/buffer_select.rb:31:def"
|
586
601
|
# m = s.match(/(~[a-z]*)?\/.*\//)
|
587
|
-
m = s.match(/((~[a-z]*)?\/.*\/\S+):(\d+)/)
|
602
|
+
m = s.match(/((~[a-z]*)?\/.*\/\S+):(c?)(\d+)/)
|
588
603
|
if m != nil
|
589
604
|
if File.exist?(File.expand_path(m[1]))
|
590
|
-
return [m[1], m[
|
605
|
+
return [m[1], m[4].to_i, m[3]]
|
591
606
|
end
|
592
607
|
end
|
593
608
|
return nil
|
@@ -604,7 +619,7 @@ end
|
|
604
619
|
def run_cmd(cmd)
|
605
620
|
tmpf = Tempfile.new("vmarun", "/tmp").path
|
606
621
|
cmd = "#{cmd} > #{tmpf}"
|
607
|
-
|
622
|
+
debug "CMD:\n#{cmd}"
|
608
623
|
system("bash", "-c", cmd)
|
609
624
|
res_str = File.read(tmpf)
|
610
625
|
return res_str
|
@@ -633,11 +648,11 @@ def exec_cmd(bin_name, arg1 = nil, arg2 = nil, arg3 = nil, arg4 = nil, arg5 = ni
|
|
633
648
|
end
|
634
649
|
|
635
650
|
def file_is_text_file(fpath)
|
636
|
-
|
651
|
+
debug "file_is_text_file(#{fpath})"
|
637
652
|
fpath = File.expand_path(fpath)
|
638
653
|
return false if !File.exist?(fpath)
|
639
654
|
r = exec_cmd("file", fpath)
|
640
|
-
|
655
|
+
debug "DEBUG:#{r}"
|
641
656
|
return true if r.match(/UTF-8.*text/)
|
642
657
|
return true if r.match(/ASCII.*text/)
|
643
658
|
return false
|
@@ -670,9 +685,9 @@ end
|
|
670
685
|
def find_project_dir_of_cur_buffer()
|
671
686
|
# Find "project dir" of current file. If currently editing file in path "/foo/bar/baz/fn.txt" and file named "/foo/bar/.vma_project" exists, then dir /foo/bar is treated as project dir and subject to e.g. ack search.
|
672
687
|
pdir = nil
|
673
|
-
if
|
674
|
-
pdir = find_project_dir_of_fn(
|
688
|
+
if vma.buf.fname
|
689
|
+
pdir = find_project_dir_of_fn(vma.buf.fname)
|
675
690
|
end
|
676
|
-
#
|
691
|
+
# debug "Proj dir of current file: #{pdir}"
|
677
692
|
return pdir
|
678
693
|
end
|
data/lib/vimamsa/encrypt.rb
CHANGED
@@ -33,15 +33,15 @@ class Encrypt
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def decrypt_cur_buffer(password, b = nil)
|
36
|
-
|
36
|
+
vma.buf.decrypt(password)
|
37
37
|
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)
|
45
|
-
|
45
|
+
vma.buf.set_encrypted(password)
|
46
46
|
end
|
47
47
|
|