vimamsa 0.1.5 → 0.1.8
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/exe/vimamsa +4 -2
 - data/lib/vimamsa/ack.rb +0 -4
 - data/lib/vimamsa/actions.rb +26 -38
 - data/lib/vimamsa/buffer.rb +117 -60
 - data/lib/vimamsa/buffer_list.rb +27 -3
 - data/lib/vimamsa/buffer_manager.rb +83 -0
 - data/lib/vimamsa/conf.rb +21 -0
 - data/lib/vimamsa/debug.rb +9 -8
 - data/lib/vimamsa/easy_jump.rb +129 -125
 - data/lib/vimamsa/editor.rb +66 -48
 - data/lib/vimamsa/file_finder.rb +7 -8
 - data/lib/vimamsa/file_history.rb +15 -8
 - data/lib/vimamsa/file_manager.rb +9 -8
 - data/lib/vimamsa/gui.rb +560 -0
 - data/lib/vimamsa/gui_menu.rb +110 -0
 - data/lib/vimamsa/gui_select_window.rb +177 -0
 - data/lib/vimamsa/gui_sourceview.rb +294 -0
 - data/lib/vimamsa/hyper_plain_text.rb +8 -10
 - data/lib/vimamsa/{default_key_bindings.rb → key_actions.rb} +71 -190
 - data/lib/vimamsa/key_binding_tree.rb +48 -36
 - data/lib/vimamsa/key_bindings_vimlike.rb +260 -0
 - data/lib/vimamsa/macro.rb +6 -6
 - data/lib/vimamsa/main.rb +1 -2
 - data/lib/vimamsa/rbvma.rb +25 -1031
 - data/lib/vimamsa/search.rb +1 -5
 - data/lib/vimamsa/search_replace.rb +4 -6
 - data/lib/vimamsa/version.rb +1 -1
 - data/vimamsa.gemspec +1 -1
 - metadata +12 -5
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6000318b31060bff83029148c2cf47cc6ff8c5939d2fc1d54951a54e8b49a538
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 500cd81fe9bd605276a0802f182980c5a93d77ab5d2221548586673e85a85832
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 8b687b1b72df46bd9bc35622b239e9525e2dc15884f1066557e82c474e99c280577a32a3a7f60a776f5b6be0866dc86c79e2b364780413821a491160ad73875f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d5e8da0e6263f74f27ee84781efdea5126411a68ace27d244da6c5b9203924196d10bbe91541319af91539089c6391dfadfde3f76cbac6f475b2002c1fbaa16c
         
     | 
    
        data/exe/vimamsa
    CHANGED
    
    | 
         @@ -16,7 +16,9 @@ listen_dir = File.expand_path("~/.vimamsa/listen") 
     | 
|
| 
       16 
16 
     | 
    
         
             
            if File.exist?(listen_dir) and !ARGV[0].nil?
         
     | 
| 
       17 
17 
     | 
    
         
             
              tmpf = Tempfile.new("vmarun", listen_dir)
         
     | 
| 
       18 
18 
     | 
    
         
             
              fp = tmpf.path
         
     | 
| 
       19 
     | 
    
         
            -
               
     | 
| 
      
 19 
     | 
    
         
            +
              paramfn = File.expand_path(ARGV[0])
         
     | 
| 
      
 20 
     | 
    
         
            +
              puts paramfn
         
     | 
| 
      
 21 
     | 
    
         
            +
              tmpf.write(paramfn)
         
     | 
| 
       20 
22 
     | 
    
         
             
              tmpf.close
         
     | 
| 
       21 
23 
     | 
    
         
             
              tstart = Time.new
         
     | 
| 
       22 
24 
     | 
    
         
             
              timeout = false
         
     | 
| 
         @@ -36,5 +38,5 @@ $LOAD_PATH.unshift(File.expand_path("ext")) 
     | 
|
| 
       36 
38 
     | 
    
         
             
            require "vimamsa"
         
     | 
| 
       37 
39 
     | 
    
         
             
            # Ilib:ext
         
     | 
| 
       38 
40 
     | 
    
         
             
            # r rbvma -e "puts VMA.new.run"
         
     | 
| 
       39 
     | 
    
         
            -
            $vmag =  
     | 
| 
      
 41 
     | 
    
         
            +
            $vmag = VMAgui.new()
         
     | 
| 
       40 
42 
     | 
    
         
             
            $vmag.run
         
     | 
    
        data/lib/vimamsa/ack.rb
    CHANGED
    
    
    
        data/lib/vimamsa/actions.rb
    CHANGED
    
    | 
         @@ -1,73 +1,62 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Action
         
     | 
