pryline 0.0.4 → 0.0.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.
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: []