vimamsa 0.1.13 → 0.1.14

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.
@@ -14,7 +14,7 @@ $ifuncon = false
14
14
  class Buffer < String
15
15
  attr_reader :pos, :lpos, :cpos, :deltas, :edit_history, :fname, :call_func, :pathname, :basename, :dirname, :update_highlight, :marks, :is_highlighted, :syntax_detect_failed, :id, :lang, :images, :last_save
16
16
  attr_writer :call_func, :update_highlight
17
- attr_accessor :gui_update_highlight, :update_hl_startpos, :update_hl_endpos, :hl_queue, :syntax_parser, :highlights, :gui_reset_highlight, :is_parsing_syntax, :line_ends, :bt, :line_action_handler, :module, :active_kbd_mode, :title, :subtitle, :paste_lines
17
+ attr_accessor :gui_update_highlight, :update_hl_startpos, :update_hl_endpos, :hl_queue, :syntax_parser, :highlights, :gui_reset_highlight, :is_parsing_syntax, :line_ends, :bt, :line_action_handler, :module, :active_kbd_mode, :title, :subtitle, :paste_lines, :mode_stack, :default_mode
18
18
 
19
19
  @@num_buffers = 0
20
20
 
@@ -28,6 +28,8 @@ class Buffer < String
28
28
  @id = @@num_buffers
29
29
  @@num_buffers += 1
30
30
  @version = 0
31
+ @mode_stack = [:command] # TODO
32
+ @default_mode = :command # TODO
31
33
  gui_create_buffer(@id, self)
32
34
  debug "NEW BUFFER fn=#{fname} ID:#{@id}"
33
35
 
@@ -91,15 +93,14 @@ class Buffer < String
91
93
 
92
94
  def set_active
93
95
  if !@active_kbd_mode.nil?
94
- $kbd.set_mode(@active_kbd_mode)
96
+ # $kbd.set_mode(@active_kbd_mode) #TODO: remove?
95
97
  else
96
98
  $kbd.set_mode_to_default
97
99
  end
98
- # gui_set_current_buffer(@id)
99
100
  end
100
101
 
101
102
  def set_executable
102
- if File.exists?(@fname)
103
+ if File.exist?(@fname)
103
104
  FileUtils.chmod("+x", @fname)
104
105
  message("Set executable: #{@fname}")
105
106
  end
@@ -213,6 +214,7 @@ class Buffer < String
213
214
  $audiof = mf
214
215
  end
215
216
 
217
+ #TODO: remove?
216
218
  def reset_audio_widget_positions
217
219
  debug "reset_audio_widget_positions", 2
218
220
  for mc in @audiofiles
@@ -246,16 +248,6 @@ class Buffer < String
246
248
  gui_set_current_buffer(@id) #TODO: needed?
247
249
  end
248
250
 
249
- def is_legal_pos(pos, op = :read)
250
- return false if pos < 0
251
- if op == :add
252
- return false if pos > self.size
253
- elsif op == :read
254
- return false if pos >= self.size
255
- end
256
- return true
257
- end
258
-
259
251
  def set_encrypted(password)
260
252
  @crypt = Encrypt.new(password)
261
253
  message("Set buffer encrypted")
@@ -265,19 +257,18 @@ class Buffer < String
265
257
  @crypt = nil
266
258
  end
267
259
 
268
- def add_new_line(txt)
269
- # buf.jump(END_OF_LINE);buf.insert_txt("\n");
270
- end
271
-
272
- def insert_image_after_current_line(fname)
273
- lr = current_line_range()
274
- a = "⟦img:#{fname}⟧\n"
275
- b = " \n"
276
- txt = a + b
277
- insert_txt_at(txt, lr.end + 1)
278
- buf.view.handle_deltas
279
- imgpos = lr.end + 1 + a.size
280
- add_image(fname, imgpos)
260
+ def unindent
261
+ debug("unindent", 2)
262
+ conf(:tab_width).times {
263
+ p = @pos - 1
264
+ if p >= 0
265
+ if self[p] == " "
266
+ delete(BACKWARD_CHAR)
267
+ end
268
+ else
269
+ break
270
+ end
271
+ }
281
272
  end
