vimamsa 0.1.7 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|