vimamsa 0.1.1 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 308c03fb0dac10cb6ae3b4a8c1b2f26380a109b8b95a921d76270b205de9db77
4
- data.tar.gz: 0b47122ab91f0edafca68685bc62be2af3fa37d863f04e09372e98c320eae9a7
3
+ metadata.gz: 82ad35212b7d75bfd5b702943ff3ed3180f7f1bd0b3912840e9ecfdf6126e467
4
+ data.tar.gz: 8eff2ee35e1ecc2d791ff1fbf4a881e6aada9b38d35ce11e356b316b536bc642
5
5
  SHA512:
6
- metadata.gz: f39988fe6c863a74ac346b69befdbbf775ea11b8812a4c0697f048dba95f111156b0f70f1af2f1ee548138278eb6c21bde8028726b24cef630b54fc2ae05a147
7
- data.tar.gz: 412fb7d4e00d45928a2a854d5d27fee51cd856cb86475043d3d32cc8307bea65e5363cc7fa7815cfe2310100cec817dcbb3f1239678eed54b86706f544c41f12
6
+ metadata.gz: 440d5d3b5b537fc9d3848d0f187df77dd045cde34643db356cd88ae5591e4e8c1c8596aac50f170ef7124dbd8784deddaff2d436f46dac0a8a180ccfeae4a9aa
7
+ data.tar.gz: c058e9db468553e29f617186ea0d65d04014307b7797c5dad013b5b3738fab57c0f7a44e7401ae9606e88581ac4f557fad3665c6dc8f784781619a310c114b95
data/.vma_project ADDED
File without changes
data/README.md CHANGED
@@ -1,35 +1,129 @@
1
1
  # Vimamsa
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/vimamsa`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ Vi/Vim -inspired experimental GUI-oriented text editor written with Ruby and GTK.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+
6
+ ## Requirements
7
+ - Ruby 2.0+
8
+ - GTK 3
6
9
 
7
10
  ## Installation
8
11
 
9
- Add this line to your application's Gemfile:
10
12
 
11
- ```ruby
12
- gem 'vimamsa'
13
+ On Ubuntu:
14
+ ```
15
+ sudo apt install ruby-dev
16
+ sudo gem install vimamsa
13
17
  ```
14
18
 
15
- And then execute:
19
+ Run:
20
+ ```
21
+ vimamsa
22
+ ```
16
23
 
17
- $ bundle
24
+ Packages for optional features:
25
+ ```
26
+ sudo apt install ack-grep clang-format
27
+ ```
18
28
 
19
- Or install it yourself as:
29
+ For customization, edit dot_vimamsarc.rb and copy to ~/.vimamsarc
20
30
 
21
- $ gem install vimamsa
31
+ ## Key bindings
22
32
 
23
- ## Usage
33
+ Key bindings are very much like in VIm. For details, see file lib/vimamsa/key_bindings.rb and lib/vimamsa/default_bindings.rb
24
34
 
25
- TODO: Write usage instructions here
35
+ Keys that work somewhat similarly as in Vim:
26
36
 
27
- ## Development
37
+ In Command mode:
38
+ ```
39
+ j k l h w b p P G f F ; 0 $ v i o J * / a A I u ctrl-r x
40
+ zz dd dw gg <linenum>G r<char>
41
+ ```
42
+
43
+ In Visual mode:
44
+ ```
45
+ d y gU gu
46
+ ```
28
47
 