282
273
 
283
274
  def handle_drag_and_drop(fname)
@@ -300,13 +291,14 @@ class Buffer < String
300
291
 
301
292
  def revert()
302
293
  return if !@fname
303
- return if !File.exists?(@fname)
294
+ return if !File.exist?(@fname)
304
295
  message("Revert buffer #{@fname}")
305
296
  str = read_file("", @fname)
306
297
  self.set_content(str)
307
298
  end
308
299
 
309
300
  def decrypt(password)
301
+ return if @encrypted_str.nil?
310
302
  begin
311
303
  @crypt = Encrypt.new(password)
312
304
  str = @crypt.decrypt(@encrypted_str)
@@ -347,11 +339,9 @@ class Buffer < String
347
339
  @ftype = nil
348
340
  if str[0..10] == "VMACRYPT001"
349
341
  @encrypted_str = str[11..-1]
350
- callback = proc { |x| decrypt_cur_buffer(x) }
351
- gui_one_input_action("Decrypt", "Password:", "decrypt", callback, { :hide => true })
342
+ callback = proc { |x| self.decrypt(x) }
343
+ gui_one_input_action("Decrypt file \n #{@fname}", "Password:", "decrypt", callback, { :hide => true })
352
344
  str = "ENCRYPTED"
353
- else
354
- # @crypt = nil
355
345
  end
356
346
 
357
347
  if (str[-1] != "\n")
@@ -361,10 +351,9 @@ class Buffer < String
361
351
  self.replace(str)
362
352
  @line_ends = scan_indexes(self, /\n/)
363
353
 
364
- # @bt = BufferTree.new(str)
365
- if $experimental
354
+ if cnf.btree.experimental?
366
355
  @bt = BufferTree.new(self)
367
- if $debug
356
+ if cnf.debug?
368
357
  sanitycheck_btree()
369
358
  end
370
359
  end
@@ -426,65 +415,6 @@ class Buffer < String
426
415
  return fpath
427
416
  end
428
417
 
429
- def line(lpos)
430
- if @line_ends.size == 0
431
- return self
432
- end
433
-
434
- #TODO: implement using line_range()
435
- if lpos >= @line_ends.size
436
- debug("lpos too large") #TODO
437
- return ""
438
- elsif lpos == @line_ends.size
439
- end
440
- start = @line_ends[lpos - 1] + 1 if lpos > 0
441
- start = 0 if lpos == 0
442
- _end = @line_ends[lpos]
443
- debug "start: _#{start}, end: #{_end}"
444
- return self[start.._end]
445
- end
446
-
447
- def is_delta_ok(delta)
448
- ret = true
449
- pos = delta[0]
450
- if pos < 0
451
- ret = false
452
- debug "pos=#{pos} < 0"
453
- elsif pos > self.size
454
- debug "pos=#{pos} > self.size=#{self.size}"
455
- ret = false
456
- end
457
- if ret == false
458
- # crash("DELTA OK=#{ret}")
459
- end
460
- return ret
461
- end
462
-
463
- #TODO: change to apply=true as default
464
- def add_delta(delta, apply = false, auto_update_cpos = false)
465
- return if !is_delta_ok(delta)
466
- if delta[1] == DELETE
467
- return if delta[0] >= self.size
468
- # If go over length of buffer
469
- if delta[0] + delta[2] >= self.size
470
- delta[2] = self.size - delta[0]
471
- end
472
- end
473
-
474
- @edit_version += 1
475
- @redo_stack = []
476
- if apply
477
- delta = run_delta(delta, auto_update_cpos)
478
- else
479
- @deltas << delta
480
- end
481
- @edit_history << delta
482
- if self[-1] != "\n"
483
- add_delta([self.size, INSERT, 1, "\n"], true)
484
- end
485
- reset_larger_cpos #TODO: correct here?
486
- end
487
-
488
418
  def add_hl_update(startpos, endpos)
489
419
  return if @is_highlighted == false
