pryline 0.0.1

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 +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: []