29
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
48
+ Keys that work differently to Vim are documented in the tables below
49
+
50
+ Syntax:
51
+ ctrl! means press and immediate release of ctrl key. Triggered by key up event.
52
+ ctrl-x means press and hold ctrl key, press x
53
+
54
+ <table>
55
+ <colgroup>
56
+ <col style="text-align:center;"/>
57
+ <col style="text-align:left;"/>
58
+ </colgroup>
59
+
60
+ <thead> <tr> <th style="text-align:center;" colspan="4">Command mode keys</th> </tr> </thead>
61
+
62
+ <tbody>
63
+ <tr><th>Key</th><th>Action</th></tr>
64
+ <tr><td style="text-align:center;">ctrl!</td> <td style="text-align:left;">switch between command and insert modes</td> </tr>
65
+ <tr> <td style="text-align:center;">z</td> <td style="text-align:left;"> enter into BROWSE mode</td></tr>
66
+ <tr> <td style="text-align:center;">shift!</td> <td style="text-align:left;">save file</td> </tr>
67
+ <tr> <td style="text-align:center;">s</td> <td style="text-align:left;">Easy jump (Similar to Vim EasyMotion https://github.com/easymotion/vim-easymotion ) </td> </tr>
68
+ <tr> <td style="text-align:center;">tab</td> <td style="text-align:left;">switch betwen current and previous buffer/file</td></tr>
69
+ <tr> <td style="text-align:center;">enter</td> <td style="text-align:left;"> (when cursor on link) open url in browser </td></tr>
70
+ <tr> <td style="text-align:center;">enter</td> <td style="text-align:left;">(when cursor on /path/to/file.txt:linenum ) open file in editor, jump to linenum </td></tr>
71
+ <tr> <td style="text-align:center;">,a</td> <td style="text-align:left;">Search for string using ack
72
+ </td></tr>
73
+ <tr> <td style="text-align:center;">,b</td> <td style="text-align:left;"> Switch buffer (jump to other open file)</td></tr>
74
+ <tr> <td style="text-align:center;">,g</td> <td style="text-align:left;">search for input string inside current buffer</td></tr>
75
+ <tr> <td style="text-align:center;">,f</td> <td style="text-align:left;">Fuzzy filename search</td></tr>
76
+ <tr> <td style="text-align:center;">space c</td> <td style="text-align:left;">insert character "c"</td></tr>
77
+ </tbody>
78
+ </table>
79
+
80
+ <table>
81
+ <colgroup>
82
+ <col style="text-align:center;"/>
83
+ <col style="text-align:left;"/>
84
+ </colgroup>
85
+
86
+ <thead> <tr> <th style="text-align:center;" colspan="4">Insert mode keys (similar to bash or emacs)</th> </tr> </thead>
87
+
88
+ <tbody>
89
+ <tr> <td style="text-align:center;">ctrl! OR esc</td> <td style="text-align:left;">Switch to command mode</td></tr>
90
+ <tr> <td style="text-align:center;">ctrl-n</td> <td style="text-align:left;">Move to next line</td></tr>
91
+ <tr> <td style="text-align:center;">ctrl-p</td> <td style="text-align:left;">Move to previous line</td></tr>
92
+ <tr> <td style="text-align:center;">ctrl-a</td> <td style="text-align:left;">Move beginning of line</td></tr>
93
+ <tr> <td style="text-align:center;">ctrl-e</td> <td style="text-align:left;">Move to end of line</td></tr>
94
+ <tr> <td style="text-align:center;">ctrl-b</td> <td style="text-align:left;">Move backward one char</td></tr>
95
+ <tr> <td style="text-align:center;">ctrl-f</td> <td style="text-align:left;">Move forward one char</td></tr>
96
+ <tr> <td style="text-align:center;">alt-f</td> <td style="text-align:left;">Move forward one word</td></tr>
97
+ <tr> <td style="text-align:center;">alt-b</td> <td style="text-align:left;">Move backward one word</td></tr>
98
+ </tbody>
99
+ </table>
100
+
101
+
102
+ <table>
103
+ <colgroup>
104
+ <col style="text-align:center;"/>
105
+ <col style="text-align:left;"/>
106
+ </colgroup>
107
+
108
+ <thead> <tr> <th style="text-align:center;" colspan="4">Browse mode keys</th> </tr> </thead>
109
+
110
+ <tbody>
111
+ <tr> <td style="text-align:center;">h</td> <td style="text-align:left;">jump to previous buffer in history</td></tr>
112
+ <tr> <td style="text-align:center;">l</td> <td style="text-align:left;">jump to next buffer in history</td></tr>
113
+ <tr> <td style="text-align:center;">q</td> <td style="text-align:left;">jump to previous edited position</td></tr>
114
+ <tr> <td style="text-align:center;">w</td> <td style="text-align:left;">jump to next edited position</td></tr>
115
+ <tr> <td style="text-align:center;">j OR esc</td> <td style="text-align:left;">switch from browse to command mode</td></tr>
116
+ </tbody>
117
+ </table>
118
+
119
+ Bindings can be customized in ~/.vimamsarc
120
+ For example, to bind ctrl-n to action "create new file":
121
+ ```
122
+ bindkey 'C ctrl-n', 'create_new_file()'
123
+ ```
30
124
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
125
+ ## Current limitations
126
+ - UTF8 only
127
+ - Line endings with "\n"
32
128
 
33
- ## Contributing
34
129
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/vimamsa.
data/exe/vimamsa CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/ruby
2
- require 'ripl/multi_line'
2
+ require "ripl/multi_line"
3
+ require "tempfile"
3
4
  # Ripl.config[:multi_line_prompt] = ' > '
4
5
  require "pathname"
5
6
 
@@ -7,28 +8,35 @@ ENV["GTK_THEME"] = "Adwaita:dark"
7
8
 
8
9
  selfpath = __FILE__
9
10
  selfpath = File.readlink(selfpath) if File.lstat(selfpath).symlink?
10
- scriptdir = File.expand_path(File.dirname(selfpath)+"/..")
11
- puts scriptdir
12
- # Ripl.start :binding => binding
13
-
14
- # binpath = "#{scriptdir}/vimamsa"
15
- # argexp = [binpath]
16
-
17
- # for arg in ARGV
18
- # puts arg
19
- # argexp << Pathname(arg).expand_path.to_s
20
- # end
21
-
22
- Dir.chdir(scriptdir)
23
- # exec(*argexp)
24
-
25
- $LOAD_PATH.unshift(File.expand_path("lib"))
26
- $LOAD_PATH.unshift(File.expand_path("ext"))
11
+ scriptdir = File.expand_path(File.dirname(selfpath) + "/..")
12
+
13
+
14
+ # If process is already running, open the parameter file in the running process and exit.
15
+ listen_dir = File.expand_path("~/.vimamsa/listen")
16
+ if File.exist?(listen_dir) and !ARGV[0].nil?
17
+ tmpf = Tempfile.new("vmarun", listen_dir)
18
+ fp = tmpf.path
19
+ paramfn = File.expand_path(ARGV[0])
20
+ puts paramfn
21
+ tmpf.write(paramfn)
22
+ tmpf.close
23
+ tstart = Time.new
24
+ timeout = false
25
+ while File.exist?(fp)
26
+ sleep 0.001
27
+ if Time.new - tstart > 0.5
28
+ timeout = true
29
+ break
30
+ end
31
+ end
32
+ exit(0) if !timeout
33
+ end
34
+
35
+ $LOAD_PATH.unshift(File.expand_path("lib"))
36
+ $LOAD_PATH.unshift(File.expand_path("ext"))
27
37
 
28
38
  require "vimamsa"
29
- # Ilib:ext
39
+ # Ilib:ext
30
40
  # r rbvma -e "puts VMA.new.run"
31
- $vmag = VMAg.new()
41
+ $vmag = VMAgui.new()
32
42
  $vmag.run
33
-
34
-
data/ext/vmaext/vmaext.c CHANGED
@@ -3,11 +3,8 @@
3
3
  #include "ruby/ruby.h"
4
4
 
5
5
  #include <stdio.h>
6
- #include <string.h>
7
6
  #include <stdlib.h>
8
7
 
9
- #warning "C Preprocessor got here!"
10
-
11
8
  typedef struct node {
12
9
  int i;
13
10
  void * next;
data/lib/vimamsa.rb CHANGED
@@ -1,42 +1,12 @@
1
1
  require "vimamsa/version"
2
2
  require "vmaext"
3
3
 
4
-
5
- # require "vimamsa/constants"
6
- # require "vimamsa/debug"
7
- # require "vimamsa/actions"
8
- # require "vimamsa/key_binding_tree"
9
- # require "vimamsa/default_key_bindings"
10
-
11
- # require "vimamsa/ack"
12
- # require "vimamsa/buffer"
13
- # require "vimamsa/buffer_list"
14
-
15
-
16
- # require "vimamsa/easy_jump"
17
- # require "vimamsa/editor"
18
- # require "vimamsa/encrypt"
19
- # require "vimamsa/file_finder"
20
- # require "vimamsa/file_history"
21
- # require "vimamsa/file_manager"
22
- # require "vimamsa/hook"
23
- # require "vimamsa/hyper_plain_text"
24
- # require "vimamsa/macro"
25
- # require "vimamsa/rbvma"
26
- # require "vimamsa/search"
27
- # require "vimamsa/search_replace"
28
- # require "vimamsa/text_transforms"
29
- # require "vimamsa/util"
30
- # # require "version"
31
-
32
- # require "vimamsa/main"
33
-
34
4
  require "vimamsa/rbvma"
35
5
 
36
6
  module Vimamsa
37
7
  # Your code goes here...
38
8
  def self.test
39
9
  puts "Vimamsa test"
40
- puts srn_dst("foobar","baz")
10
+ puts srn_dst("foobar", "baz")
41
11
  end
42
12
  end
data/lib/vimamsa/ack.rb CHANGED
@@ -16,10 +16,6 @@ def gui_ack()
16
16
  gui_one_input_action(nfo, "Search:", "search", callback)
17
17
  end
18
18
 
19
- def invoke_ack_search()
20
- start_minibuffer_cmd("", "", :ack_buffer)
21
- end
22
-
23
19
  def ack_buffer(instr, b = nil)
24
20
  instr = instr.gsub("'", ".") # TODO
25
21
  bufstr = ""
@@ -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, scope = [])
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
- # def reg_act(id, callfunc, name = "", scope = [])
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, scope)
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, scope)
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
  puts "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