| 
       2 
     | 
    
         
            -
              attr_accessor :id, :method_name, :method
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_accessor :id, :method_name, :method, :opt
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
              def initialize(id, method_name, method,  
     | 
| 
      
 4 
     | 
    
         
            +
              def initialize(id, method_name, method, opt = {})
         
     | 
| 
       5 
5 
     | 
    
         
             
                @method_name = method_name
         
     | 
| 
       6 
6 
     | 
    
         
             
                @id = id
         
     | 
| 
       7 
7 
     | 
    
         
             
                @method = method
         
     | 
| 
      
 8 
     | 
    
         
            +
                @opt = opt
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       8 
10 
     | 
    
         
             
                $actions[id] = self
         
     | 
| 
       9 
11 
     | 
    
         
             
              end
         
     | 
| 
       10 
12 
     | 
    
         
             
            end
         
     | 
| 
       11 
13 
     | 
    
         | 
| 
       12 
14 
     | 
    
         
             
            $actions = {}
         
     | 
| 
       13 
15 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              # if callfunc.class == Proc
         
     | 
| 
       16 
     | 
    
         
            -
                # a = Action.new(id, name, callfunc, scope)
         
     | 
| 
       17 
     | 
    
         
            -
              # else
         
     | 
| 
       18 
     | 
    
         
            -
                # a = Action.new(id, name, method(callfunc), scope)
         
     | 
| 
       19 
     | 
    
         
            -
              # end
         
     | 
| 
       20 
     | 
    
         
            -
            # end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            def reg_act(id, callfunc, name = "", scope = [])
         
     | 
| 
      
 16 
     | 
    
         
            +
            def reg_act(id, callfunc, name = "", opt = {})
         
     | 
| 
       23 
17 
     | 
    
         
             
              if callfunc.class == Proc
         
     | 
| 
       24 
     | 
    
         
            -
                a = Action.new(id, name, callfunc,  
     | 
| 
      
 18 
     | 
    
         
            +
                a = Action.new(id, name, callfunc, opt)
         
     | 
| 
       25 
19 
     | 
    
         
             
              else
         
     | 
| 
       26 
20 
     | 
    
         
             
                begin
         
     | 
| 
       27 
21 
     | 
    
         
             
                  m = method(callfunc)
         
     | 
| 
       28 
22 
     | 
    
         
             
                rescue NameError
         
     | 
| 
       29 
23 
     | 
    
         
             
                  m = method("missing_callfunc")
         
     | 
| 
       30 
24 
     | 
    
         
             
                end
         
     | 
| 
       31 
     | 
    
         
            -
                a = Action.new(id, name, m,  
     | 
| 
      
 25 
     | 
    
         
            +
                a = Action.new(id, name, m, opt)
         
     | 
| 
       32 
26 
     | 
    
         
             
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
              return a
         
     | 
| 
       33 
28 
     | 
    
         
             
            end
         
     | 
| 
       34 
29 
     | 
    
         | 
| 
       35 
30 
     | 
    
         
             
            def missing_callfunc
         
     | 
| 
       36 
     | 
    
         
            -
               
     | 
| 
      
 31 
     | 
    
         
            +
              debug "missing_callfunc"
         
     | 
| 
       37 
32 
     | 
    
         
             
            end
         
     | 
| 
       38 
33 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
      
 34 
     | 
    
         
            +
            #TODO: remove
         
     | 
| 
       40 
35 
     | 
    
         
             
            def call(id)
         
     | 
| 
      
 36 
     | 
    
         
            +
              call_action(id)
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            def call_action(id)
         
     | 
| 
       41 
40 
     | 
    
         
             
              a = $actions[id]
         
     | 
| 
       42 
41 
     | 
    
         
             
              if a
         
     | 
| 
       43 
     | 
    
         
            -
                #        Ripl.start :binding => binding
         
     | 
| 
       44 
42 
     | 
    
         
             
                a.method.call()
         
     | 
| 
      
 43 
     | 
    
         
            +
              else
         
     | 
| 
      
 44 
     | 
    
         
            +
                message("Unknown action: " + id.inspect)
         
     | 
| 
       45 
45 
     | 
    
         
             
              end
         
     | 
| 
       46 
46 
     | 
    
         
             
            end
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
            def search_actions()
         
     | 
| 
       49 
49 
     | 
    
         
             
              l = []
         
     | 
| 
       50 
50 
     | 
    
         
             
              $select_keys = ["h", "l", "f", "d", "s", "a", "g", "z"]
         
     | 
| 
       51 
     | 
    
         
            -
               
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
              gui_select_update_window(l, $select_keys.collect { |x| x.upcase },
         
     | 
| 
      
 52 
     | 
    
         
            +
                                       "search_actions_select_callback",
         
     | 
| 
      
 53 
     | 
    
         
            +
                                       "search_actions_update_callback")
         
     | 
| 
       54 
54 
     | 
    
         
             
            end
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
            $item_list = []
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            def search_actions_update_callback(search_str = "")
         
     | 
| 
       59 
     | 
    
         
            -
              #    item_list = $actions.collect {|x| x[1].id.to_s}
         
     | 
| 
       60 
59 
     | 
    
         
             
              return [] if search_str == ""
         
     | 
| 
       61 
     | 
    
         
            -
              # item_list = $action_list.collect { |x|
         
     | 
| 
       62 
     | 
    
         
            -
                # actname = x[:action].to_s
         
     | 
| 
       63 
     | 
    
         
            -
                # if x[:action].class == Symbol
         
     | 
| 
       64 
     | 
    
         
            -
                  # mn = $actions[x[:action]].method_name
         
     | 
| 
       65 
     | 
    
         
            -
                  # actname = mn if mn.size > 0
         
     | 
| 
       66 
     | 
    
         
            -
                # end
         
     | 
| 
       67 
     | 
    
         
            -
                # r = { :str => actname, :key => x[:key], :action => x[:action] }
         
     | 
| 
       68 
     | 
    
         
            -
              # }
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
              # => {:str=>"insert_new_line", :key=>"I return", :action=>:insert_new_line}
         
     | 
| 
       71 
60 
     | 
    
         | 
| 
       72 
61 
     | 
    
         
             
              item_list2 = []
         
     | 
| 
       73 
62 
     | 
    
         
             
              for act_id in $actions.keys
         
     | 
| 
         @@ -81,16 +70,15 @@ def search_actions_update_callback(search_str = "") 
     | 
|
| 
       81 
70 
     | 
    
         
             
                end
         
     | 
| 
       82 
71 
     | 
    
         
             
                item_list2 << item
         
     | 
| 
       83 
72 
     | 
    
         
             
              end
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
       85 
74 
     | 
    
         
             
              item_list = item_list2
         
     | 
| 
       86 
75 
     | 
    
         | 
| 
       87 
76 
     | 
    
         
             
              a = filter_items(item_list, 0, search_str)
         
     | 
| 
       88 
     | 
    
         
            -
               
     | 
| 
      
 77 
     | 
    
         
            +
              debug a.inspect
         
     | 
| 
       89 
78 
     | 
    
         | 
| 
       90 
79 
     | 
    
         
             
              r = a.collect { |x| [x[0][0], 0, x] }
         
     | 
| 
       91 
     | 
    
         
            -
               
     | 
| 
      
 80 
     | 
    
         
            +
              debug r.inspect
         
     | 
| 
       92 
81 
     | 
    
         
             
              $item_list = r
         
     | 
| 
       93 
     | 
    
         
            -
              # Ripl.start :binding => binding
         
     | 
| 
       94 
82 
     | 
    
         | 
| 
       95 
83 
     | 
    
         
             
              r = a.collect { |x| ["[#{x[0][:key]}] #{x[0][:str]}", 0, x] }
         
     | 
| 
       96 
84 
     | 
    
         
             
              return r
         
     | 
| 
         @@ -100,13 +88,13 @@ def search_actions_select_callback(search_str, idx) 
     | 
|
| 
       100 
88 
     | 
    
         
             
              item = $item_list[idx][2]
         
     | 
| 
       101 
89 
     | 
    
         
             
              acc = item[0][:action]
         
     | 
| 
       102 
90 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
               
     | 
| 
       104 
     | 
    
         
            -
               
     | 
| 
      
 91 
     | 
    
         
            +
              debug "Selected:" + acc.to_s
         
     | 
| 
      
 92 
     | 
    
         
            +
              gui_select_window_close(0)
         
     | 
| 
       105 
93 
     | 
    
         | 
| 
       106 
94 
     | 
    
         
             
              if acc.class == String
         
     | 
| 
       107 
95 
     | 
    
         
             
                eval(acc)
         
     | 
| 
       108 
96 
     | 
    
         
             
              elsif acc.class == Symbol
         
     | 
| 
       109 
     | 
    
         
            -
                 
     | 
| 
      
 97 
     | 
    
         
            +
                debug "Symbol"
         
     | 
| 
       110 
98 
     | 
    
         
             
                call(acc)
         
     | 
| 
       111 
99 
     | 
    
         
             
              end
         
     | 
| 
       112 
100 
     | 
    
         
             
            end
         
     | 
| 
         @@ -118,7 +106,7 @@ def filter_items(item_list, item_key, search_str) 
     | 
|
| 
       118 
106 
     | 
    
         
             
                [item, srn_dst(search_str, item[:str])]
         
     | 
| 
       119 
107 
     | 
    
         
             
              end
         
     | 
| 
       120 
108 
     | 
    
         
             
              scores.sort_by! { |x| -x[1] }
         
     | 
| 
       121 
     | 
    
         
            -
               
     | 
| 
      
 109 
     | 
    
         
            +
              debug scores.inspect
         
     | 
| 
       122 
110 
     | 
    
         
             
              scores = scores[0..30]
         
     | 
| 
       123 
111 
     | 
    
         | 
| 
       124 
112 
     | 
    
         
             
              return scores
         
     | 
    
        data/lib/vimamsa/buffer.rb
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require "digest"
         
     | 
| 
       2 
2 
     | 
    
         
             
            require "tempfile"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "fileutils"
         
     | 
| 
       3 
4 
     | 
    
         
             
            require "pathname"
         
     | 
| 
       4 
5 
     | 
    
         
             
            require "openssl"
         
     | 
| 
       5 
6 
     | 
    
         
             
            require "ripl/multi_line"
         
     | 
| 
         @@ -15,7 +16,7 @@ class Buffer < String 
     | 
|
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
              attr_reader :pos, :lpos, :cpos, :deltas, :edit_history, :fname, :call_func, :pathname, :basename, :update_highlight, :marks, :is_highlighted, :syntax_detect_failed, :id, :lang
         
     | 
| 
       17 
18 
     | 
    
         
             
              attr_writer :call_func, :update_highlight
         
     | 
| 
       18 
     | 
    
         
            -
              attr_accessor : 
     | 
| 
      
 19 
     | 
    
         
            +
              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
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
              @@num_buffers = 0
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
         @@ -26,8 +27,8 @@ class Buffer < String 
     | 
|
| 
       26 
27 
     | 
    
         
             
                @lang = nil
         
     | 
| 
       27 
28 
     | 
    
         
             
                @id = @@num_buffers
         
     | 
| 
       28 
29 
     | 
    
         
             
                @@num_buffers += 1
         
     | 
| 
       29 
     | 
    
         
            -
                 
     | 
| 
       30 
     | 
    
         
            -
                 
     | 
| 
      
 30 
     | 
    
         
            +
                gui_create_buffer(@id)
         
     | 
| 
      
 31 
     | 
    
         
            +
                debug "NEW BUFFER fn=#{fname} ID:#{@id}"
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
                @module = nil
         
     | 
| 
       33 
34 
     | 
    
         | 
| 
         @@ -58,7 +59,7 @@ class Buffer < String 
     | 
|
| 
       58 
59 
     | 
    
         
             
                end
         
     | 
| 
       59 
60 
     | 
    
         | 
| 
       60 
61 
     | 
    
         
             
                t1 = Time.now
         
     | 
| 
       61 
     | 
    
         
            -
                 
     | 
| 
      
 62 
     | 
    
         
            +
                gui_set_current_buffer(@id)
         
     | 
| 
       62 
63 
     | 
    
         
             
                gui_set_window_title(@title, @subtitle)
         
     | 
| 
       63 
64 
     | 
    
         | 
| 
       64 
65 
     | 
    
         
             
                set_content(str)
         
     | 
| 
         @@ -70,13 +71,29 @@ class Buffer < String 
     | 
|
| 
       70 
71 
     | 
    
         
             
                @active_kbd_mode = nil
         
     | 
| 
       71 
72 
     | 
    
         
             
              end
         
     | 
| 
       72 
73 
     | 
    
         | 
| 
      
 74 
     | 
    
         
            +
              def list_str()
         
     | 
| 
      
 75 
     | 
    
         
            +
                if @fname.nil?
         
     | 
| 
      
 76 
     | 
    
         
            +
                  x = @title
         
     | 
| 
      
 77 
     | 
    
         
            +
                else
         
     | 
| 
      
 78 
     | 
    
         
            +
                  x = @fname
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
                return x
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
       73 
83 
     | 
    
         
             
              def set_active
         
     | 
| 
       74 
84 
     | 
    
         
             
                if !@active_kbd_mode.nil?
         
     | 
| 
       75 
85 
     | 
    
         
             
                  $kbd.set_mode(@active_kbd_mode)
         
     | 
| 
       76 
86 
     | 
    
         
             
                else
         
     | 
| 
       77 
87 
     | 
    
         
             
                  $kbd.set_mode_to_default
         
     | 
| 
       78 
88 
     | 
    
         
             
                end
         
     | 
| 
       79 
     | 
    
         
            -
                #  
     | 
| 
      
 89 
     | 
    
         
            +
                # gui_set_current_buffer(@id)
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
              def set_executable
         
     | 
| 
      
 93 
     | 
    
         
            +
                if File.exists?(@fname)
         
     | 
| 
      
 94 
     | 
    
         
            +
                  FileUtils.chmod("+x", @fname)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  message("Set executable: #{@fname}")
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
       80 
97 
     | 
    
         
             
              end
         
     | 
| 
       81 
98 
     | 
    
         | 
| 
       82 
99 
     | 
    
         
             
              def detect_file_language
         
     | 
| 
         @@ -96,7 +113,7 @@ class Buffer < String 
     | 
|
| 
       96 
113 
     | 
    
         
             
                # lang.get_metadata("block-comment-end")
         
     | 
| 
       97 
114 
     | 
    
         
             
                @lang_nfo = lang
         
     | 
| 
       98 
115 
     | 
    
         
             
                if !lang.nil? and !lang.id.nil?
         
     | 
| 
       99 
     | 
    
         
            -
                   
     | 
| 
      
 116 
     | 
    
         
            +
                  debug "Guessed LANG: #{lang.id}"
         
     | 
| 
       100 
117 
     | 
    
         
             
                  @lang = lang.id
         
     | 
| 
       101 
118 
     | 
    
         
             
                end
         
     | 
| 
       102 
119 
     | 
    
         | 
| 
         @@ -105,11 +122,32 @@ class Buffer < String 
     | 
|
| 
       105 
122 
     | 
    
         
             
                end
         
     | 
| 
       106 
123 
     | 
    
         
             
              end
         
     | 
| 
       107 
124 
     | 
    
         | 
| 
      
 125 
     | 
    
         
            +
              def view()
         
     | 
| 
      
 126 
     | 
    
         
            +
              	# Get the VSourceView < GtkSource::View object corresponding to this buffer
         
     | 
| 
      
 127 
     | 
    
         
            +
                return vma.gui.buffers[@id]
         
     | 
| 
      
 128 
     | 
    
         
            +
              end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
       108 
130 
     | 
    
         
             
              def add_image(imgpath, pos)
         
     | 
| 
       109 
131 
     | 
    
         
             
                return if !is_legal_pos(pos)
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                 
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                pixbuf = GdkPixbuf::Pixbuf.new(:file => imgpath)
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                #  puts GdkPixbuf::InterpType.constants
         
     | 
| 
      
 136 
     | 
    
         
            +
                # GdkPixbuf::InterpType::HYPER
         
     | 
| 
      
 137 
     | 
    
         
            +
                # https://docs.gtk.org/gdk-pixbuf/enum.InterpType.html#bilinear
         
     | 
| 
      
 138 
     | 
    
         
            +
                # https://docs.gtk.org/gdk-pixbuf/method.Pixbuf.scale_simple.html
         
     | 
| 
      
 139 
     | 
    
         
            +
                imglimit = view.visible_rect.width - 5
         
     | 
| 
      
 140 
     | 
    
         
            +
                if pixbuf.width > imglimit
         
     | 
| 
      
 141 
     | 
    
         
            +
                  nwidth = imglimit
         
     | 
| 
      
 142 
     | 
    
         
            +
                  nheight = (pixbuf.height * (imglimit.to_f / pixbuf.width)).to_i
         
     | 
| 
      
 143 
     | 
    
         
            +
                  pixbuf = pixbuf.scale_simple(nwidth, nheight, GdkPixbuf::InterpType::HYPER)
         
     | 
| 
      
 144 
     | 
    
         
            +
                end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                vbuf = view.buffer
         
     | 
| 
      
 147 
     | 
    
         
            +
                itr = vbuf.get_iter_at(:offset => pos)
         
     | 
| 
      
 148 
     | 
    
         
            +
                itr2 = vbuf.get_iter_at(:offset => pos + 1)
         
     | 
| 
      
 149 
     | 
    
         
            +
                vbuf.delete(itr, itr2)
         
     | 
| 
      
 150 
     | 
    
         
            +
                vbuf.insert(itr, pixbuf)
         
     | 
| 
       113 
151 
     | 
    
         
             
              end
         
     | 
| 
       114 
152 
     | 
    
         | 
| 
       115 
153 
     | 
    
         
             
              def is_legal_pos(pos, op = :read)
         
     | 
| 
         @@ -141,7 +179,6 @@ class Buffer < String 
     | 
|
| 
       141 
179 
     | 
    
         
             
                b = " \n"
         
     | 
| 
       142 
180 
     | 
    
         
             
                txt = a + b
         
     | 
| 
       143 
181 
     | 
    
         
             
                insert_txt_at(txt, lr.end + 1)
         
     | 
| 
       144 
     | 
    
         
            -
                qt_process_deltas
         
     | 
| 
       145 
182 
     | 
    
         
             
                imgpos = lr.end + 1 + a.size
         
     | 
| 
       146 
183 
     | 
    
         
             
                add_image(fname, imgpos)
         
     | 
| 
       147 
184 
     | 
    
         
             
              end
         
     | 
| 
         @@ -191,25 +228,25 @@ class Buffer < String 
     | 
|
| 
       191 
228 
     | 
    
         
             
                ok = true
         
     | 
| 
       192 
229 
     | 
    
         
             
                @bt.each_line { |r|
         
     | 
| 
       193 
230 
     | 
    
         
             
                  if lines[i] != r #or true
         
     | 
| 
       194 
     | 
    
         
            -
                     
     | 
| 
       195 
     | 
    
         
            -
                     
     | 
| 
       196 
     | 
    
         
            -
                    #  
     | 
| 
       197 
     | 
    
         
            -
                    #  
     | 
| 
       198 
     | 
    
         
            -
                     
     | 
| 
       199 
     | 
    
         
            -
                     
     | 
| 
       200 
     | 
    
         
            -
                     
     | 
| 
      
 231 
     | 
    
         
            +
                    debug "NO MATCH FOR LINE:"
         
     | 
| 
      
 232 
     | 
    
         
            +
                    debug "i=#{i}["
         
     | 
| 
      
 233 
     | 
    
         
            +
                    # debug "[orig]pos=#{leaf.pos} |#{leaf.data}|"
         
     | 
| 
      
 234 
     | 
    
         
            +
                    # debug "spos=#{spos} nchar=#{leaf.nchar} epos=#{epos} a[]=\nr=|#{r}|"
         
     | 
| 
      
 235 
     | 
    
         
            +
                    debug "fromtree:|#{r}|"
         
     | 
| 
      
 236 
     | 
    
         
            +
                    debug "frombuf:|#{lines[i]}"
         
     | 
| 
      
 237 
     | 
    
         
            +
                    debug "]"
         
     | 
| 
       201 
238 
     | 
    
         
             
                    ok = false
         
     | 
| 
       202 
239 
     | 
    
         
             
                  end
         
     | 
| 
       203 
240 
     | 
    
         
             
                  i += 1
         
     | 
| 
       204 
241 
     | 
    
         
             
                }
         
     | 
| 
       205 
242 
     | 
    
         | 
| 
       206 
     | 
    
         
            -
                 
     | 
| 
       207 
     | 
    
         
            -
                 
     | 
| 
      
 243 
     | 
    
         
            +
                debug "BT: NO ERRORS" if ok
         
     | 
| 
      
 244 
     | 
    
         
            +
                debug "BT: ERRORS" if !ok
         
     | 
| 
       208 
245 
     | 
    
         
             
              end
         
     | 
| 
       209 
246 
     | 
    
         | 
| 
       210 
247 
     | 
    
         
             
              def set_content(str)
         
     | 
| 
       211 
248 
     | 
    
         
             
                @encrypted_str = nil
         
     | 
| 
       212 
     | 
    
         
            -
                @ 
     | 
| 
      
 249 
     | 
    
         
            +
                @gui_update_highlight = true
         
     | 
| 
       213 
250 
     | 
    
         
             
                @ftype = nil
         
     | 
| 
       214 
251 
     | 
    
         
             
                if str[0..10] == "VMACRYPT001"
         
     | 
| 
       215 
252 
     | 
    
         
             
                  @encrypted_str = str[11..-1]
         
     | 
| 
         @@ -263,7 +300,7 @@ class Buffer < String 
     | 
|
| 
       263 
300 
     | 
    
         
             
                @update_hl_startpos = 0 #TODO
         
     | 
| 
       264 
301 
     | 
    
         
             
                @update_hl_endpos = self.size - 1
         
     | 
| 
       265 
302 
     | 
    
         | 
| 
       266 
     | 
    
         
            -
                 
     | 
| 
      
 303 
     | 
    
         
            +
                gui_set_buffer_contents(@id, self.to_s)
         
     | 
| 
       267 
304 
     | 
    
         | 
| 
       268 
305 
     | 
    
         
             
                # add_hl_update(@update_hl_startpos, @update_hl_endpos)
         
     | 
| 
       269 
306 
     | 
    
         
             
              end
         
     | 
| 
         @@ -272,6 +309,12 @@ class Buffer < String 
     | 
|
| 
       272 
309 
     | 
    
         
             
                @fname = filename
         
     | 
| 
       273 
310 
     | 
    
         
             
                @pathname = Pathname.new(fname) if @fname
         
     | 
| 
       274 
311 
     | 
    
         
             
                @basename = @pathname.basename if @fname
         
     | 
| 
      
 312 
     | 
    
         
            +
             
     | 
| 
      
 313 
     | 
    
         
            +
                @title = File.basename(@fname)
         
     | 
| 
      
 314 
     | 
    
         
            +
                @dirname = File.dirname(@fname)
         
     | 
| 
      
 315 
     | 
    
         
            +
                userhome = File.expand_path("~")
         
     | 
| 
      
 316 
     | 
    
         
            +
                @subtitle = @dirname.gsub(/^#{userhome}/, "~")
         
     | 
| 
      
 317 
     | 
    
         
            +
             
     | 
| 
       275 
318 
     | 
    
         
             
                detect_file_language
         
     | 
| 
       276 
319 
     | 
    
         
             
              end
         
     | 
| 
       277 
320 
     | 
    
         | 
| 
         @@ -417,11 +460,11 @@ class Buffer < String 
     | 
|
| 
       417 
460 
     | 
    
         
             
              end
         
     | 
| 
       418 
461 
     | 
    
         | 
| 
       419 
462 
     | 
    
         
             
              def update_index(pos, changeamount)
         
     | 
| 
       420 
     | 
    
         
            -
                #  
     | 
| 
      
 463 
     | 
    
         
            +
                # debug "pos #{pos}, changeamount #{changeamount}, @pos #{@pos}"
         
     | 
| 
       421 
464 
     | 
    
         
             
                @edit_pos_history.collect! { |x| r = x if x <= pos; r = x + changeamount if x > pos; r }
         
     | 
| 
       422 
465 
     | 
    
         
             
                # TODO: handle between removal case
         
     | 
| 
       423 
466 
     | 
    
         
             
                for k in @marks.keys
         
     | 
| 
       424 
     | 
    
         
            -
                  #             
     | 
| 
      
 467 
     | 
    
         
            +
                  #            debug "change(?): pos=#{pos}, k=#{k}, #{@marks[k]}, #{changeamount}"
         
     | 
| 
       425 
468 
     | 
    
         
             
                  if @marks[k] > pos
         
     | 
| 
       426 
469 
     | 
    
         
             
                    @marks[k] = @marks[k] + changeamount
         
     | 
| 
       427 
470 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -447,7 +490,6 @@ class Buffer < String 
     | 
|
| 
       447 
490 
     | 
    
         
             
                return if @edit_pos_history.empty?
         
     | 
| 
       448 
491 
     | 
    
         
             
                @edit_pos_history_i -= 1
         
     | 
| 
       449 
492 
     | 
    
         
             
                @edit_pos_history_i = @edit_pos_history.size - 1 if @edit_pos_history_i < 0
         
     | 
| 
       450 
     | 
    
         
            -
                #        Ripl.start :binding => binding
         
     | 
| 
       451 
493 
     | 
    
         
             
                debug "@edit_pos_history_i=#{@edit_pos_history_i}"
         
     | 
| 
       452 
494 
     | 
    
         
             
                set_pos(@edit_pos_history[-@edit_pos_history_i])
         
     | 
| 
       453 
495 
     | 
    
         
             
                center_on_current_line
         
     | 
| 
         @@ -563,8 +605,7 @@ class Buffer < String 
     | 
|
| 
       563 
605 
     | 
    
         
             
                ls = nil
         
     | 
| 
       564 
606 
     | 
    
         
             
                ls = @line_ends[a] if a != nil
         
     | 
| 
       565 
607 
     | 
    
         
             
                # if a != nil and ls != @line_ends[a]
         
     | 
| 
       566 
     | 
    
         
            -
                #  
     | 
| 
       567 
     | 
    
         
            -
                # Ripl.start :binding => binding
         
     | 
| 
      
 608 
     | 
    
         
            +
                # debug "NO MATCH @line_ends[a]"
         
     | 
| 
       568 
609 
     | 
    
         
             
                # end
         
     | 
| 
       569 
610 
     | 
    
         | 
| 
       570 
611 
     | 
    
         
             
                if ls == nil
         
     | 
| 
         @@ -576,7 +617,6 @@ class Buffer < String 
     | 
|
| 
       576 
617 
     | 
    
         
             
              end
         
     | 
| 
       577 
618 
     | 
    
         | 
| 
       578 
619 
     | 
    
         
             
              def get_line_end(pos)
         
     | 
| 
       579 
     | 
    
         
            -
                #Ripl.start :binding => binding
         
     | 
| 
       580 
620 
     | 
    
         
             
                return @line_ends.select { |x| x > pos }.min
         
     | 
| 
       581 
621 
     | 
    
         
             
              end
         
     | 
| 
       582 
622 
     | 
    
         | 
| 
         @@ -670,7 +710,7 @@ class Buffer < String 
     | 
|
| 
       670 
710 
     | 
    
         
             
                end
         
     | 
| 
       671 
711 
     | 
    
         | 
| 
       672 
712 
     | 
    
         
             
                debug "Scan line_end time: #{Time.now - t1}"
         
     | 
| 
       673 
     | 
    
         
            -
                # 
     | 
| 
      
 713 
     | 
    
         
            +
                #debug @line_ends
         
     | 
| 
       674 
714 
     | 
    
         
             
              end
         
     | 
| 
       675 
715 
     | 
    
         | 
| 
       676 
716 
     | 
    
         
             
              def sanity_check_line_ends()
         
     | 
| 
         @@ -687,7 +727,7 @@ class Buffer < String 
     | 
|
| 
       687 
727 
     | 
    
         
             
              end
         
     | 
| 
       688 
728 
     | 
    
         | 
| 
       689 
729 
     | 
    
         
             
              def update_bufpos_on_change(positions, xpos, changeamount)
         
     | 
| 
       690 
     | 
    
         
            -
                #  
     | 
| 
      
 730 
     | 
    
         
            +
                # debug "xpos=#{xpos} changeamount=#{changeamount}"
         
     | 
| 
       691 
731 
     | 
    
         
             
                positions.collect { |x|
         
     | 
| 
       692 
732 
     | 
    
         
             
                  r = nil
         
     | 
| 
       693 
733 
     | 
    
         
             
                  r = x if x < xpos
         
     | 
| 
         @@ -722,7 +762,7 @@ class Buffer < String 
     | 
|
| 
       722 
762 
     | 
    
         
             
                  i_nl = scan_indexes(changestr, /\n/)
         
     | 
| 
       723 
763 
     | 
    
         
             
                  i_nl.collect! { |x| x + pos }
         
     | 
| 
       724 
764 
     | 
    
         
             
                end
         
     | 
| 
       725 
     | 
    
         
            -
                #     
     | 
| 
      
 765 
     | 
    
         
            +
                #    debug "change:#{changeamount}"
         
     | 
| 
       726 
766 
     | 
    
         
             
                #TODO: this is the bottle neck in insert_txt action
         
     | 
| 
       727 
767 
     | 
    
         
             
                @line_ends.collect! { |x|
         
     | 
| 
       728 
768 
     | 
    
         
             
                  r = nil
         
     | 
| 
         @@ -752,7 +792,7 @@ class Buffer < String 
     | 
|
| 
       752 
792 
     | 
    
         
             
                elsif new_pos >= 0
         
     | 
| 
       753 
793 
     | 
    
         
             
                  @pos = new_pos
         
     | 
| 
       754 
794 
     | 
    
         
             
                end
         
     | 
| 
       755 
     | 
    
         
            -
                 
     | 
| 
      
 795 
     | 
    
         
            +
                gui_set_cursor_pos(@id, @pos)
         
     | 
| 
       756 
796 
     | 
    
         
             
                calculate_line_and_column_pos
         
     | 
| 
       757 
797 
     | 
    
         
             
              end
         
     | 
| 
       758 
798 
     | 
    
         | 
| 
         @@ -870,10 +910,10 @@ class Buffer < String 
     | 
|
| 
       870 
910 
     | 
    
         
             
                    range = @pos..wmarks[0]
         
     | 
| 
       871 
911 
     | 
    
         
             
                  end
         
     | 
| 
       872 
912 
     | 
    
         
             
                elsif range_id == :to_line_end
         
     | 
| 
       873 
     | 
    
         
            -
                   
     | 
| 
      
 913 
     | 
    
         
            +
                  debug "TO LINE END"
         
     | 
| 
       874 
914 
     | 
    
         
             
                  range = @pos..(@line_ends[@lpos] - 1)
         
     | 
| 
       875 
915 
     | 
    
         
             
                elsif range_id == :to_line_start
         
     | 
| 
       876 
     | 
    
         
            -
                   
     | 
| 
      
 916 
     | 
    
         
            +
                  debug "TO LINE START: #{@lpos}"
         
     | 
| 
       877 
917 
     | 
    
         | 
| 
       878 
918 
     | 
    
         
             
                  if @cpos == 0
         
     | 
| 
       879 
919 
     | 
    
         
             
                    range = nil
         
     | 
| 
         @@ -909,15 +949,15 @@ class Buffer < String 
     | 
|
| 
       909 
949 
     | 
    
         
             
              end
         
     | 
| 
       910 
950 
     | 
    
         | 
| 
       911 
951 
     | 
    
         
             
              def move(direction)
         
     | 
| 
       912 
     | 
    
         
            -
                 
     | 
| 
      
 952 
     | 
    
         
            +
                debug "cpos:#{@cpos} lpos:#{@lpos} @larger_cpos:#{@larger_cpos}"
         
     | 
| 
       913 
953 
     | 
    
         
             
                if direction == :forward_page
         
     | 
| 
       914 
     | 
    
         
            -
                   
     | 
| 
      
 954 
     | 
    
         
            +
                  debug "FORWARD PAGE"
         
     | 
| 
       915 
955 
     | 
    
         
             
                  visible_range = get_visible_area()
         
     | 
| 
       916 
956 
     | 
    
         
             
                  set_pos(visible_range[1])
         
     | 
| 
       917 
957 
     | 
    
         
             
                  top_where_cursor()
         
     | 
| 
       918 
958 
     | 
    
         
             
                end
         
     | 
| 
       919 
959 
     | 
    
         
             
                if direction == :backward_page
         
     | 
| 
       920 
     | 
    
         
            -
                   
     | 
| 
      
 960 
     | 
    
         
            +
                  debug "backward PAGE"
         
     | 
| 
       921 
961 
     | 
    
         
             
                  visible_range = get_visible_area()
         
     | 
| 
       922 
962 
     | 
    
         
             
                  set_pos(visible_range[0])
         
     | 
| 
       923 
963 
     | 
    
         
             
                  bottom_where_cursor()
         
     | 
| 
         @@ -1020,7 +1060,7 @@ class Buffer < String 
     | 
|
| 
       1020 
1060 
     | 
    
         
             
                if wtype == :url
         
     | 
| 
       1021 
1061 
     | 
    
         
             
                  open_url(word)
         
     | 
| 
       1022 
1062 
     | 
    
         
             
                elsif wtype == :linepointer
         
     | 
| 
       1023 
     | 
    
         
            -
                   
     | 
| 
      
 1063 
     | 
    
         
            +
                  debug word.inspect
         
     | 
| 
       1024 
1064 
     | 
    
         
             
                  jump_to_file(word[0], word[1])
         
     | 
| 
       1025 
1065 
     | 
    
         
             
                elsif wtype == :textfile
         
     | 
| 
       1026 
1066 
     | 
    
         
             
                  open_existing_file(word)
         
     | 
| 
         @@ -1087,10 +1127,10 @@ class Buffer < String 
     | 
|
| 
       1087 
1127 
     | 
    
         
             
                word_start = pos if word_start == nil
         
     | 
| 
       1088 
1128 
     | 
    
         
             
                word_end = pos if word_end == nil
         
     | 
| 
       1089 
1129 
     | 
    
         
             
                word = self[word_start..word_end]
         
     | 
| 
       1090 
     | 
    
         
            -
                 
     | 
| 
      
 1130 
     | 
    
         
            +
                debug "'WORD: #{word}'"
         
     | 
| 
       1091 
1131 
     | 
    
         
             
                message("'#{word}'")
         
     | 
| 
       1092 
1132 
     | 
    
         
             
                linep = get_file_line_pointer(word)
         
     | 
| 
       1093 
     | 
    
         
            -
                 
     | 
| 
      
 1133 
     | 
    
         
            +
                debug "linep'#{linep}'"
         
     | 
| 
       1094 
1134 
     | 
    
         
             
                path = File.expand_path(word)
         
     | 
| 
       1095 
1135 
     | 
    
         
             
                wtype = nil
         
     | 
| 
       1096 
1136 
     | 
    
         
             
                if is_url(word)
         
     | 
| 
         @@ -1103,7 +1143,7 @@ class Buffer < String 
     | 
|
| 
       1103 
1143 
     | 
    
         
             
                    wtype = :file
         
     | 
| 
       1104 
1144 
     | 
    
         
             
                  end
         
     | 
| 
       1105 
1145 
     | 
    
         
             
                  # elsif hpt_check_cur_word(word) #TODO: check only
         
     | 
| 
       1106 
     | 
    
         
            -
                  #  
     | 
| 
      
 1146 
     | 
    
         
            +
                  # debug word
         
     | 
| 
       1107 
1147 
     | 
    
         
             
                elsif linep != nil
         
     | 
| 
       1108 
1148 
     | 
    
         
             
                  wtype = :linepointer
         
     | 
| 
       1109 
1149 
     | 
    
         
             
                  word = linep
         
     | 
| 
         @@ -1131,14 +1171,14 @@ class Buffer < String 
     | 
|
| 
       1131 
1171 
     | 
    
         
             
                word_start = pos if word_start == nil
         
     | 
| 
       1132 
1172 
     | 
    
         
             
                word_end = pos if word_end == nil
         
     | 
| 
       1133 
1173 
     | 
    
         
             
                word = self[word_start..word_end]
         
     | 
| 
       1134 
     | 
    
         
            -
                 
     | 
| 
      
 1174 
     | 
    
         
            +
                debug "'#{word}'"
         
     | 
| 
       1135 
1175 
     | 
    
         
             
                message("'#{word}'")
         
     | 
| 
       1136 
     | 
    
         
            -
                # 
     | 
| 
      
 1176 
     | 
    
         
            +
                #debug wm
         
     | 
| 
       1137 
1177 
     | 
    
         
             
              end
         
     | 
| 
       1138 
1178 
     | 
    
         | 
| 
       1139 
1179 
     | 
    
         
             
              def jump_to_next_instance_of_word()
         
     | 
| 
       1140 
1180 
     | 
    
         
             
                if $kbd.last_action == $kbd.cur_action and @current_word != nil
         
     | 
| 
       1141 
     | 
    
         
            -
                  #  
     | 
| 
      
 1181 
     | 
    
         
            +
                  # debug "REPEATING *"
         
     | 
| 
       1142 
1182 
     | 
    
         
             
                else
         
     | 
| 
       1143 
1183 
     | 
    
         
             
                  start_search = [@pos - 150, 0].max
         
     | 
| 
       1144 
1184 
     | 
    
         | 
| 
         @@ -1237,10 +1277,10 @@ class Buffer < String 
     | 
|
| 
       1237 
1277 
     | 
    
         | 
| 
       1238 
1278 
     | 
    
         
             
                if target == FIRST_NON_WHITESPACE
         
     | 
| 
       1239 
1279 
     | 
    
         
             
                  l = current_line()
         
     | 
| 
       1240 
     | 
    
         
            -
                   
     | 
| 
      
 1280 
     | 
    
         
            +
                  debug l.inspect
         
     | 
| 
       1241 
1281 
     | 
    
         
             
                  @cpos = line(@lpos).size - 1
         
     | 
| 
       1242 
1282 
     | 
    
         
             
                  a = scan_indexes(l, /\S/)
         
     | 
| 
       1243 
     | 
    
         
            -
                   
     | 
| 
      
 1283 
     | 
    
         
            +
                  debug a.inspect
         
     | 
| 
       1244 
1284 
     | 
    
         
             
                  if a.any?
         
     | 
| 
       1245 
1285 
     | 
    
         
             
                    @cpos = a[0]
         
     | 
| 
       1246 
1286 
     | 
    
         
             
                  else
         
     | 
| 
         @@ -1324,9 +1364,9 @@ class Buffer < String 
     | 
|
| 
       1324 
1364 
     | 
    
         
             
                calculate_line_and_column_pos
         
     | 
| 
       1325 
1365 
     | 
    
         
             
              end
         
     | 
| 
       1326 
1366 
     | 
    
         | 
| 
       1327 
     | 
    
         
            -
              def execute_current_line_in_terminal()
         
     | 
| 
      
 1367 
     | 
    
         
            +
              def execute_current_line_in_terminal(autoclose = false)
         
     | 
| 
       1328 
1368 
     | 
    
         
             
                s = get_current_line
         
     | 
| 
       1329 
     | 
    
         
            -
                exec_in_terminal(s)
         
     | 
| 
      
 1369 
     | 
    
         
            +
                exec_in_terminal(s, autoclose)
         
     | 
| 
       1330 
1370 
     | 
    
         
             
              end
         
     | 
| 
       1331 
1371 
     | 
    
         | 
| 
       1332 
1372 
     | 
    
         
             
              def insert_new_line()
         
     | 
| 
         @@ -1346,8 +1386,17 @@ class Buffer < String 
     | 
|
| 
       1346 
1386 
     | 
    
         
             
                  # Indent start of new line based on last line
         
     | 
| 
       1347 
1387 
     | 
    
         
             
                  last_line = line(@lpos)
         
     | 
| 
       1348 
1388 
     | 
    
         
             
                  m = /^( +)([^ ]+|$)/.match(last_line)
         
     | 
| 
       1349 
     | 
    
         
            -
                   
     | 
| 
       1350 
     | 
    
         
            -
             
     | 
| 
      
 1389 
     | 
    
         
            +
                  if m
         
     | 
| 
      
 1390 
     | 
    
         
            +
                    c = c + " " * m[1].size if m
         
     | 
| 
      
 1391 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1392 
     | 
    
         
            +
             
     | 
| 
      
 1393 
     | 
    
         
            +
                  #if tab indent
         
     | 
| 
      
 1394 
     | 
    
         
            +
                  m = /^(\t+)([^\t]+|$)/.match(last_line)
         
     | 
| 
      
 1395 
     | 
    
         
            +
                  if m
         
     | 
| 
      
 1396 
     | 
    
         
            +
                    c = c + "\t" * m[1].size if m
         
     | 
| 
      
 1397 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1398 
     | 
    
         
            +
             
     | 
| 
      
 1399 
     | 
    
         
            +
                  # debug m.inspect
         
     | 
| 
       1351 
1400 
     | 
    
         
             
                end
         
     | 
| 
       1352 
1401 
     | 
    
         
             
                if mode == BEFORE
         
     | 
| 
       1353 
1402 
     | 
    
         
             
                  insert_pos = @pos
         
     | 
| 
         @@ -1360,8 +1409,8 @@ class Buffer < String 
     | 
|
| 
       1360 
1409 
     | 
    
         | 
| 
       1361 
1410 
     | 
    
         
             
                #self.insert(insert_pos,c)
         
     | 
| 
       1362 
1411 
     | 
    
         
             
                add_delta([insert_pos, INSERT, c.size, c], true)
         
     | 
| 
       1363 
     | 
    
         
            -
                # 
     | 
| 
       1364 
     | 
    
         
            -
                # 
     | 
| 
      
 1412 
     | 
    
         
            +
                #debug("encoding: #{c.encoding}")
         
     | 
| 
      
 1413 
     | 
    
         
            +
                #debug "c.size: #{c.size}"
         
     | 
| 
       1365 
1414 
     | 
    
         
             
                #recalc_line_ends #TODO: optimize?
         
     | 
| 
       1366 
1415 
     | 
    
         
             
                calculate_line_and_column_pos
         
     | 
| 
       1367 
1416 
     | 
    
         
             
                #need_redraw!
         
     | 
| 
         @@ -1435,7 +1484,7 @@ class Buffer < String 
     | 
|
| 
       1435 
1484 
     | 
    
         
             
                    text = $register[register]
         
     | 
| 
       1436 
1485 
     | 
    
         
             
                  end
         
     | 
| 
       1437 
1486 
     | 
    
         
             
                end
         
     | 
| 
       1438 
     | 
    
         
            -
                 
     | 
| 
      
 1487 
     | 
    
         
            +
                debug "PASTE: #{text}"
         
     | 
| 
       1439 
1488 
     | 
    
         | 
| 
       1440 
1489 
     | 
    
         
             
                return if text == ""
         
     | 
| 
       1441 
1490 
     | 
    
         | 
| 
         @@ -1481,7 +1530,6 @@ class Buffer < String 
     | 
|
| 
       1481 
1530 
     | 
    
         
             
              def start_visual_mode()
         
     | 
| 
       1482 
1531 
     | 
    
         
             
                @visual_mode = true
         
     | 
| 
       1483 
1532 
     | 
    
         
             
                @selection_start = @pos
         
     | 
| 
       1484 
     | 
    
         
            -
                qt_set_selection_start(@id, selection_start)
         
     | 
| 
       1485 
1533 
     | 
    
         
             
                $kbd.set_mode(:visual)
         
     | 
| 
       1486 
1534 
     | 
    
         
             
              end
         
     | 
| 
       1487 
1535 
     | 
    
         | 
| 
         @@ -1491,7 +1539,13 @@ class Buffer < String 
     | 
|
| 
       1491 
1539 
     | 
    
         
             
                return if !@visual_mode
         
     | 
| 
       1492 
1540 
     | 
    
         | 
| 
       1493 
1541 
     | 
    
         
             
                debug "COPY SELECTION"
         
     | 
| 
       1494 
     | 
    
         
            -
                 
     | 
| 
      
 1542 
     | 
    
         
            +
                s = self[get_visual_mode_range]
         
     | 
| 
      
 1543 
     | 
    
         
            +
                if x == :append
         
     | 
| 
      
 1544 
     | 
    
         
            +
                  debug "APPEND"
         
     | 
| 
      
 1545 
     | 
    
         
            +
                  s += "\n" + get_clipboard()
         
     | 
| 
      
 1546 
     | 
    
         
            +
                end
         
     | 
| 
      
 1547 
     | 
    
         
            +
             
     | 
| 
      
 1548 
     | 
    
         
            +
                set_clipboard(s)
         
     | 
| 
       1495 
1549 
     | 
    
         
             
                end_visual_mode
         
     | 
| 
       1496 
1550 
     | 
    
         
             
                return true
         
     | 
| 
       1497 
1551 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1636,10 +1690,14 @@ class Buffer < String 
     | 
|
| 
       1636 
1690 
     | 
    
         
             
                else
         
     | 
| 
       1637 
1691 
     | 
    
         
             
                  savepath = buflist.get_last_dir
         
     | 
| 
       1638 
1692 
     | 
    
         
             
                end
         
     | 
| 
       1639 
     | 
    
         
            -
                 
     | 
| 
       1640 
     | 
    
         
            -
                qt_file_saveas(savepath)
         
     | 
| 
      
 1693 
     | 
    
         
            +
                gui_file_saveas(savepath)
         
     | 
| 
       1641 
1694 
     | 
    
         
             
                # calls back to file_saveas
         
     | 
| 
       1642 
     | 
    
         
            -
             
     | 
| 
      
 1695 
     | 
    
         
            +
              end
         
     | 
| 
      
 1696 
     | 
    
         
            +
             
     | 
| 
      
 1697 
     | 
    
         
            +
              def save_as_callback(fpath)
         
     | 
| 
      
 1698 
     | 
    
         
            +
                set_filename(fpath)
         
     | 
| 
      
 1699 
     | 
    
         
            +
                save()
         
     | 
| 
      
 1700 
     | 
    
         
            +
                gui_set_window_title(@title, @subtitle) #TODO: if not active buffer?
         
     | 
| 
       1643 
1701 
     | 
    
         
             
              end
         
     | 
| 
       1644 
1702 
     | 
    
         | 
| 
       1645 
1703 
     | 
    
         
             
              def write_contents_to_file(fpath)
         
     | 
| 
         @@ -1720,14 +1778,13 @@ class Buffer < String 
     | 
|
| 
       1720 
1778 
     | 
    
         
             
              def backup()
         
     | 
| 
       1721 
1779 
     | 
    
         
             
                fname = @fname
         
     | 
| 
       1722 
1780 
     | 
    
         
             
                return if !@fname
         
     | 
| 
       1723 
     | 
    
         
            -
                message("Backup buffer #{fname}")
         
     | 
| 
       1724 
1781 
     | 
    
         
             
                spfx = fname.gsub("=", "==").gsub("/", "=:")
         
     | 
| 
       1725 
     | 
    
         
            -
                spath = File.expand_path(" 
     | 
| 
      
 1782 
     | 
    
         
            +
                spath = File.expand_path("~/.vimamsa/backup")
         
     | 
| 
       1726 
1783 
     | 
    
         
             
                return false if !can_save_to_directory?(spath)
         
     | 
| 
       1727 
1784 
     | 
    
         
             
                datetime = DateTime.now().strftime("%d%m%Y:%H%M%S")
         
     | 
| 
       1728 
1785 
     | 
    
         
             
                savepath = "#{spath}/#{spfx}_#{datetime}"
         
     | 
| 
      
 1786 
     | 
    
         
            +
                message("Backup buffer #{fname} TO: #{savepath}")
         
     | 
| 
       1729 
1787 
     | 
    
         
             
                if is_path_writable(savepath)
         
     | 
| 
       1730 
     | 
    
         
            -
                  debug "BACKUP BUFFER TO: #{savepath}"
         
     | 
| 
       1731 
1788 
     | 
    
         
             
                  write_contents_to_file(savepath)
         
     | 
| 
       1732 
1789 
     | 
    
         
             
                else
         
     | 
| 
       1733 
1790 
     | 
    
         
             
                  message("PATH NOT WRITABLE: #{savepath}")
         
     | 
    
        data/lib/vimamsa/buffer_list.rb
    CHANGED
    
    | 
         @@ -23,6 +23,7 @@ end 
     | 
|
| 
       23 
23 
     | 
    
         
             
            class BufferList < Array
         
     | 
| 
       24 
24 
     | 
    
         
             
              attr_reader :current_buf
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       26 
27 
     | 
    
         
             
              def <<(_buf)
         
     | 
| 
       27 
28 
     | 
    
         
             
                super
         
     | 
| 
       28 
29 
     | 
    
         
             
                $buffer = _buf
         
     | 
| 
         @@ -30,8 +31,8 @@ class BufferList < Array 
     | 
|
| 
       30 
31 
     | 
    
         
             
                $buffer_history << @current_buf
         
     | 
| 
       31 
32 
     | 
    
         
             
                @recent_ind = 0
         
     | 
| 
       32 
33 
     | 
    
         
             
                $hook.call(:change_buffer, $buffer)
         
     | 
| 
       33 
     | 
    
         
            -
                 
     | 
| 
       34 
     | 
    
         
            -
                 
     | 
| 
      
 34 
     | 
    
         
            +
                gui_set_current_buffer($buffer.id)
         
     | 
| 
      
 35 
     | 
    
         
            +
                gui_set_cursor_pos($buffer.id, $buffer.pos)
         
     | 
| 
       35 
36 
     | 
    
         
             
              end
         
     | 
| 
       36 
37 
     | 
    
         | 
| 
       37 
38 
     | 
    
         
             
              def switch()
         
     | 
| 
         @@ -57,6 +58,12 @@ class BufferList < Array 
     | 
|
| 
       57 
58 
     | 
    
         
             
                buf_idx = self.index { |b| b.fname == fname }
         
     | 
| 
       58 
59 
     | 
    
         
             
                return buf_idx
         
     | 
| 
       59 
60 
     | 
    
         
             
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
              
         
     | 
| 
      
 62 
     | 
    
         
            +
               def get_buffer_by_id(id)
         
     | 
| 
      
 63 
     | 
    
         
            +
                buf_idx = self.index { |b| b.id == id }
         
     | 
| 
      
 64 
     | 
    
         
            +
                return buf_idx
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
         
     | 
| 
       60 
67 
     | 
    
         | 
| 
       61 
68 
     | 
    
         
             
              def add_current_buf_to_history()
         
     | 
| 
       62 
69 
     | 
    
         
             
                @recent_ind = 0
         
     | 
| 
         @@ -83,7 +90,7 @@ class BufferList < Array 
     | 
|
| 
       83 
90 
     | 
    
         
             
                $hook.call(:change_buffer, $buffer)
         
     | 
| 
       84 
91 
     | 
    
         
             
                $buffer.set_active
         
     | 
| 
       85 
92 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                 
     | 
| 
      
 93 
     | 
    
         
            +
                gui_set_current_buffer($buffer.id)
         
     | 
| 
       87 
94 
     | 
    
         
             
                gui_set_window_title($buffer.title,$buffer.subtitle)   
         
     | 
| 
       88 
95 
     | 
    
         | 
| 
       89 
96 
     | 
    
         
             
                # hpt_scan_images() if $debug # experimental
         
     | 
| 
         @@ -138,7 +145,24 @@ class BufferList < Array 
     | 
|
| 
       138 
145 
     | 
    
         
             
                $buffer_history = bh.reverse
         
     | 
| 
       139 
146 
     | 
    
         
             
              end
         
     | 
| 
       140 
147 
     | 
    
         | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
              # Close buffer in the background
         
     | 
| 
      
 150 
     | 
    
         
            +
              # TODO: if open in another widget
         
     | 
| 
      
 151 
     | 
    
         
            +
              def close_other_buffer(buffer_i)
         
     | 
| 
      
 152 
     | 
    
         
            +
                return if self.size <= buffer_i
         
     | 
| 
      
 153 
     | 
    
         
            +
                return if @current_buf == buffer_i
         
     | 
| 
      
 154 
     | 
    
         
            +
                
         
     | 
| 
      
 155 
     | 
    
         
            +
                bufname = self[buffer_i].basename
         
     | 
| 
      
 156 
     | 
    
         
            +
                message("Closed buffer #{bufname}")
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                self.slice!(buffer_i)
         
     | 
| 
      
 159 
     | 
    
         
            +
                $buffer_history = $buffer_history.collect { |x| r = x; r = x - 1 if x > buffer_i; r = nil if x == buffer_i; r }.compact
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
              end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
       141 
164 
     | 
    
         
             
              def close_buffer(buffer_i, from_recent = false)
         
     | 
| 
      
 165 
     | 
    
         
            +
                return if buffer_i.nil?
         
     | 
| 
       142 
166 
     | 
    
         
             
                return if self.size <= buffer_i
         
     | 
| 
       143 
167 
     | 
    
         | 
| 
       144 
168 
     | 
    
         
             
                bufname = self[buffer_i].basename
         
     |