490
420
 
@@ -501,7 +431,7 @@ class Buffer < String
501
431
  # delta[3]: text to add in case of insert
502
432
 
503
433
  @version += 1
504
- if $experimental
434
+ if cnf.btree.experimental?
505
435
  @bt.handle_delta(Delta.new(delta[0], delta[1], delta[2], delta[3]))
506
436
  end
507
437
 
@@ -585,34 +515,6 @@ class Buffer < String
585
515
  end
586
516
  end
587
517
 
588
- def jump_to_last_edit()
589
- return if @edit_pos_history.empty?
590
- @edit_pos_history_i += 1
591
-
592
- if @edit_pos_history_i > @edit_pos_history.size
593
- @edit_pos_history_i = 0
594
- end
595
-
596
- # if @edit_pos_history.size >= @edit_pos_history_i
597
- set_pos(@edit_pos_history[-@edit_pos_history_i])
598
- center_on_current_line
599
- return true
600
- # end
601
- end
602
-
603
- def jump_to_next_edit()
604
- return if @edit_pos_history.empty?
605
- @edit_pos_history_i -= 1
606
- @edit_pos_history_i = @edit_pos_history.size - 1 if @edit_pos_history_i < 0
607
- debug "@edit_pos_history_i=#{@edit_pos_history_i}"
608
- set_pos(@edit_pos_history[-@edit_pos_history_i])
609
- center_on_current_line
610
- return true
611
- end
612
-
613
- def jump_to_random_pos()
614
- set_pos(rand(self.size))
615
- end
616
518
 
617
519
  def undo()
618
520
  debug @edit_history.inspect
@@ -757,10 +659,10 @@ class Buffer < String
757
659
  end
758
660
 
759
661
  def get_repeat_num()
760
- $method_handles_repeat = true
662
+ vma.kbd.method_handles_repeat = true
761
663
  repeat_num = 1
762
- if !$next_command_count.nil? and $next_command_count > 0
763
- repeat_num = $next_command_count
664
+ if !vma.kbd.next_command_count.nil? and vma.kbd.next_command_count > 0
665
+ repeat_num = vma.kbd.next_command_count
764
666
  end
765
667
  return repeat_num
766
668
  end
@@ -809,7 +711,7 @@ class Buffer < String
809
711
  debug range_id.inspect
810
712
  range = get_range(range_id)
811
713
  debug range.inspect
812
- set_clipboard(self[range])
714
+ vma.clipboard.set(self[range])
813
715
  end
814
716
 
815
717
  def recalc_line_ends()
@@ -890,149 +792,7 @@ class Buffer < String
890
792
  @line_ends.sort!
891
793
  end
892
794
  end
