textbringer 1.0.1 → 1.0.2
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/CHANGES.md +8 -0
- data/lib/textbringer/commands/clipboard.rb +3 -3
- data/lib/textbringer/commands/ctags.rb +3 -3
- data/lib/textbringer/commands/dabbrev.rb +1 -1
- data/lib/textbringer/commands/files.rb +6 -0
- data/lib/textbringer/commands/isearch.rb +10 -1
- data/lib/textbringer/commands/misc.rb +1 -1
- data/lib/textbringer/keymap.rb +44 -26
- data/lib/textbringer/modes/backtrace_mode.rb +1 -1
- data/lib/textbringer/modes/buffer_list_mode.rb +1 -1
- data/lib/textbringer/modes/c_mode.rb +4 -0
- data/lib/textbringer/modes/completion_list_mode.rb +1 -1
- data/lib/textbringer/modes/help_mode.rb +1 -1
- data/lib/textbringer/modes/programming_mode.rb +24 -2
- data/lib/textbringer/modes/ruby_mode.rb +28 -7
- data/lib/textbringer/utils.rb +1 -1
- data/lib/textbringer/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57f1c5253fdfca677d4cf620a4577823054202a3f58c7dcb42fd2575cbf69110
|
4
|
+
data.tar.gz: 4aaea98c3f0e310c94dd339a0f8ef15e0168aff3166606cb117592c96bcf9401
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a15f03fc588b2f6cb8f8ed899273903ad0433ea01cfab84223df60afe6bc8afc01a2dcef543730f4704783becdefcd4ab00538c63bd37017c4a7cd6e78b5f57
|
7
|
+
data.tar.gz: d1f7f90da2441ff8112f3289dcebb928201060bd3841fb8be82876a4dfeda057cab9e9153c9f69ff588716fa5ce4b65d9880229e5a2d056aab44ece893d39279
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 1.0.2
|
2
|
+
|
3
|
+
* Add isearch_quoted_insert.
|
4
|
+
* Use M- notation instead of ESC in define_key and help.
|
5
|
+
* Add indent_new_comment_line_command.
|
6
|
+
* Add find_alternate_file.
|
7
|
+
* Fix indentation bugs in the Ruby mode.
|
8
|
+
|
1
9
|
## 1.0.1
|
2
10
|
|
3
11
|
* Support pattern matching in the Ruby mode.
|
@@ -11,12 +11,12 @@ module Commands
|
|
11
11
|
(ENV["DISPLAY"] && system("which xclip > /dev/null 2>&1"))
|
12
12
|
|
13
13
|
if CLIPBOARD_AVAILABLE
|
14
|
-
GLOBAL_MAP.define_key("\
|
14
|
+
GLOBAL_MAP.define_key("\M-w", :clipboard_copy_region)
|
15
15
|
GLOBAL_MAP.define_key("\C-w", :clipboard_kill_region)
|
16
16
|
GLOBAL_MAP.define_key(?\C-k, :clipboard_kill_line)
|
17
|
-
GLOBAL_MAP.define_key("\
|
17
|
+
GLOBAL_MAP.define_key("\M-d", :clipboard_kill_word)
|
18
18
|
GLOBAL_MAP.define_key("\C-y", :clipboard_yank)
|
19
|
-
GLOBAL_MAP.define_key("\
|
19
|
+
GLOBAL_MAP.define_key("\M-y", :clipboard_yank_pop)
|
20
20
|
end
|
21
21
|
|
22
22
|
define_command(:clipboard_copy_region, doc: <<~EOD) do
|
@@ -49,12 +49,12 @@ module Commands
|
|
49
49
|
when /\A\d+\z/
|
50
50
|
push_tag_mark_and_find_file(file)
|
51
51
|
goto_line(addr.to_i)
|
52
|
-
when %r'\A/\^(
|
52
|
+
when %r'\A/\^(.*?)(\$)?/\z'
|
53
|
+
re = "^" + Regexp.quote($1.gsub(/\\([\\\/])/, "\\1")) + $2.to_s
|
53
54
|
push_tag_mark_and_find_file(file)
|
54
55
|
beginning_of_buffer
|
55
56
|
n.times do
|
56
|
-
|
57
|
-
re_search_forward("^" + s + "$")
|
57
|
+
re_search_forward(re)
|
58
58
|
end
|
59
59
|
beginning_of_line
|
60
60
|
when %r'\A\?\^(.*)\$\?\z'
|
@@ -91,7 +91,7 @@ def dabbrev_regexp(stem, candidates)
|
|
91
91
|
using DabbrevExtension
|
92
92
|
|
93
93
|
module Commands
|
94
|
-
GLOBAL_MAP.define_key("\
|
94
|
+
GLOBAL_MAP.define_key("\M-/", :dabbrev_expand_command)
|
95
95
|
|
96
96
|
define_command(:dabbrev_expand_command) do
|
97
97
|
contd = Controller.current.last_command == :dabbrev_expand_command
|
@@ -124,5 +124,11 @@ module Commands
|
|
124
124
|
File.dirname(Buffer.current.file_name))|
|
125
125
|
Dir.chdir(dir_name)
|
126
126
|
end
|
127
|
+
|
128
|
+
define_command(:find_alternate_file, doc: "Find an alternate file.") do
|
129
|
+
|file_name = read_file_name("Find alternate file: ",
|
130
|
+
default: Buffer.current.file_name)|
|
131
|
+
find_file(file_name)
|
132
|
+
end
|
127
133
|
end
|
128
134
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Textbringer
|
2
2
|
module Commands
|
3
|
-
ISEARCH_MODE_MAP
|
3
|
+
define_keymap :ISEARCH_MODE_MAP
|
4
4
|
(?\x20..?\x7e).each do |c|
|
5
5
|
ISEARCH_MODE_MAP.define_key(c, :isearch_printing_char)
|
6
6
|
end
|
@@ -19,6 +19,7 @@ module Commands
|
|
19
19
|
ISEARCH_MODE_MAP.define_key(?\C-w, :isearch_yank_word_or_char)
|
20
20
|
ISEARCH_MODE_MAP.define_key(?\C-m, :isearch_exit)
|
21
21
|
ISEARCH_MODE_MAP.define_key(?\C-g, :isearch_abort)
|
22
|
+
ISEARCH_MODE_MAP.define_key(?\C-q, :isearch_quoted_insert)
|
22
23
|
|
23
24
|
ISEARCH_STATUS = {
|
24
25
|
forward: true,
|
@@ -114,6 +115,14 @@ def isearch_done
|
|
114
115
|
end
|
115
116
|
end
|
116
117
|
|
118
|
+
define_command(:isearch_quoted_insert, doc: <<~EOD) do
|
119
|
+
Read a character, and add it to the search string and search.
|
120
|
+
EOD
|
121
|
+
c = Controller.current.read_event
|
122
|
+
ISEARCH_STATUS[:string].concat(c)
|
123
|
+
isearch_search
|
124
|
+
end
|
125
|
+
|
117
126
|
def isearch_search
|
118
127
|
forward = ISEARCH_STATUS[:forward]
|
119
128
|
options = if /\A[A-Z]/.match?(ISEARCH_STATUS[:string])
|
@@ -139,7 +139,7 @@ def complete_minibuffer_with_string(s)
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
-
UNIVERSAL_ARGUMENT_MAP
|
142
|
+
define_keymap :UNIVERSAL_ARGUMENT_MAP
|
143
143
|
(?0..?9).each do |c|
|
144
144
|
UNIVERSAL_ARGUMENT_MAP.define_key(c, :digit_argument)
|
145
145
|
GLOBAL_MAP.define_key("\e#{c}", :digit_argument)
|
data/lib/textbringer/keymap.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
class Module
|
2
|
+
def define_keymap(name)
|
3
|
+
unless const_defined?(name, false)
|
4
|
+
const_set(name, Textbringer::Keymap.new)
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
1
9
|
module Textbringer
|
2
10
|
class Keymap
|
3
11
|
include Enumerable
|
@@ -72,7 +80,16 @@ def self.key_name(key)
|
|
72
80
|
end
|
73
81
|
|
74
82
|
def self.key_sequence_string(key_sequence)
|
75
|
-
|
83
|
+
ks = key_sequence.dup
|
84
|
+
key_names = []
|
85
|
+
while key = ks.shift
|
86
|
+
if key == "\e" && !ks.empty?
|
87
|
+
key_names.push("M-" + key_name(ks.shift))
|
88
|
+
else
|
89
|
+
key_names.push(key_name(key))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
key_names.join(" ")
|
76
93
|
end
|
77
94
|
|
78
95
|
private
|
@@ -82,7 +99,7 @@ def kbd(key)
|
|
82
99
|
when Symbol
|
83
100
|
[key]
|
84
101
|
when String
|
85
|
-
key.chars
|
102
|
+
key.b.gsub(/[\x80-\xff]/n) { |c| "\e" + (c.ord & 0x7f).chr }.chars
|
86
103
|
when Array
|
87
104
|
key
|
88
105
|
else
|
@@ -91,17 +108,17 @@ def kbd(key)
|
|
91
108
|
end
|
92
109
|
end
|
93
110
|
|
94
|
-
GLOBAL_MAP
|
111
|
+
define_keymap :GLOBAL_MAP
|
95
112
|
GLOBAL_MAP.define_key(:resize, :resize_window)
|
96
113
|
GLOBAL_MAP.define_key(:right, :forward_char)
|
97
114
|
GLOBAL_MAP.define_key(?\C-f, :forward_char)
|
98
115
|
GLOBAL_MAP.define_key(:left, :backward_char)
|
99
116
|
GLOBAL_MAP.define_key(?\C-b, :backward_char)
|
100
|
-
GLOBAL_MAP.define_key("\
|
101
|
-
GLOBAL_MAP.define_key("\
|
102
|
-
GLOBAL_MAP.define_key("\
|
103
|
-
GLOBAL_MAP.define_key("\
|
104
|
-
GLOBAL_MAP.define_key("\
|
117
|
+
GLOBAL_MAP.define_key("\M-f", :forward_word)
|
118
|
+
GLOBAL_MAP.define_key("\M-b", :backward_word)
|
119
|
+
GLOBAL_MAP.define_key("\M-gc", :goto_char)
|
120
|
+
GLOBAL_MAP.define_key("\M-gg", :goto_line)
|
121
|
+
GLOBAL_MAP.define_key("\M-g\M-g", :goto_line)
|
105
122
|
GLOBAL_MAP.define_key(:down, :next_line)
|
106
123
|
GLOBAL_MAP.define_key(?\C-n, :next_line)
|
107
124
|
GLOBAL_MAP.define_key(:up, :previous_line)
|
@@ -115,8 +132,8 @@ def kbd(key)
|
|
115
132
|
GLOBAL_MAP.define_key(:home, :beginning_of_line)
|
116
133
|
GLOBAL_MAP.define_key(?\C-e, :end_of_line)
|
117
134
|
GLOBAL_MAP.define_key(:end, :end_of_line)
|
118
|
-
GLOBAL_MAP.define_key("\
|
119
|
-
GLOBAL_MAP.define_key("\
|
135
|
+
GLOBAL_MAP.define_key("\M-<", :beginning_of_buffer)
|
136
|
+
GLOBAL_MAP.define_key("\M->", :end_of_buffer)
|
120
137
|
(?\x20..?\x7e).each do |c|
|
121
138
|
GLOBAL_MAP.define_key(c, :self_insert)
|
122
139
|
end
|
@@ -124,15 +141,15 @@ def kbd(key)
|
|
124
141
|
GLOBAL_MAP.define_key(?\C-q, :quoted_insert)
|
125
142
|
GLOBAL_MAP.define_key("\C-@", :set_mark_command)
|
126
143
|
GLOBAL_MAP.define_key("\C-x\C-@", :pop_global_mark)
|
127
|
-
GLOBAL_MAP.define_key("\
|
128
|
-
GLOBAL_MAP.define_key("\
|
144
|
+
GLOBAL_MAP.define_key("\M-*", :next_global_mark)
|
145
|
+
GLOBAL_MAP.define_key("\M-?", :previous_global_mark)
|
129
146
|
GLOBAL_MAP.define_key("\C-x\C-x", :exchange_point_and_mark)
|
130
|
-
GLOBAL_MAP.define_key("\
|
147
|
+
GLOBAL_MAP.define_key("\M-w", :copy_region)
|
131
148
|
GLOBAL_MAP.define_key(?\C-w, :kill_region)
|
132
149
|
GLOBAL_MAP.define_key(?\C-k, :kill_line)
|
133
|
-
GLOBAL_MAP.define_key("\
|
150
|
+
GLOBAL_MAP.define_key("\M-d", :kill_word)
|
134
151
|
GLOBAL_MAP.define_key(?\C-y, :yank)
|
135
|
-
GLOBAL_MAP.define_key("\
|
152
|
+
GLOBAL_MAP.define_key("\M-y", :yank_pop)
|
136
153
|
GLOBAL_MAP.define_key(?\C-_, :undo)
|
137
154
|
GLOBAL_MAP.define_key("\C-xu", :undo)
|
138
155
|
GLOBAL_MAP.define_key("\C-x\C-_", :redo_command)
|
@@ -140,14 +157,14 @@ def kbd(key)
|
|
140
157
|
GLOBAL_MAP.define_key("\C-j", :newline)
|
141
158
|
GLOBAL_MAP.define_key("\C-m", :newline)
|
142
159
|
GLOBAL_MAP.define_key("\C-o", :open_line)
|
143
|
-
GLOBAL_MAP.define_key("\
|
144
|
-
GLOBAL_MAP.define_key("\
|
160
|
+
GLOBAL_MAP.define_key("\M-m", :back_to_indentation)
|
161
|
+
GLOBAL_MAP.define_key("\M-^", :delete_indentation)
|
145
162
|
GLOBAL_MAP.define_key("\C-xh", :mark_whole_buffer)
|
146
|
-
GLOBAL_MAP.define_key("\
|
163
|
+
GLOBAL_MAP.define_key("\M-z", :zap_to_char)
|
147
164
|
GLOBAL_MAP.define_key("\C-l", :recenter)
|
148
165
|
GLOBAL_MAP.define_key("\C-v", :scroll_up)
|
149
166
|
GLOBAL_MAP.define_key(:npage, :scroll_up)
|
150
|
-
GLOBAL_MAP.define_key("\
|
167
|
+
GLOBAL_MAP.define_key("\M-v", :scroll_down)
|
151
168
|
GLOBAL_MAP.define_key(:ppage, :scroll_down)
|
152
169
|
GLOBAL_MAP.define_key("\C-x0", :delete_window)
|
153
170
|
GLOBAL_MAP.define_key("\C-x1", :delete_other_windows)
|
@@ -158,6 +175,7 @@ def kbd(key)
|
|
158
175
|
GLOBAL_MAP.define_key("\C-x\C-c", :exit_textbringer)
|
159
176
|
GLOBAL_MAP.define_key("\C-z", :suspend_textbringer)
|
160
177
|
GLOBAL_MAP.define_key("\C-x\C-f", :find_file)
|
178
|
+
GLOBAL_MAP.define_key("\C-x\C-v", :find_alternate_file)
|
161
179
|
GLOBAL_MAP.define_key("\C-xb", :switch_to_buffer)
|
162
180
|
GLOBAL_MAP.define_key("\C-x\C-b", :list_buffers)
|
163
181
|
GLOBAL_MAP.define_key("\C-x\C-s", :save_buffer)
|
@@ -166,15 +184,15 @@ def kbd(key)
|
|
166
184
|
GLOBAL_MAP.define_key("\C-x\C-mf", :set_buffer_file_encoding)
|
167
185
|
GLOBAL_MAP.define_key("\C-x\C-mn", :set_buffer_file_format)
|
168
186
|
GLOBAL_MAP.define_key("\C-x\C-mr", :revert_buffer_with_encoding)
|
169
|
-
GLOBAL_MAP.define_key("\
|
170
|
-
GLOBAL_MAP.define_key("\
|
171
|
-
GLOBAL_MAP.define_key("\
|
187
|
+
GLOBAL_MAP.define_key("\M-.", :find_tag)
|
188
|
+
GLOBAL_MAP.define_key("\M-x", :execute_command)
|
189
|
+
GLOBAL_MAP.define_key("\M-:", :eval_expression)
|
172
190
|
GLOBAL_MAP.define_key(?\C-u, :universal_argument)
|
173
191
|
GLOBAL_MAP.define_key(?\C-g, :keyboard_quit)
|
174
192
|
GLOBAL_MAP.define_key(?\C-s, :isearch_forward)
|
175
193
|
GLOBAL_MAP.define_key(?\C-r, :isearch_backward)
|
176
|
-
GLOBAL_MAP.define_key("\
|
177
|
-
GLOBAL_MAP.define_key("\
|
194
|
+
GLOBAL_MAP.define_key("\M-%", :query_replace_regexp)
|
195
|
+
GLOBAL_MAP.define_key("\M-!", :shell_execute)
|
178
196
|
GLOBAL_MAP.define_key("\C-xr ", :point_to_register)
|
179
197
|
GLOBAL_MAP.define_key("\C-xrj", :jump_to_register)
|
180
198
|
GLOBAL_MAP.define_key("\C-xrx", :copy_to_register)
|
@@ -188,7 +206,7 @@ def kbd(key)
|
|
188
206
|
GLOBAL_MAP.define_key("\C-x)", :end_keyboard_macro)
|
189
207
|
GLOBAL_MAP.define_key("\C-xe", :end_and_call_keyboard_macro)
|
190
208
|
GLOBAL_MAP.define_key(:f4, :end_or_call_keyboard_macro)
|
191
|
-
GLOBAL_MAP.define_key("\
|
209
|
+
GLOBAL_MAP.define_key("\M-q", :fill_paragraph)
|
192
210
|
GLOBAL_MAP.define_key([:f1, "b"], :describe_bindings)
|
193
211
|
GLOBAL_MAP.define_key([:f1, "f"], :describe_command)
|
194
212
|
GLOBAL_MAP.define_key([:f1, "k"], :describe_key)
|
@@ -201,7 +219,7 @@ def kbd(key)
|
|
201
219
|
end
|
202
220
|
end
|
203
221
|
|
204
|
-
MINIBUFFER_LOCAL_MAP
|
222
|
+
define_keymap :MINIBUFFER_LOCAL_MAP
|
205
223
|
MINIBUFFER_LOCAL_MAP.define_key("\C-j", :exit_recursive_edit)
|
206
224
|
MINIBUFFER_LOCAL_MAP.define_key("\C-m", :exit_recursive_edit)
|
207
225
|
MINIBUFFER_LOCAL_MAP.define_key(?\t, :complete_minibuffer)
|
@@ -2,7 +2,7 @@ module Textbringer
|
|
2
2
|
class BacktraceMode < Mode
|
3
3
|
define_generic_command :jump_to_source_location
|
4
4
|
|
5
|
-
BACKTRACE_MODE_MAP
|
5
|
+
define_keymap :BACKTRACE_MODE_MAP
|
6
6
|
BACKTRACE_MODE_MAP.define_key("\C-m", :jump_to_source_location_command)
|
7
7
|
|
8
8
|
define_syntax :link, /^\S*?:\d+:(?:\d+:)?/
|
@@ -2,7 +2,7 @@ module Textbringer
|
|
2
2
|
class CompletionListMode < Mode
|
3
3
|
define_generic_command :choose_completion
|
4
4
|
|
5
|
-
COMPLETION_LIST_MODE_MAP
|
5
|
+
define_keymap :COMPLETION_LIST_MODE_MAP
|
6
6
|
COMPLETION_LIST_MODE_MAP.define_key("\C-m", :choose_completion_command)
|
7
7
|
|
8
8
|
define_syntax :link, /^.+$/
|
@@ -2,7 +2,7 @@ module Textbringer
|
|
2
2
|
class HelpMode < Mode
|
3
3
|
define_generic_command :jump_to_link
|
4
4
|
|
5
|
-
HELP_MODE_MAP
|
5
|
+
define_keymap :HELP_MODE_MAP
|
6
6
|
HELP_MODE_MAP.define_key(?\C-m, :jump_to_link_command)
|
7
7
|
HELP_MODE_MAP.define_key(?l, :help_go_back)
|
8
8
|
HELP_MODE_MAP.define_key("\C-c\C-b", :help_go_back)
|
@@ -10,16 +10,18 @@ class ProgrammingMode < FundamentalMode
|
|
10
10
|
define_generic_command :backward_definition
|
11
11
|
define_generic_command :compile
|
12
12
|
define_generic_command :toggle_test
|
13
|
+
define_generic_command :indent_new_comment_line
|
13
14
|
|
14
|
-
PROGRAMMING_MODE_MAP
|
15
|
+
define_keymap :PROGRAMMING_MODE_MAP
|
15
16
|
PROGRAMMING_MODE_MAP.define_key("\t", :indent_line_command)
|
16
17
|
PROGRAMMING_MODE_MAP.define_key("\C-m",
|
17
18
|
:reindent_then_newline_and_indent_command)
|
18
|
-
PROGRAMMING_MODE_MAP.define_key("\
|
19
|
+
PROGRAMMING_MODE_MAP.define_key("\M-\C-\\", :indent_region_command)
|
19
20
|
PROGRAMMING_MODE_MAP.define_key("\C-c\C-n", :forward_definition_command)
|
20
21
|
PROGRAMMING_MODE_MAP.define_key("\C-c\C-p", :backward_definition_command)
|
21
22
|
PROGRAMMING_MODE_MAP.define_key("\C-c\C-c", :compile_command)
|
22
23
|
PROGRAMMING_MODE_MAP.define_key("\C-c\C-t", :toggle_test_command)
|
24
|
+
PROGRAMMING_MODE_MAP.define_key("\ej", :indent_new_comment_line_command)
|
23
25
|
|
24
26
|
def initialize(buffer)
|
25
27
|
super(buffer)
|
@@ -86,6 +88,26 @@ def indent_region(s = @buffer.mark, e = @buffer.point)
|
|
86
88
|
end
|
87
89
|
end
|
88
90
|
|
91
|
+
def indent_new_comment_line
|
92
|
+
if comment_start.nil?
|
93
|
+
@buffer.newline
|
94
|
+
return
|
95
|
+
end
|
96
|
+
s = @buffer.save_excursion {
|
97
|
+
@buffer.beginning_of_line
|
98
|
+
if @buffer.looking_at?(/[ \t]*#{comment_start}+[ \t]*/)
|
99
|
+
@buffer.match_string(0)
|
100
|
+
else
|
101
|
+
""
|
102
|
+
end
|
103
|
+
}
|
104
|
+
@buffer.insert("\n" + s)
|
105
|
+
end
|
106
|
+
|
107
|
+
def comment_start
|
108
|
+
nil
|
109
|
+
end
|
110
|
+
|
89
111
|
private
|
90
112
|
|
91
113
|
def calculate_indentation
|
@@ -85,6 +85,10 @@ class | module | def | undef | begin | rescue | ensure | end |
|
|
85
85
|
)
|
86
86
|
/x
|
87
87
|
|
88
|
+
def comment_start
|
89
|
+
"#"
|
90
|
+
end
|
91
|
+
|
88
92
|
def initialize(buffer)
|
89
93
|
super(buffer)
|
90
94
|
@buffer[:indent_level] = CONFIG[:ruby_indent_level]
|
@@ -173,7 +177,7 @@ def toggle_test
|
|
173
177
|
|
174
178
|
private
|
175
179
|
|
176
|
-
INDENT_BEG_RE = /^([ \t]*)(class|module|def|if|unless|case|while|until|for|begin
|
180
|
+
INDENT_BEG_RE = /^([ \t]*)(class|module|def|if|unless|case|while|until|for|begin)\b/
|
177
181
|
|
178
182
|
def space_width(s)
|
179
183
|
s.gsub(/\t/, " " * @buffer[:tab_width]).size
|
@@ -194,6 +198,22 @@ def beginning_of_indentation
|
|
194
198
|
0
|
195
199
|
end
|
196
200
|
|
201
|
+
def lex(source)
|
202
|
+
line_count = source.count("\n")
|
203
|
+
s = source
|
204
|
+
lineno = 1
|
205
|
+
tokens = []
|
206
|
+
loop do
|
207
|
+
lexer = Ripper::Lexer.new(s, "-", lineno)
|
208
|
+
tokens.concat(lexer.lex)
|
209
|
+
last_line = tokens.dig(-1, 0, 0)
|
210
|
+
return tokens if last_line.nil? || last_line >= line_count
|
211
|
+
s = source.sub(/(.*\n?){#{last_line}}/, "")
|
212
|
+
return tokens if last_line + 1 <= lineno
|
213
|
+
lineno = last_line + 1
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
197
217
|
def calculate_indentation
|
198
218
|
if @buffer.current_line == 1
|
199
219
|
return 0
|
@@ -205,7 +225,7 @@ def calculate_indentation
|
|
205
225
|
base_indentation = beginning_of_indentation
|
206
226
|
start_pos = @buffer.point
|
207
227
|
start_line = @buffer.current_line
|
208
|
-
tokens =
|
228
|
+
tokens = lex(@buffer.substring(start_pos, bol_pos))
|
209
229
|
_, event, text = tokens.last
|
210
230
|
if event == :on_nl
|
211
231
|
_, event, text = tokens[-2]
|
@@ -217,7 +237,7 @@ def calculate_indentation
|
|
217
237
|
event == :on_tstring_content
|
218
238
|
return nil
|
219
239
|
end
|
220
|
-
i = find_nearest_beginning_token(tokens)
|
240
|
+
i, extra_end_count = find_nearest_beginning_token(tokens)
|
221
241
|
(line, column), event, = i ? tokens[i] : nil
|
222
242
|
if event == :on_lparen && tokens.dig(i + 1, 1) != :on_ignored_nl
|
223
243
|
return column + 1
|
@@ -240,7 +260,8 @@ def calculate_indentation
|
|
240
260
|
end
|
241
261
|
@buffer.goto_char(bol_pos)
|
242
262
|
if line.nil?
|
243
|
-
indentation =
|
263
|
+
indentation =
|
264
|
+
base_indentation - extra_end_count * @buffer[:indent_level]
|
244
265
|
else
|
245
266
|
indentation = base_indentation + @buffer[:indent_level]
|
246
267
|
end
|
@@ -293,9 +314,9 @@ def find_nearest_beginning_token(tokens)
|
|
293
314
|
when "end"
|
294
315
|
stack.push(text)
|
295
316
|
end
|
296
|
-
when :on_rbrace, :on_rparen, :on_rbracket
|
317
|
+
when :on_rbrace, :on_rparen, :on_rbracket, :on_embexpr_end
|
297
318
|
stack.push(text)
|
298
|
-
when :on_lbrace, :on_lparen, :on_lbracket, :on_tlambeg
|
319
|
+
when :on_lbrace, :on_lparen, :on_lbracket, :on_tlambeg, :on_embexpr_beg
|
299
320
|
if stack.empty?
|
300
321
|
return i
|
301
322
|
end
|
@@ -305,7 +326,7 @@ def find_nearest_beginning_token(tokens)
|
|
305
326
|
stack.pop
|
306
327
|
end
|
307
328
|
end
|
308
|
-
return nil
|
329
|
+
return nil, stack.size
|
309
330
|
end
|
310
331
|
|
311
332
|
def find_test_target_path(base, namespace, name)
|
data/lib/textbringer/utils.rb
CHANGED
@@ -238,7 +238,7 @@ def yes_or_no?(prompt)
|
|
238
238
|
}
|
239
239
|
end
|
240
240
|
|
241
|
-
Y_OR_N_MAP
|
241
|
+
define_keymap :Y_OR_N_MAP
|
242
242
|
Y_OR_N_MAP.define_key(?y, :self_insert_and_exit_minibuffer)
|
243
243
|
Y_OR_N_MAP.define_key(?n, :self_insert_and_exit_minibuffer)
|
244
244
|
Y_OR_N_MAP.define_key(?\C-g, :abort_recursive_edit)
|
data/lib/textbringer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: textbringer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shugo Maeda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -253,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
253
253
|
- !ruby/object:Gem::Version
|
254
254
|
version: '0'
|
255
255
|
requirements: []
|
256
|
-
rubygems_version: 3.1.
|
256
|
+
rubygems_version: 3.1.2
|
257
257
|
signing_key:
|
258
258
|
specification_version: 4
|
259
259
|
summary: An Emacs-like text editor
|