- qt_select_update_window(l, $select_keys.collect { |x| x.upcase },
52
- "search_actions_select_callback",
53
- "search_actions_update_callback")
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,7 +70,7 @@ def search_actions_update_callback(search_str = "")
81
70
  end
82
71
  item_list2 << item
83
72
  end
84
- # Ripl.start :binding => binding
73
+
85
74
  item_list = item_list2
86
75
 
87
76
  a = filter_items(item_list, 0, search_str)
@@ -90,7 +79,6 @@ def search_actions_update_callback(search_str = "")
90
79
  r = a.collect { |x| [x[0][0], 0, x] }
91
80
  puts 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
@@ -101,7 +89,7 @@ def search_actions_select_callback(search_str, idx)
101
89
  acc = item[0][:action]
102
90
 
103
91
  puts "Selected:" + acc.to_s
104
- qt_select_window_close(0)
92
+ gui_select_window_close(0)
105
93
 
106
94
  if acc.class == String
107
95
  eval(acc)
@@ -15,7 +15,7 @@ class Buffer < String
15
15
 
16
16
  attr_reader :pos, :lpos, :cpos, :deltas, :edit_history, :fname, :call_func, :pathname, :basename, :update_highlight, :marks, :is_highlighted, :syntax_detect_failed, :id, :lang