893
-
894
- def at_end_of_line?()
895
- return (self[@pos] == "\n" or at_end_of_buffer?)
896
- end
897
-
898
- def at_end_of_buffer?()
899
- return @pos == self.size
900
- end
901
-
902
- def jump_to_pos(new_pos)
903
- set_pos(new_pos)
904
- end
905
-
906
- def set_pos(new_pos)
907
- if new_pos >= self.size
908
- @pos = self.size - 1 # TODO:??right side of last char
909
- elsif new_pos >= 0
910
- @pos = new_pos
911
- end
912
- gui_set_cursor_pos(@id, @pos)
913
- calculate_line_and_column_pos
914
-
915
- check_if_modified_outside
916
- end
917
-
918
- # Get the line number of character position
919
- def get_line_pos(pos)
920
- lpos = @line_ends.bsearch_index { |x, _| x >= pos }
921
- return lpos
922
- end
923
-
924
- # Calculate the two dimensional column and line positions based on
925
- # (one dimensional) position in the buffer.
926
- def get_line_and_col_pos(pos)
927
- pos = self.size if pos > self.size
928
- pos = 0 if pos < 0
929
-
930
- lpos = get_line_pos(pos)
931
-
932
- lpos = @line_ends.size if lpos == nil
933
- cpos = pos
934
- cpos -= @line_ends[lpos - 1] + 1 if lpos > 0
935
-
936
- return [lpos, cpos]
937
- end
938
-
939
- def calculate_line_and_column_pos(reset = true)
940
- @lpos, @cpos = get_line_and_col_pos(@pos)
941
- reset_larger_cpos if reset
942
- end
943
-
944
- def set_line_and_column_pos(lpos, cpos, _reset_larger_cpos = true)
945
- @lpos = lpos if !lpos.nil?
946
- @cpos = cpos if !cpos.nil?
947
- if @lpos > 0
948
- new_pos = @line_ends[@lpos - 1] + 1
949
- else
950
- new_pos = 0
951
- end
952
-
953
- if @cpos > (line(@lpos).size - 1)
954
- debug("$cpos too large: #{@cpos} #{@lpos}")
955
- if @larger_cpos < @cpos
956
- @larger_cpos = @cpos
957
- end
958
- @cpos = line(@lpos).size - 1
959
- end
960
- new_pos += @cpos
961
- set_pos(new_pos)
962
- reset_larger_cpos if _reset_larger_cpos
963
- end
964
-
965
- # Calculate the one dimensional array index based on column and line positions
966
- def calculate_pos_from_cpos_lpos(reset = true)
967
- set_line_and_column_pos(nil, nil)
968
- end
969
-
970
- def delete2(range_id, mark = nil)
971
- # if mark != nil
972
- # debug mark, 2
973
- # return
974
- # end
975
-
976
- @paste_lines = false
977
- range = get_range(range_id, mark: mark)
978
- return if range == nil
979
- debug "RANGE"
980
- debug range.inspect
981
- debug range.inspect
982
- debug "------"
983
- delete_range(range.first, range.last)
984
- pos = [range.first, @pos].min
985
- set_pos(pos)
986
- end
987
-
988
- def delete(op, x = nil)
989
- @paste_lines = false
990
- # Delete selection
991
- if op == SELECTION && visual_mode?
992
- (startpos, endpos) = get_visual_mode_range2
993
- delete_range(startpos, endpos, x)
994
- @pos = [@pos, @selection_start].min
995
- end_visual_mode
996
- #return
997
-
998
- # Delete current char
999
- elsif op == CURRENT_CHAR_FORWARD
1000
- return if @pos >= self.size - 1 # May not delete last '\n'
1001
- add_delta([@pos, DELETE, 1], true)
1002
-
1003
- # Delete current char and then move backward
1004
- elsif op == CURRENT_CHAR_BACKWARD
1005
- add_delta([@pos, DELETE, 1], true)
1006
- @pos -= 1
1007
-
1008
- # Delete the char before current char and move backward
1009
- elsif op == BACKWARD_CHAR and @pos > 0
1010
- add_delta([@pos - 1, DELETE, 1], true)
1011
- @pos -= 1
1012
- elsif op == FORWARD_CHAR #TODO: ok?
1013
- add_delta([@pos + 1, DELETE, 1], true)
1014
- end
1015
- set_pos(@pos)
1016
- #recalc_line_ends
1017
- calculate_line_and_column_pos
1018
- #need_redraw!
1019
- end
1020
-
1021
- def delete_range(startpos, endpos, x = nil)
1022
- s = self[startpos..endpos]
1023
- if startpos == endpos or s == ""
1024
- return
1025
- end
1026
- if x == :append
1027
- debug "APPEND"
1028
- s += "\n" + get_clipboard()
1029
- end
1030
- set_clipboard(s)
1031
- add_delta([startpos, DELETE, (endpos - startpos + 1)], true)
1032
- #recalc_line_ends
1033
- calculate_line_and_column_pos
1034
- end
1035
-
795
+
1036
796
  # Ranges to use in delete or copy operations
1037
797
  def get_range(range_id, mark: nil)
1038
798
  range = nil
@@ -1040,7 +800,7 @@ class Buffer < String
1040
800
  # TODO: better way to make the search than + 150 from current position
1041
801
  wmarks = get_word_end_marks(@pos, @pos + 150)
1042
802
  if wmarks.any?
