pryline 0.0.5 → 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 +104 -6
  3. data/lib/version.rb +1 -1
  4. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e50f39f9558845777035a93b78401e6a8e5e728c6deb08c41dcf58fa8d0cfa7b
4
- data.tar.gz: 7e3d56b328292df1428dad319a68e5170a171a6164d54654de61d76f618dc47a
3
+ metadata.gz: 76de10badae29d39145da9e24ac05d879ebd6c37b96f12f3c2e1b54cfa7c7277
4
+ data.tar.gz: ee668e5a3cb247047b065ce25424506baddc8ff299b1e568f95e81bce76499db
5
5
  SHA512:
6
- metadata.gz: f3dca93b4bf451b89a252fe9688f4dea912136a4b0c2c4dbd480dd05676c21d71a3586a4ef091bca2491cd8a16bbf1f2db41ad208901b445733cbad2a863940d
7
- data.tar.gz: 26a899608964fd93f5ee12ab956e535b9f97186cb3fa3d892ccaf513a6670f1dbf0148a76ec12f61c2de4b1c48c47d6f8ed40c28e0634dd04c2190f254d1999c
6
+ metadata.gz: 9f0e79e8e8749165cf63c7b32e913571160a1f5b5a807d9089b6d38a2b9573b260a3d1582fec404c1c45faf09747c192fa2bcac3687c160ccd09cdd16dbf87c3
7
+ data.tar.gz: 75708cf6fed8e892ecb2d5f1c6817b3eb4f7b496bfd79e3e84d19fac4ad268e70a6dee446273574e4338bc40e241b4c477a7f80c529a2dee2d52f8fcc47e7492
data/lib/pryline.rb CHANGED
@@ -122,6 +122,31 @@ module Pryline
122
122
  where_history.call(nil)
123
123
  end
124
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
+
125
150
  # null function
126
151
  null_function = Fiddle::Function.new(
127
152
  libreadline['_rl_null_function'],
@@ -150,8 +175,8 @@ module Pryline
150
175
  Pryline.define_singleton_method(:bind_key) do |key, &block|
151
176
  unbind_key.call(key.ord)
152
177
  BLOCK_CALLERS[key] = Fiddle::Closure::BlockCaller.new(
153
- Fiddle::TYPE_VOID,
154
- [Fiddle::TYPE_VOID],
178
+ Fiddle::TYPE_INT,
179
+ [Fiddle::TYPE_INT, Fiddle::TYPE_INT],
155
180
  &block
156
181
  )
157
182
  bind_key.call(
@@ -176,8 +201,8 @@ module Pryline
176
201
  Pryline.define_singleton_method(:bind_keyseq) do |keyseq, &block|
177
202
  unbind_keyseq(keyseq)
178
203
  BLOCK_CALLERS[keyseq] = Fiddle::Closure::BlockCaller.new(
179
- Fiddle::TYPE_VOID,
180
- [Fiddle::TYPE_VOID],
204
+ Fiddle::TYPE_INT,
205
+ [Fiddle::TYPE_INT, Fiddle::TYPE_INT],
181
206
  &block
182
207
  )
183
208
  bind_keyseq.call(
@@ -193,7 +218,7 @@ module Pryline
193
218
  save_prompt.call(nil)
194
219
  end
195
220
  set_message = Fiddle::Function.new(libreadline['rl_message'], [Fiddle::TYPE_UINTPTR_T], Fiddle::TYPE_INT)
196
- Pryline.define_singleton_method(:set_message) do |message|
221
+ Pryline.define_singleton_method(:set_message_with_save) do |message|
197
222
  buffer, point = Pryline.line_buffer, Pryline.point
198
223
  Pryline.delete_text
199
224
  Pryline.point = 0
@@ -205,16 +230,30 @@ module Pryline
205
230
  Fiddle::Pointer[message]
206
231
  )
207
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
208
244
 
209
245
  restore_prompt = Fiddle::Function.new(libreadline['rl_restore_prompt'], [Fiddle::TYPE_VOID], Fiddle::TYPE_INT)
210
246
  Pryline.define_singleton_method(:restore_prompt) do
211
247
  restore_prompt.call(nil)
212
248
  end
213
249
  clear_message = Fiddle::Function.new(libreadline['rl_clear_message'], [Fiddle::TYPE_VOID], Fiddle::TYPE_INT)
214
- Pryline.define_singleton_method(:clear_message) do
250
+ Pryline.define_singleton_method(:clear_message_with_restore) do
215
251
  Pryline.restore_prompt
216
252
  clear_message.call(nil)
217
253
  end
254
+ Pryline.define_singleton_method(:clear_message) do
255
+ clear_message.call(nil)
256
+ end
218
257
 
219
258
  move_vert = Fiddle::Function.new(libreadline['_rl_move_vert'], [Fiddle::TYPE_INT], Fiddle::TYPE_VOID)
220
259
  Pryline.define_singleton_method(:move_vert) do |dest|
@@ -250,6 +289,65 @@ module Pryline
250
289
  ApplicationName.rl_readline_name = Fiddle::Pointer[name]
251
290
  end
252
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
+
253
351
  # helpers
254
352
  Pryline.define_singleton_method(:replace_buffer) do |new_contents|
255
353
  Pryline.delete_text
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pryline
2
- VERSION = "0.0.5"
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.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Graham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-06 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
@@ -30,7 +30,7 @@ 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
  - - ">="
@@ -38,7 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
38
  version: '0'
39
39
  requirements:
40
40
  - Readline 8.1
41
- rubygems_version: 3.1.4
41
+ rubygems_version: 3.5.3
42
42
  signing_key:
43
43
  specification_version: 4
44
44
  summary: Extend Readline interface to more functions.