pryline 0.0.1

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 +7 -0
  2. data/lib/pryline.rb +136 -0
  3. data/lib/version.rb +3 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a8a05c3d38eab0ed627af981380502a0a4c43890e39510ae283b5fad19fdcbdd
4
+ data.tar.gz: bc406e7e2f7186506defdc6b6d248ba17570cabdf8f2c3e3ab213526801933ba
5
+ SHA512:
6
+ metadata.gz: 10a1ff3fb910769f94577a1b84ff50c851b79f7d1783396da63684d7824dd3f6d2748e150817e372355baa5069afc35a0ab4f1df77076727da853565e6b1baae
7
+ data.tar.gz: 5c26f9a5c20dc8cbba41ec1b7a804fe5015ae21fb46413f7fc7af6bb44dd11355b3ba8e1707d0fdd307faa70196d6c5d65e4e34610dafa225b6a6a55d3173ea9
data/lib/pryline.rb ADDED
@@ -0,0 +1,136 @@
1
+ require 'fiddle'
2
+ require 'forwardable'
3
+ module Pryline
4
+ unless defined?(@@loaded) && @@loaded
5
+ HISTORY = Readline::HISTORY
6
+ extend SingleForwardable
7
+ def_delegators :Readline,
8
+ :basic_quote_characters,
9
+ :basic_quote_characters=,
10
+ :basic_word_break_characters,
11
+ :basic_word_break_characters=,
12
+ :completer_quote_characters,
13
+ :completer_quote_characters=,
14
+ :completer_word_break_characters,
15
+ :completer_word_break_characters=,
16
+ :completion_append_character,
17
+ :completion_append_character=,
18
+ :completion_case_fold,
19
+ :completion_case_fold=,
20
+ :completion_proc,
21
+ :completion_proc=,
22
+ :completion_quote_character,
23
+ :delete_text,
24
+ :emacs_editing_mode,
25
+ :emacs_editing_mode?,
26
+ :filename_quote_characters,
27
+ :filename_quote_characters=,
28
+ :get_screen_size,
29
+ :input=,
30
+ :insert_text,
31
+ :line_buffer,
32
+ :output=,
33
+ :point,
34
+ :point=,
35
+ :pre_input_hook,
36
+ :pre_input_hook=,
37
+ :quoting_detection_proc,
38
+ :quoting_detection_proc=,
39
+ :readline,
40
+ :redisplay,
41
+ :refresh_line,
42
+ :set_screen_size,
43
+ :special_prefixes,
44
+ :special_prefixes=,
45
+ :vi_editing_mode,
46
+ :vi_editing_mode?
47
+
48
+ libreadline = Fiddle.dlopen(nil)
49
+
50
+ BLOCK_CALLERS = {}
51
+
52
+ # accept line
53
+ accept_line = Fiddle::Function.new(
54
+ libreadline['rl_newline'],
55
+ [Fiddle::TYPE_INT, Fiddle::TYPE_INT],
56
+ Fiddle::TYPE_INT
57
+ )
58
+
59
+ Pryline.define_singleton_method(:accept_line) do
60
+ accept_line.call(1, "\n".ord)
61
+ end
62
+
63
+ # null function
64
+ null_function = Fiddle::Function.new(
65
+ libreadline['_rl_null_function'],
66
+ [Fiddle::TYPE_INT, Fiddle::TYPE_INT],
67
+ Fiddle::TYPE_INT
68
+ )
69
+
70
+ # unbind key
71
+ unbind_key = Fiddle::Function.new(
72
+ libreadline['rl_unbind_key'],
73
+ [Fiddle::TYPE_INT],
74
+ Fiddle::TYPE_INT
75
+ )
76
+
77
+ Pryline.define_singleton_method(:unbind_key) do |key|
78
+ unbind_key.call(key.ord)
79
+ end
80
+
81
+ # bind key
82
+ bind_key = Fiddle::Function.new(
83
+ libreadline['rl_bind_key'],
84
+ [Fiddle::TYPE_INT, Fiddle::TYPE_UINTPTR_T],
85
+ Fiddle::TYPE_INT
86
+ )
87
+
88
+ Pryline.define_singleton_method(:bind_key) do |key, &block|
89
+ unbind_key.call(key.ord)
90
+ BLOCK_CALLERS[key] = Fiddle::Closure::BlockCaller.new(
91
+ Fiddle::TYPE_VOID,
92
+ [Fiddle::TYPE_VOID],
93
+ &block
94
+ )
95
+ bind_key.call(
96
+ key.ord,
97
+ BLOCK_CALLERS[key].to_i
98
+ )
99
+ end
100
+
101
+ # bind key sequence
102
+ bind_keyseq = Fiddle::Function.new(
103
+ libreadline['rl_bind_keyseq'],
104
+ [Fiddle::TYPE_UINTPTR_T, Fiddle::TYPE_UINTPTR_T],
105
+ Fiddle::TYPE_INT
106
+ )
107
+ # unbind key sequence
108
+ Pryline.define_singleton_method(:unbind_keyseq) do |keyseq_ptr|
109
+ bind_keyseq.call(
110
+ Fiddle::Pointer[keyseq_ptr],
111
+ null_function.to_i
112
+ )
113
+ end
114
+ Pryline.define_singleton_method(:bind_keyseq) do |keyseq, &block|
115
+ unbind_keyseq(keyseq)
116
+ BLOCK_CALLERS[keyseq] = Fiddle::Closure::BlockCaller.new(
117
+ Fiddle::TYPE_VOID,
118
+ [Fiddle::TYPE_VOID],
119
+ &block
120
+ )
121
+ bind_keyseq.call(
122
+ Fiddle::Pointer[keyseq],
123
+ BLOCK_CALLERS[keyseq].to_i
124
+ )
125
+ end
126
+
127
+ # helpers
128
+ Pryline.define_singleton_method(:replace_buffer) do |new_contents|
129
+ Pryline.delete_text
130
+ Pryline.point = 0
131
+ Pryline.insert_text input
132
+ Pryline.redisplay
133
+ end
134
+ @@loaded = true
135
+ end
136
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Pryline
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pryline
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Brian Graham
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-01-09 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Adds rl_bind_key, rl_bind_keyseq, rl_newline, rl_unbind_key, rl_unbind_keyseq.
14
+ email: bcgraham+github@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/pryline.rb
20
+ - lib/version.rb
21
+ homepage: https://github.com/bcgraham/pryline
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.3.0
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements:
40
+ - Readline 8.0
41
+ rubygems_version: 3.0.1
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Extend Readline interface to more functions.
45
+ test_files: []