1043
- range = @pos..wmarks[0]
803
+ range = @pos..(wmarks[0])
1044
804
  end
1045
805
  elsif range_id == :to_next_word # start of
1046
806
  wmarks = get_word_start_marks(@pos, @pos + 150)
@@ -1324,141 +1084,6 @@ class Buffer < String
1324
1084
  handle_word(wnfo)
1325
1085
  end
1326
1086
 
1327
- def jump_to_next_instance_of_word()
1328
- if $kbd.last_action == $kbd.cur_action and @current_word != nil
1329
- # debug "REPEATING *"
1330
- else
1331
- start_search = [@pos - 150, 0].max
1332
-
1333
- search_str1 = self[start_search..(@pos)]
1334
- wsmarks = scan_indexes(search_str1, /(?<=[^\p{Word}])\p{Word}/)
1335
- a = wsmarks[-1]
1336
- a = 0 if a == nil
1337
-
1338
- search_str2 = self[(@pos)..(@pos + 150)]
1339
- wemarks = scan_indexes(search_str2, /(?<=\p{Word})[^\p{Word}]/)
1340
- b = wemarks[0]
1341
- word_start = (@pos - search_str1.size + a + 1)
1342
- word_start = 0 if !(word_start >= 0)
1343
- @current_word = self[word_start..(@pos + b - 1)]
1344
- end
1345
-
1346
- #TODO: search for /[^\p{Word}]WORD[^\p{Word}]/
1347
- position_of_next_word = self.index(@current_word, @pos + 1)
1348
- if position_of_next_word != nil
1349
- set_pos(position_of_next_word)
1350
- else #Search from beginning
1351
- position_of_next_word = self.index(@current_word)
1352
- set_pos(position_of_next_word) if position_of_next_word != nil
1353
- end
1354
- center_on_current_line
1355
- return true
1356
- end
1357
-
1358
- def jump_word(direction, wordpos)
1359
- offset = 0
1360
- if direction == FORWARD
1361
- debug "POS: #{@pos},"
1362
- search_str = self[(@pos)..(@pos + 250)]
1363
- return if search_str == nil
1364
- if wordpos == WORD_START # vim 'w'
1365
- wsmarks = scan_indexes(search_str, /(?<=[^\p{Word}])\p{Word}|\Z/) # \Z = end of string, just before last newline.
1366
- wsmarks2 = scan_indexes(search_str, /\n[ \t]*\n/) # "empty" lines that have whitespace
1367
- wsmarks2 = wsmarks2.collect { |x| x + 1 }
1368
- wsmarks = (wsmarks2 + wsmarks).sort.uniq
1369
- offset = 0
1370
- if wsmarks.any?
1371
- next_pos = @pos + wsmarks[0] + offset
1372
- set_pos(next_pos)
1373
- end
1374
- elsif wordpos == WORD_END
1375
- search_str = self[(@pos + 1)..(@pos + 150)]
1376
- wsmarks = scan_indexes(search_str, /(?<=\p{Word})[^\p{Word}]/)
1377
- offset = -1
1378
- if wsmarks.any?
1379
- next_pos = @pos + 1 + wsmarks[0] + offset
1380
- set_pos(next_pos)
1381
- end
1382
- end
1383
- end
1384
- if direction == BACKWARD # vim 'b'
1385
- start_search = @pos - 150 #TODO 150 length limit
1386
- start_search = 0 if start_search < 0
1387
- search_str = self[start_search..(@pos - 1)]
1388
- return if search_str == nil
1389
- wsmarks = scan_indexes(search_str,
1390
- #/(^|(\W)\w|\n)/) #TODO 150 length limit
1391
- #/^|(?<=[^\p{Word}])\p{Word}|(?<=\n)\n/) #include empty lines?
1392
- /\A|(?<=[^\p{Word}])\p{Word}/) # Start of string or nonword,word.
1393
-
1394
- offset = 0
1395
-
1396
- if wsmarks.any?
1397
- next_pos = start_search + wsmarks.last + offset
1398
- set_pos(next_pos)
1399
- end
1400
- end
1401
- end
1402
-
1403
- def jump_to_mark(mark_char)
1404
- p = @marks[mark_char]
1405
- set_pos(p) if p
1406
- center_on_current_line
1407
- return true
1408
- end
1409
-
1410
- def jump(target)
1411
- if target == START_OF_BUFFER
1412
- set_pos(0)
1413
- end
1414
- if target == END_OF_BUFFER
1415
- set_pos(self.size - 1)
1416
- end
1417
- if target == BEGINNING_OF_LINE
1418
- @cpos = 0
1419
- calculate_pos_from_cpos_lpos
1420
- end
1421
- if target == END_OF_LINE
1422
- @cpos = line(@lpos).size - 1
1423
- calculate_pos_from_cpos_lpos
1424
- end
1425
-
1426
- if target == FIRST_NON_WHITESPACE
1427
- l = current_line()
1428
- debug l.inspect
1429
- @cpos = line(@lpos).size - 1
1430
- a = scan_indexes(l, /\S/)
1431
- debug a.inspect
1432
- if a.any?
1433
- @cpos = a[0]
1434
- else
1435
- @cpos = 0
1436
- end
1437
- calculate_pos_from_cpos_lpos
1438
- end
1439
- end
1440
-
1441
- def jump_to_line(line_n = 1)
1442
-
1443
- # $method_handles_repeat = true
1444
- # if !$next_command_count.nil? and $next_command_count > 0
1445
- # line_n = $next_command_count
1446
- # debug "jump to line:#{line_n}"
1447
- # end
1448
- debug "jump to line:#{line_n}"
1449
- line_n = get_repeat_num() if line_n == 1
1450
-
1451
- if line_n > @line_ends.size
1452
- debug("lpos too large") #TODO
1453
- return
1454
- end
1455
- if line_n == 1
1456
- set_pos(0)
1457
- else
1458
- set_pos(@line_ends[line_n - 2] + 1)
1459
- end
1460
- end
1461
-
1462
1087
  def join_lines()
