pryline 0.0.4 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pryline.rb +179 -5
- data/lib/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76de10badae29d39145da9e24ac05d879ebd6c37b96f12f3c2e1b54cfa7c7277
|
4
|
+
data.tar.gz: ee668e5a3cb247047b065ce25424506baddc8ff299b1e568f95e81bce76499db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f0e79e8e8749165cf63c7b32e913571160a1f5b5a807d9089b6d38a2b9573b260a3d1582fec404c1c45faf09747c192fa2bcac3687c160ccd09cdd16dbf87c3
|
7
|
+
data.tar.gz: 75708cf6fed8e892ecb2d5f1c6817b3eb4f7b496bfd79e3e84d19fac4ad268e70a6dee446273574e4338bc40e241b4c477a7f80c529a2dee2d52f8fcc47e7492
|
data/lib/pryline.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'fiddle'
|
2
|
+
require 'fiddle/import'
|
2
3
|
require 'forwardable'
|
3
4
|
require 'readline'
|
4
5
|
module Pryline
|
@@ -50,6 +51,17 @@ module Pryline
|
|
50
51
|
|
51
52
|
BLOCK_CALLERS = {}
|
52
53
|
|
54
|
+
# paren blink timeout
|
55
|
+
set_paren_blink_timeout = Fiddle::Function.new(
|
56
|
+
libreadline['rl_set_paren_blink_timeout'],
|
57
|
+
[Fiddle::TYPE_INT],
|
58
|
+
Fiddle::TYPE_INT
|
59
|
+
)
|
60
|
+
|
61
|
+
Pryline.define_singleton_method(:set_paren_blink_timeout) do |usec|
|
62
|
+
set_paren_blink_timeout.call(usec)
|
63
|
+
end
|
64
|
+
|
53
65
|
# accept line
|
54
66
|
accept_line = Fiddle::Function.new(
|
55
67
|
libreadline['rl_newline'],
|
@@ -110,6 +122,31 @@ module Pryline
|
|
110
122
|
where_history.call(nil)
|
111
123
|
end
|
112
124
|
|
125
|
+
# set mark
|
126
|
+
set_mark = Fiddle::Function.new(
|
127
|
+
libreadline['_rl_set_mark_at_pos'],
|
128
|
+
[Fiddle::TYPE_INT], Fiddle::TYPE_INT
|
129
|
+
)
|
130
|
+
Pryline.define_singleton_method(:set_mark) do |pos|
|
131
|
+
set_mark.call(pos)
|
132
|
+
end
|
133
|
+
|
134
|
+
# activate mark
|
135
|
+
activate_mark = Fiddle::Function.new(
|
136
|
+
libreadline['rl_activate_mark'],
|
137
|
+
[Fiddle::TYPE_VOID],
|
138
|
+
Fiddle::TYPE_INT
|
139
|
+
)
|
140
|
+
Pryline.define_singleton_method(:activate_mark) { activate_mark.call(nil) }
|
141
|
+
|
142
|
+
# deactivate mark
|
143
|
+
deactivate_mark = Fiddle::Function.new(
|
144
|
+
libreadline['rl_deactivate_mark'],
|
145
|
+
[Fiddle::TYPE_VOID],
|
146
|
+
Fiddle::TYPE_INT
|
147
|
+
)
|
148
|
+
Pryline.define_singleton_method(:deactivate_mark) { deactivate_mark.call(nil) }
|
149
|
+
|
113
150
|
# null function
|
114
151
|
null_function = Fiddle::Function.new(
|
115
152
|
libreadline['_rl_null_function'],
|
@@ -138,8 +175,8 @@ module Pryline
|
|
138
175
|
Pryline.define_singleton_method(:bind_key) do |key, &block|
|
139
176
|
unbind_key.call(key.ord)
|
140
177
|
BLOCK_CALLERS[key] = Fiddle::Closure::BlockCaller.new(
|
141
|
-
Fiddle::
|
142
|
-
[Fiddle::
|
178
|
+
Fiddle::TYPE_INT,
|
179
|
+
[Fiddle::TYPE_INT, Fiddle::TYPE_INT],
|
143
180
|
&block
|
144
181
|
)
|
145
182
|
bind_key.call(
|
@@ -164,8 +201,8 @@ module Pryline
|
|
164
201
|
Pryline.define_singleton_method(:bind_keyseq) do |keyseq, &block|
|
165
202
|
unbind_keyseq(keyseq)
|
166
203
|
BLOCK_CALLERS[keyseq] = Fiddle::Closure::BlockCaller.new(
|
167
|
-
Fiddle::
|
168
|
-
[Fiddle::
|
204
|
+
Fiddle::TYPE_INT,
|
205
|
+
[Fiddle::TYPE_INT, Fiddle::TYPE_INT],
|
169
206
|
&block
|
170
207
|
)
|
171
208
|
bind_keyseq.call(
|
@@ -174,11 +211,148 @@ module Pryline
|
|
174
211
|
)
|
175
212
|
end
|
176
213
|
|
214
|
+
# message
|
215
|
+
|
216
|
+
save_prompt = Fiddle::Function.new(libreadline['rl_save_prompt'], [Fiddle::TYPE_VOID], Fiddle::TYPE_INT)
|
217
|
+
Pryline.define_singleton_method(:save_prompt) do
|
218
|
+
save_prompt.call(nil)
|
219
|
+
end
|
220
|
+
set_message = Fiddle::Function.new(libreadline['rl_message'], [Fiddle::TYPE_UINTPTR_T], Fiddle::TYPE_INT)
|
221
|
+
Pryline.define_singleton_method(:set_message_with_save) do |message|
|
222
|
+
buffer, point = Pryline.line_buffer, Pryline.point
|
223
|
+
Pryline.delete_text
|
224
|
+
Pryline.point = 0
|
225
|
+
Pryline.redisplay
|
226
|
+
Pryline.save_prompt
|
227
|
+
Pryline.insert_text buffer
|
228
|
+
Pryline.point = point
|
229
|
+
set_message.call(
|
230
|
+
Fiddle::Pointer[message]
|
231
|
+
)
|
232
|
+
end
|
233
|
+
Pryline.define_singleton_method(:set_message) do |message|
|
234
|
+
buffer, point = Pryline.line_buffer, Pryline.point
|
235
|
+
Pryline.delete_text
|
236
|
+
Pryline.point = 0
|
237
|
+
Pryline.redisplay
|
238
|
+
Pryline.insert_text buffer
|
239
|
+
Pryline.point = point
|
240
|
+
set_message.call(
|
241
|
+
Fiddle::Pointer[message]
|
242
|
+
)
|
243
|
+
end
|
244
|
+
|
245
|
+
restore_prompt = Fiddle::Function.new(libreadline['rl_restore_prompt'], [Fiddle::TYPE_VOID], Fiddle::TYPE_INT)
|
246
|
+
Pryline.define_singleton_method(:restore_prompt) do
|
247
|
+
restore_prompt.call(nil)
|
248
|
+
end
|
249
|
+
clear_message = Fiddle::Function.new(libreadline['rl_clear_message'], [Fiddle::TYPE_VOID], Fiddle::TYPE_INT)
|
250
|
+
Pryline.define_singleton_method(:clear_message_with_restore) do
|
251
|
+
Pryline.restore_prompt
|
252
|
+
clear_message.call(nil)
|
253
|
+
end
|
254
|
+
Pryline.define_singleton_method(:clear_message) do
|
255
|
+
clear_message.call(nil)
|
256
|
+
end
|
257
|
+
|
258
|
+
move_vert = Fiddle::Function.new(libreadline['_rl_move_vert'], [Fiddle::TYPE_INT], Fiddle::TYPE_VOID)
|
259
|
+
Pryline.define_singleton_method(:move_vert) do |dest|
|
260
|
+
move_vert.call(dest)
|
261
|
+
end
|
262
|
+
|
263
|
+
PromptLength = Fiddle::CStructBuilder.create(
|
264
|
+
Fiddle::CStruct,
|
265
|
+
[Fiddle::SIZEOF_INT],
|
266
|
+
%w(value)
|
267
|
+
).new(Fiddle::Pointer.new(libreadline.sym('rl_visible_prompt_length')).to_i)
|
268
|
+
Pryline.define_singleton_method(:prompt_width) { PromptLength.value }
|
269
|
+
|
270
|
+
LastCPos = Fiddle::CStructBuilder.create(
|
271
|
+
Fiddle::CStruct,
|
272
|
+
[Fiddle::SIZEOF_INT],
|
273
|
+
%w(value)
|
274
|
+
).new(Fiddle::Pointer.new(libreadline.sym('_rl_last_c_pos')).to_i)
|
275
|
+
Pryline.define_singleton_method(:last_c_pos) { LastCPos.value }
|
276
|
+
LastVPos = Fiddle::CStructBuilder.create(
|
277
|
+
Fiddle::CStruct,
|
278
|
+
[Fiddle::SIZEOF_INT],
|
279
|
+
%w(value)
|
280
|
+
).new(Fiddle::Pointer.new(libreadline.sym('_rl_last_v_pos')).to_i)
|
281
|
+
Pryline.define_singleton_method(:last_v_pos) { LastVPos.value }
|
282
|
+
ApplicationName = Fiddle::CStructBuilder.create(
|
283
|
+
Fiddle::CStruct,
|
284
|
+
[1],
|
285
|
+
%w(rl_readline_name)
|
286
|
+
).new(Fiddle::Pointer.new(libreadline.sym('rl_readline_name')).to_i)
|
287
|
+
Pryline.define_singleton_method(:application_name) { ApplicationName.rl_readline_name.to_s }
|
288
|
+
Pryline.define_singleton_method(:application_name=) do |name|
|
289
|
+
ApplicationName.rl_readline_name = Fiddle::Pointer[name]
|
290
|
+
end
|
291
|
+
|
292
|
+
Pryline.define_singleton_method(:slice_buffer_at_cursor) do
|
293
|
+
left_of_cursor = Pryline.line_buffer[0...Pryline.point]
|
294
|
+
right_of_cursor = Pryline.line_buffer[(Pryline.point)..-1] || ''
|
295
|
+
Pryline.delete_text
|
296
|
+
Pryline.point = 0
|
297
|
+
Pryline.redisplay
|
298
|
+
[left_of_cursor, right_of_cursor]
|
299
|
+
end
|
300
|
+
|
301
|
+
Pryline.define_singleton_method(:reformat_buffer) do
|
302
|
+
left_of_cursor, right_of_cursor = Pryline.slice_buffer_at_cursor
|
303
|
+
left_ended_with_newline = left_of_cursor.end_with?("\n")
|
304
|
+
left_ended_with_whitespace = left_of_cursor.match?(/\s+\z/) && !left_ended_with_newline
|
305
|
+
left = left_of_cursor.lines.map(&:strip).join("\n")
|
306
|
+
left = "#{left}\n" if left_ended_with_newline
|
307
|
+
left = "#{left} " if left_ended_with_whitespace
|
308
|
+
indent = Pry::Indent.new
|
309
|
+
left = indent.indent(left)
|
310
|
+
Pryline.insert_text(left)
|
311
|
+
if right_of_cursor.strip != ''
|
312
|
+
point = Pryline.point
|
313
|
+
Pryline.delete_text
|
314
|
+
Pryline.point = 0
|
315
|
+
new_buffer = Pry::Indent.new.indent("#{left}#{right_of_cursor}")
|
316
|
+
Pryline.insert_text(new_buffer)
|
317
|
+
Pryline.point = point
|
318
|
+
Pryline.redisplay
|
319
|
+
elsif left_ended_with_newline
|
320
|
+
Pryline.insert_text indent.current_prefix
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
# reset line state
|
325
|
+
reset_line_state = Fiddle::Function.new(libreadline['rl_reset_line_state'], [Fiddle::TYPE_VOID], Fiddle::TYPE_INT)
|
326
|
+
Pryline.define_singleton_method(:reset_line_state) do
|
327
|
+
reset_line_state.call(nil)
|
328
|
+
end
|
329
|
+
|
330
|
+
# DICEY!!
|
331
|
+
# add descriptive function name, so as to make
|
332
|
+
# it bindable from inputrc
|
333
|
+
add_defun = Fiddle::Function.new(
|
334
|
+
libreadline['rl_add_defun'],
|
335
|
+
[Fiddle::TYPE_UINTPTR_T, Fiddle::TYPE_UINTPTR_T, Fiddle::TYPE_INT],
|
336
|
+
Fiddle::TYPE_INT
|
337
|
+
)
|
338
|
+
Pryline.define_singleton_method(:add_defun) do |name, key = -1, &block|
|
339
|
+
BLOCK_CALLERS[name] = Fiddle::Closure::BlockCaller.new(
|
340
|
+
Fiddle::TYPE_VOID,
|
341
|
+
[Fiddle::TYPE_VOID],
|
342
|
+
&block
|
343
|
+
)
|
344
|
+
add_defun.call(
|
345
|
+
Fiddle::Pointer[name],
|
346
|
+
BLOCK_CALLERS[name].to_i,
|
347
|
+
key
|
348
|
+
)
|
349
|
+
end
|
350
|
+
|
177
351
|
# helpers
|
178
352
|
Pryline.define_singleton_method(:replace_buffer) do |new_contents|
|
179
353
|
Pryline.delete_text
|
180
354
|
Pryline.point = 0
|
181
|
-
Pryline.insert_text
|
355
|
+
Pryline.insert_text new_contents
|
182
356
|
Pryline.redisplay
|
183
357
|
end
|
184
358
|
@@loaded = true
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pryline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Graham
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Adds rl_bind_key, rl_bind_keyseq, rl_newline, rl_unbind_key, rl_unbind_keyseq.
|
14
14
|
email: bcgraham+github@gmail.com
|
@@ -22,7 +22,7 @@ homepage: https://github.com/bcgraham/pryline
|
|
22
22
|
licenses:
|
23
23
|
- MIT
|
24
24
|
metadata: {}
|
25
|
-
post_install_message:
|
25
|
+
post_install_message:
|
26
26
|
rdoc_options: []
|
27
27
|
require_paths:
|
28
28
|
- lib
|
@@ -30,16 +30,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: 2.7.0
|
34
34
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
35
|
requirements:
|
36
36
|
- - ">="
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: '0'
|
39
39
|
requirements:
|
40
|
-
- Readline 8.
|
41
|
-
rubygems_version: 3.
|
42
|
-
signing_key:
|
40
|
+
- Readline 8.1
|
41
|
+
rubygems_version: 3.5.3
|
42
|
+
signing_key:
|
43
43
|
specification_version: 4
|
44
44
|
summary: Extend Readline interface to more functions.
|
45
45
|
test_files: []
|