pryline 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/pryline.rb +136 -0
- data/lib/version.rb +3 -0
- 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
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: []
|