1463
1088
  if @lpos >= @line_ends.size - 1 # Cursor is on last line
1464
1089
  debug("ON LAST LINE")
@@ -1472,28 +1097,6 @@ class Buffer < String
1472
1097
  end
1473
1098
  end
1474
1099
 
1475
- def jump_to_next_instance_of_char(char, direction = FORWARD)
1476
-
1477
- #return if at_end_of_line?
1478
- if direction == FORWARD
1479
- position_of_next_char = self.index(char, @pos + 1)
1480
- if position_of_next_char != nil
1481
- @pos = position_of_next_char
1482
- end
1483
- elsif direction == BACKWARD
1484
- start_search = @pos - 250
1485
- start_search = 0 if start_search < 0
1486
- search_substr = self[start_search..(@pos - 1)]
1487
- _pos = search_substr.reverse.index(char)
1488
- if _pos != nil
1489
- @pos -= (_pos + 1)
1490
- end
1491
- end
1492
- m = method("jump_to_next_instance_of_char")
1493
- set_last_command({ method: m, params: [char, direction] })
1494
- $last_find_command = { char: char, direction: direction }
1495
- set_pos(@pos)
1496
- end
1497
1100
 
1498
1101
  def replace_with_char(char)
1499
1102
  debug "self_pos:'#{self[@pos]}'"
@@ -1619,94 +1222,6 @@ class Buffer < String
1619
1222
  @need_redraw = false
1620
1223
  end
1621
1224
 