17
17
  attr_writer :call_func, :update_highlight
18
- attr_accessor :qt_update_highlight, :update_hl_startpos, :update_hl_endpos, :hl_queue, :syntax_parser, :highlights, :qt_reset_highlight, :is_parsing_syntax, :line_ends, :bt, :line_action_handler, :module, :active_kbd_mode
18
+ 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
19
 
20
20
  @@num_buffers = 0
21
21
 
@@ -26,10 +26,9 @@ class Buffer < String
26
26
  @lang = nil
27
27
  @id = @@num_buffers
28
28
  @@num_buffers += 1
29
- qt_create_buffer(@id)
29
+ gui_create_buffer(@id)
30
30
  puts "NEW BUFFER fn=#{fname} ID:#{@id}"
31
31
 
32
- #
33
32
  @module = nil
34
33
 
35
34
  @crypt = nil
@@ -47,7 +46,21 @@ class Buffer < String
47
46
  @hl_queue = []
48
47
  @line_action_handler = nil
49
48
 
49
+ @dirname = nil
50
+ @title = "*buf-#{@id}*"
51
+ @subtitle = ""
52
+
53
+ if @fname
54
+ @title = File.basename(@fname)
55
+ @dirname = File.dirname(@fname)
56
+ userhome = File.expand_path("~")
57
+ @subtitle = @dirname.gsub(/^#{userhome}/, "~")
58
+ end
59
+
50
60
  t1 = Time.now
61
+ gui_set_current_buffer(@id)
62
+ gui_set_window_title(@title, @subtitle)
63
+
51
64
  set_content(str)
52
65
  debug "init time:#{Time.now - t1}"
53
66
 
@@ -63,7 +76,7 @@ class Buffer < String
63
76
  else
64
77
  $kbd.set_mode_to_default
65
78
  end
66
- qt_set_current_buffer(@id)
79
+ # gui_set_current_buffer(@id)
67
80
  end
68
81
 
69
82
  def detect_file_language
@@ -73,6 +86,20 @@ class Buffer < String
73
86
  @lang = "ruby" if @fname.match(/\.(rb)$/)
74
87
  @lang = "hyperplaintext" if @fname.match(/\.(txt)$/)
75
88
  @lang = "php" if @fname.match(/\.(php)$/)
89
+
90
+ lm = GtkSource::LanguageManager.new
91
+
92
+ lm.set_search_path(lm.search_path << ppath("lang/"))
93
+ lang = lm.guess_language(@fname)
94
+ # lang.get_metadata("line-comment-start")
95
+ # lang.get_metadata("block-comment-start")
96
+ # lang.get_metadata("block-comment-end")
97
+ @lang_nfo = lang
98
+ if !lang.nil? and !lang.id.nil?
99
+ puts "Guessed LANG: #{lang.id}"
100
+ @lang = lang.id
101
+ end
102
+
76
103
  if @lang
77
104
  gui_set_file_lang(@id, @lang)
78
105
  end
@@ -81,8 +108,7 @@ class Buffer < String
81
108
  def add_image(imgpath, pos)
82
109
  return if !is_legal_pos(pos)
83
110
  # insert_txt_at(" ", pos)
84
- qt_process_deltas
85
- qt_add_image(imgpath, pos)
111
+ gui_add_image(imgpath, pos)
86
112
  end
87
113
 
88
114
  def is_legal_pos(pos, op = :read)
@@ -114,7 +140,6 @@ class Buffer < String
114
140
  b = " \n"
115
141
  txt = a + b
116
142
  insert_txt_at(txt, lr.end + 1)
117
- qt_process_deltas
118
143
  imgpos = lr.end + 1 + a.size
119
144
  add_image(fname, imgpos)
120
145
  end
@@ -134,21 +159,7 @@ class Buffer < String
134
159
  end
135
160
 
136
161
  def get_file_type()
137
- # We cant detect syntax if no filename
138
- if !@fname
139
- @syntax_detect_failed = true
140
- return ""
141
- end
142
- if @ftype == nil
143
- @ftype = VER::Syntax::Detector.detect(@fname)
144
- if @ftype == nil
145
- @syntax_detect_failed = true
146
- else
147
- @syntax_detect_failed = false
148
- end
149
- end
150
- debug "ftype=#{@ftype.inspect}"
151
- return @ftype
162
+ return @lang
152
163
  end
153
164
 
154
165
  def revert()
@@ -196,7 +207,7 @@ class Buffer < String
196
207
 
197
208
  def set_content(str)
198
209
  @encrypted_str = nil
199
- @qt_update_highlight = true
210
+ @gui_update_highlight = true
200
211
  @ftype = nil
201
212
  if str[0..10] == "VMACRYPT001"
202
213
  @encrypted_str = str[11..-1]
@@ -250,7 +261,7 @@ class Buffer < String
250
261
  @update_hl_startpos = 0 #TODO
251
262
  @update_hl_endpos = self.size - 1
252
263
 
253
- qt_set_buffer_contents(@id, self.to_s)
264
+ gui_set_buffer_contents(@id, self.to_s)
254
265
 
255
266
  # add_hl_update(@update_hl_startpos, @update_hl_endpos)
256
267
  end
@@ -259,6 +270,12 @@ class Buffer < String
259
270
  @fname = filename
260
271
  @pathname = Pathname.new(fname) if @fname
261
272
  @basename = @pathname.basename if @fname
273
+
274
+ @title = File.basename(@fname)
275
+ @dirname = File.dirname(@fname)
276
+ userhome = File.expand_path("~")
277
+ @subtitle = @dirname.gsub(/^#{userhome}/, "~")
278
+
262
279
  detect_file_language
263
280
  end
264
281
 
@@ -488,16 +505,26 @@ class Buffer < String
488
505
  end
489
506
 
490
507
  def get_com_str()
491
- return nil if @syntax_detect_failed
508
+ # return nil if @syntax_detect_failed
492
509
 
493
510
  com_str = nil
494
- if get_file_type() == "C" or get_file_type() == "Javascript"
495
- com_str = "//"
496
- elsif get_file_type() == "Ruby"
497
- com_str = "#"
498
- else
499
- com_str = "//"
511
+ # if get_file_type() == "c" or get_file_type() == "java"
512
+ # com_str = "//"
513
+ # elsif get_file_type() == "ruby"
514
+ # com_str = "#"
515
+ # else
516
+ # com_str = "//"
517
+ # end
518
+
519
+ if !@lang_nfo.nil?
520
+ com_str = @lang_nfo.get_metadata("line-comment-start")
500
521
  end
522
+
523
+ # lang.get_metadata("block-comment-start")
524
+ # lang.get_metadata("block-comment-end")
525
+
526
+ com_str = "//" if com_str.nil?
527
+
501
528
  return com_str
502
529
  end
503
530
 
@@ -729,7 +756,7 @@ class Buffer < String
729
756
  elsif new_pos >= 0
730
757
  @pos = new_pos
731
758
  end
732
- qt_set_cursor_pos(@id, @pos)
759
+ gui_set_cursor_pos(@id, @pos)
733
760
  calculate_line_and_column_pos
734
761
  end
735
762
 
@@ -1262,6 +1289,7 @@ class Buffer < String
1262
1289
  end
1263
1290
 
1264
1291
  def jump_to_next_instance_of_char(char, direction = FORWARD)
1292
+
1265
1293
  #return if at_end_of_line?
1266
1294
  if direction == FORWARD
1267
1295
  position_of_next_char = self.index(char, @pos + 1)
@@ -1457,7 +1485,6 @@ class Buffer < String
1457
1485
  def start_visual_mode()
1458
1486
  @visual_mode = true
1459
1487
  @selection_start = @pos
1460
- qt_set_selection_start(@id, selection_start)
1461
1488
  $kbd.set_mode(:visual)
1462
1489
  end
1463
1490
 
@@ -1613,17 +1640,17 @@ class Buffer < String
1613
1640
  savepath = buflist.get_last_dir
1614
1641
  end
1615
1642
  # Ripl.start :binding => binding
1616
- qt_file_saveas(savepath)
1643
+ gui_file_saveas(savepath)
1617
1644
  # calls back to file_saveas
1618
- # TODO:?
1619
1645
  end
1620
1646
 
1621
- def save()
1622
- if !@fname
1623
- save_as()
1624
- return
1625
- end
1626
- message("Saving file #{@fname}")
1647
+ def save_as_callback(fpath)
1648
+ set_filename(fpath)
1649
+ save()
1650
+ gui_set_window_title(@title, @subtitle) #TODO: if not active buffer?
1651
+ end
1652
+
1653
+ def write_contents_to_file(fpath)
1627
1654
  if @crypt != nil
1628
1655
  mode = "wb+"
1629
1656
  contents = "VMACRYPT001" + @crypt.encrypt(self.to_s)
@@ -1633,7 +1660,7 @@ class Buffer < String
1633
1660
  end
1634
1661
 
1635
1662
  Thread.new {
1636
- File.open(@fname, mode) do |io|
1663
+ File.open(fpath, mode) do |io|
1637
1664
  #io.set_encoding(self.encoding)
1638
1665
 
1639
1666
  begin
@@ -1653,6 +1680,15 @@ class Buffer < String
1653
1680
  }
1654
1681
  end
1655
1682
 
1683
+ def save()
1684
+ if !@fname
1685
+ save_as()
1686
+ return
1687
+ end
1688
+ message("Saving file #{@fname}")
1689
+ write_contents_to_file(@fname)
1690
+ end
1691
+
1656
1692
  # Indents whole buffer using external program
1657
1693
  def indent()
1658
1694
  file = Tempfile.new("out")
@@ -1665,7 +1701,7 @@ class Buffer < String
1665
1701
 
1666
1702
  message("Auto format #{@fname}")
1667
1703
 
1668
- if get_file_type() == "C" or get_file_type() == "C++"
1704
+ if ["chdr", "c", "cpp"].include?(get_file_type())
1669
1705
 
1670
1706
  #C/C++/Java/JavaScript/Objective-C/Protobuf code
1671
1707
  system("clang-format -style='{BasedOnStyle: LLVM, ColumnLimit: 100, SortIncludes: false}' #{file.path} > #{infile.path}")
@@ -1675,7 +1711,7 @@ class Buffer < String
1675
1711
  debug cmd
1676
1712
  system(cmd)
1677
1713
  bufc = IO.read(infile.path)
1678
- elsif get_file_type() == "Ruby"
1714
+ elsif get_file_type() == "ruby"
1679
1715
  cmd = "rufo #{file.path}"
1680
1716
  debug cmd
1681
1717
  system(cmd)
@@ -1692,21 +1728,21 @@ class Buffer < String
1692
1728
  def backup()
1693
1729
  fname = @fname
1694
1730
  return if !@fname
1695
- message("Backup buffer #{fname}")
1696
1731
  spfx = fname.gsub("=", "==").gsub("/", "=:")
1697
- spath = File.expand_path("~/autosave")
1732
+ spath = File.expand_path("~/.vimamsa/backup")
1698
1733
  return false if !can_save_to_directory?(spath)
1699
1734
  datetime = DateTime.now().strftime("%d%m%Y:%H%M%S")
1700
1735
  savepath = "#{spath}/#{spfx}_#{datetime}"
1736
+ message("Backup buffer #{fname} TO: #{savepath}")
1701
1737
  if is_path_writable(savepath)
1702
- debug "BACKUP BUFFER TO: #{savepath}"
1703
- IO.write(savepath, self.to_s) if @crypt == nil #TODO: For encrypted
1738
+ write_contents_to_file(savepath)
1704
1739
  else
1705
1740
  message("PATH NOT WRITABLE: #{savepath}")
1706
1741
  end
1707
1742
  end
1708
1743
  end
1709
1744
 
1745
+ #TODO
1710
1746
  def write_to_file(savepath, s)
1711
1747
  if is_path_writable(savepath)
1712
1748
  IO.write(savepath, $buffer.to_s)