pryline 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pryline.rb +179 -5
  3. data/lib/version.rb +1 -1
  4. metadata +8 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e87928b336c07a89688bd40bbcc3b2b151f10c650542964bb5577ddbc23c554f
4
- data.tar.gz: 7974b43eb0a56435b2bbeb7079db7f196bdd9f505575af8de15ccf89461b593d
3
+ metadata.gz: 76de10badae29d39145da9e24ac05d879ebd6c37b96f12f3c2e1b54cfa7c7277
4
+ data.tar.gz: ee668e5a3cb247047b065ce25424506baddc8ff299b1e568f95e81bce76499db
5
5
  SHA512:
6
- metadata.gz: 00df8a6a07c27e7e76a4c7f687461655135500d963a1413582e6f0e8bfe6a396ab04dd469a50bc3f421fa93bd4605fef2fb180fa258428f043723280647b82e9
7
- data.tar.gz: fd3f44e02221234f23497a6e365d5311ce583a4e80f2e4066909f9a50893e2f9c51599cfaf2bbf52ba4b5bbbbf45dccb5787624d85ae22e1a18b4438b23ed1ec
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::TYPE_VOID,
142
- [Fiddle::TYPE_VOID],
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::TYPE_VOID,
168
- [Fiddle::TYPE_VOID],
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 input
355
+ Pryline.insert_text new_contents
182
356
  Pryline.redisplay
183
357
  end
184
358
  @@loaded = true
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pryline
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
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
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: 2020-01-13 00:00:00.000000000 Z
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.3.0
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.0
41
- rubygems_version: 3.0.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: []