1622
- # Create a new line after current line and insert text on that line
1623
- def put_to_new_next_line(txt)
1624
- l = current_line_range()
1625
- insert_txt_at(txt, l.end + 1)
1626
- set_pos(l.end + 1)
1627
- end
1628
-
1629
- # Start asynchronous read of system clipboard
1630
- def paste_start(at, register)
1631
- @clipboard_paste_running = true
1632
- clipboard = vma.gui.window.display.clipboard
1633
- clipboard.read_text_async do |_clipboard, result|
1634
- begin
1635
- text = clipboard.read_text_finish(result)
1636
- rescue Gio::IOError::NotSupported
1637
- # Happens when pasting from KeePassX and clipboard cleared
1638
- debug Gio::IOError::NotSupported
1639
- else
1640
- paste_finish(text, at, register)
1641
- end
1642
- end
1643
- end
1644
-
1645
- def paste_finish(text, at, register)
1646
- debug "PASTE: #{text}"
1647
-
1648
- # If we did not put this text to clipboard
1649
- if text != $clipboard[-1]
1650
- @paste_lines = false
1651
- end
1652
-
1653
- text = sanitize_input(text)
1654
-
1655
- $clipboard << text
1656
-
1657
- return if text == ""
1658
-
1659
- if @paste_lines
1660
- debug "PASTE LINES"
1661
- put_to_new_next_line(text)
1662
- else
1663
- if at_end_of_buffer? or at_end_of_line? or at == BEFORE
1664
- pos = @pos
1665
- else
1666
- pos = @pos + 1
1667
- end
1668
- insert_txt_at(text, pos)
1669
- set_pos(pos + text.size)
1670
- end
1671
- set_pos(@pos)
1672
- @clipboard_paste_running = false
1673
- end
1674
-
1675
- def paste(at = AFTER, register = nil)
1676
- # Macro's don't work with asynchronous call using GTK
1677
- # TODO: implement as synchronous?
1678
- # Use internal clipboard
1679
- if vma.macro.running_macro
1680
- text = get_clipboard()
1681
- paste_finish(text, at, register)
1682
- else
1683
- # Get clipboard using GUI
1684
- paste_start(at, register)
1685
- end
1686
- return true
1687
- end
1688
-
1689
- def delete_line()
1690
- $method_handles_repeat = true
1691
- num_lines = 1
1692
- if !$next_command_count.nil? and $next_command_count > 0
1693
- num_lines = $next_command_count
1694
- debug "copy num_lines:#{num_lines}"
1695
- end
1696
- lrange = line_range(@lpos, num_lines)
1697
- s = self[lrange]
1698
- add_delta([lrange.begin, DELETE, lrange.end - lrange.begin + 1], true)
1699
- set_clipboard(s)
1700
- update_pos(lrange.begin)
1701
- @paste_lines = true
1702
- #recalc_line_ends
1703
- end
1704
-
1705
- def update_pos(pos)
1706
- @pos = pos
1707
- calculate_line_and_column_pos
1708
- end
1709
-
1710
1225
  def start_visual_mode()
1711
1226
  @visual_mode = true
1712
1227
  @selection_start = @pos
@@ -1722,10 +1237,10 @@ class Buffer < String
1722
1237
  s = self[get_visual_mode_range]
1723
1238
  if x == :append
1724
1239
  debug "APPEND"
1725
- s += "\n" + get_clipboard()
1240
+ s += "\n" + vma.clipboard.get()
1726
1241
  end
1727
1242
 
1728
- set_clipboard(s)
1243
+ vma.clipboard.set(s)
1729
1244
  end_visual_mode
1730
1245
  return true
1731
1246
  end
@@ -1788,29 +1303,29 @@ class Buffer < String
1788
1303
  end
1789
1304
 
1790
1305
  def copy_line()
1791
- $method_handles_repeat = true
1306
+ vma.kbd.method_handles_repeat = true
1792
1307
  num_lines = 1
1793
- if !$next_command_count.nil? and $next_command_count > 0
1794
- num_lines = $next_command_count
1308
+ if !vma.kbd.next_command_count.nil? and vma.kbd.next_command_count > 0
1309
+ num_lines = vma.kbd.next_command_count
1795
1310
  debug "copy num_lines:#{num_lines}"
1796
1311
  end
1797
- set_clipboard(self[line_range(@lpos, num_lines)])
1312
+ vma.clipboard.set(self[line_range(@lpos, num_lines)])
1798
1313
  @paste_lines = true
1799
1314
  end
1800
1315
 
1801
1316
  def put_file_path_to_clipboard
1802
- set_clipboard(self.fname)
1317
+ vma.clipboard.set(self.fname)
1803
1318
  end
1804
1319
 
1805
1320
  def put_file_ref_to_clipboard
1806
- set_clipboard(self.fname + ":#{@lpos}")
1321
+ vma.clipboard.set(self.fname + ":#{@lpos}")
1807
1322
  end
1808
1323
 
1809
1324
  def delete_active_selection() #TODO: remove this function
1810
1325
  return if !@visual_mode #TODO: this should not happen
1811
1326
 
1812
1327
  _start, _end = get_visual_mode_range
1813
- set_clipboard(self[_start, _end])
1328
+ vma.clipboard.set(self[_start, _end])
1814
1329
  end_visual_mode
1815
1330
  end
1816
1331
 
@@ -1870,7 +1385,7 @@ class Buffer < String
1870
1385
  savepath = ""
1871
1386
 
1872
1387
  # If current file has fname, save to that fname
1873
- # Else search for previously open files and save to the directory of
1388
+ # Else search for previously opened files and save to the directory of
1874
1389
  # the last viewed file that has a filename
1875
1390
  # selffers[$buffer_history.reverse[1]].fname
1876
1391
 
@@ -1894,7 +1409,7 @@ class Buffer < String
1894
1409
  # Keeping this code from GTK3 in case want to do this manually at some point
1895
1410
  # if !confirmed
1896
1411
  # @unconfirmed_path = fpath
1897
- # if File.exists?(fpath) and File.file?(fpath)
1412
+ # if File.exist?(fpath) and File.file?(fpath)
1898
1413
  # params = {}
1899
1414
  # params["title"] = "The file already exists, overwrite? \r #{fpath}"
1900
1415
  # params["inputs"] = {}
@@ -1903,7 +1418,7 @@ class Buffer < String
1903
1418
  # params[:callback] = callback
1904
1419
  # PopupFormGenerator.new(params).run
1905
1420
  # return
1906
- # elsif File.exists?(fpath) #and File.directory?(fpath)
1421
+ # elsif File.exist?(fpath) #and File.directory?(fpath)
1907
1422
  # params = {}
1908
1423
  # params["title"] = "Can't write to the destination.\r #{fpath}"
1909
1424
  # params["inputs"] = {}
@@ -1995,44 +1510,6 @@ class Buffer < String
1995
1510
  write_contents_to_file(@fname)
1996
1511
  end
1997
1512
 
1998
- # Indents whole buffer using external program
1999
- def indent()
2000
- file = Tempfile.new("out")
2001
- infile = Tempfile.new("in")
2002
- file.write(self.to_s)
2003
- file.flush
2004
- bufc = "FOO"
2005
-
2006
- tmppos = @pos
2007
-
2008
- message("Auto format #{@fname}")
2009
-
2010
- ftype = get_file_type()
2011
- if ["chdr", "c", "cpp", "cpphdr"].include?(ftype)
2012
-
2013
- #C/C++/Java/JavaScript/Objective-C/Protobuf code
2014
- system("clang-format -style='{BasedOnStyle: LLVM, ColumnLimit: 100, SortIncludes: false}' #{file.path} > #{infile.path}")
2015
- bufc = IO.read(infile.path)
2016
- elsif ftype == "Javascript"
2017
- cmd = "clang-format #{file.path} > #{infile.path}'"
2018
- debug cmd
2019
- system(cmd)
2020
- bufc = IO.read(infile.path)
2021
- elsif ftype == "ruby"
2022
- cmd = "rufo #{file.path}"
2023
- debug cmd
2024
- system(cmd)
2025
- bufc = IO.read(file.path)
2026
- else
2027
- message("No auto-format handler for file of type: #{ftype}")
2028
- return
2029
- end
2030
- self.update_content(bufc)
2031
- center_on_current_line #TODO: needed?
2032
- file.close; file.unlink
2033
- infile.close; infile.unlink
2034
- end
2035
-
2036
1513
  def close()
2037
1514
  idx = vma.buffers.get_buffer_by_id(@id)
2038
1515
  vma.buffers.close_buffer(idx)