nvim 1.6.0 → 1.7.0
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.
- checksums.yaml +4 -4
- data/INFO.yaml +1 -1
- data/README.md +15 -9
- data/lib/neovim/client.rb +59 -0
- data/lib/neovim/info.rb +2 -2
- data/lib/neovim/remote.rb +1 -1
- data/lib/neovim/ruby_provider.rb +12 -26
- data/lib/neovim/tools/copy.rb +3 -3
- metadata +3 -4
- data/lib/neovim/foreign/xxd.rb +0 -195
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec0d28da100b26fcaca45acb51d863eb7683978b06dab4345f265d8c75d5b28a
|
4
|
+
data.tar.gz: c086178c5dcfd31520dfc13142a2827ae5b36edd5340f3037baf1246c6e3af03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1d1de3dd0b50f63ba7f62335e6d6e0d1f061c9771e59848ca1d231049f4e668212a3f2fdc4b7b26ec4be0d78041b3142b0d8d4ba14bbd4ab06d8325f7c841f7
|
7
|
+
data.tar.gz: 17d86d71201706daeb1fca9691bdfea2ac4b064bdeafc2deeef0f394559acc405072f04699cb01363984d14d5238f794d14218be2c6be15240df0502d10ddacc
|
data/INFO.yaml
CHANGED
data/README.md
CHANGED
@@ -224,7 +224,7 @@ Further, the variables `$range` and `$lines` will be set.
|
|
224
224
|
2 bar
|
225
225
|
3 baz
|
226
226
|
~
|
227
|
-
:%ruby puts $range
|
227
|
+
:%ruby puts $range, $lines
|
228
228
|
```
|
229
229
|
|
230
230
|
The legacy variables `$curbuf` and `$curwin` are supported.
|
@@ -411,21 +411,26 @@ main:1:004> \q!!
|
|
411
411
|
Put text into an X selection or a TMux register.
|
412
412
|
|
413
413
|
```vim
|
414
|
-
|
414
|
+
rubyfile <neovim/tools/copy>
|
415
415
|
'<,'>ruby xsel $lines
|
416
416
|
'<,'>ruby xsel! $lines
|
417
417
|
'<,'>ruby tmuxbuf $lines
|
418
418
|
```
|
419
419
|
|
420
|
-
|
420
|
+
Maybe you like to install the
|
421
|
+
[Nxxd](https://github.com/BertramScharpf/ruby-nxxd) gem.
|
421
422
|
|
422
423
|
```vim
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
424
|
+
rubyfile <nxxd>
|
425
|
+
ruby r = (0...0x80).to_a.map { |c| c.chr }.join
|
426
|
+
ruby puts Nxxd::Dump.new.run r
|
427
|
+
```
|
428
|
+
|
429
|
+
Or even:
|
430
|
+
|
431
|
+
```vim
|
432
|
+
rubyfile <nxxd>
|
433
|
+
HexDump /etc/localtime
|
429
434
|
```
|
430
435
|
|
431
436
|
|
@@ -433,4 +438,5 @@ EOT
|
|
433
438
|
|
434
439
|
* (C) 2024,2025 Bertram Scharpf <software@bertram-scharpf.de>
|
435
440
|
* License: [BSD-2-Clause+](./LICENSE)
|
441
|
+
* Repository: [ruby-nvim](https://github.com/BertramScharpf/ruby-nvim)
|
436
442
|
|
data/lib/neovim/client.rb
CHANGED
@@ -114,5 +114,64 @@ module Neovim
|
|
114
114
|
|
115
115
|
end
|
116
116
|
|
117
|
+
class Lines
|
118
|
+
|
119
|
+
include Enumerable
|
120
|
+
|
121
|
+
def initialize client, range
|
122
|
+
case client
|
123
|
+
when Buffer then @client, @buffer = client.client, client.index
|
124
|
+
else @client, @buffer = client, 0
|
125
|
+
end
|
126
|
+
@i, @last = range.begin, range.end
|
127
|
+
end
|
128
|
+
|
129
|
+
def to_s
|
130
|
+
(@client.buf_get_lines @buffer, @i-1, @last, true).join $/
|
131
|
+
end
|
132
|
+
|
133
|
+
def method_missing sym, *args, **kwargs, &block
|
134
|
+
to_a.send sym, *args, **kwargs, &block
|
135
|
+
end
|
136
|
+
|
137
|
+
def each
|
138
|
+
while @i <= @last do
|
139
|
+
@inc = 1
|
140
|
+
l, = @client.buf_get_lines @buffer, @i-1, @i, true
|
141
|
+
yield l
|
142
|
+
@i += @inc
|
143
|
+
end
|
144
|
+
ensure
|
145
|
+
@i = nil
|
146
|
+
end
|
147
|
+
alias each_line each
|
148
|
+
|
149
|
+
def each_with_no
|
150
|
+
each do |l|
|
151
|
+
yield l, @i
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def map!
|
156
|
+
each do |l|
|
157
|
+
h = l.hash
|
158
|
+
m = yield l, @i
|
159
|
+
r =
|
160
|
+
case m
|
161
|
+
when String then m.lines unless m.hash == h
|
162
|
+
when Enumerable then m.map { |l| l.to_s }
|
163
|
+
when nil, false then []
|
164
|
+
end
|
165
|
+
if r then
|
166
|
+
r.each { |l| l.chomp! }
|
167
|
+
@client.buf_set_lines @buffer, @i-1, @i, true, r
|
168
|
+
@inc = r.length
|
169
|
+
@last += @inc-1
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
175
|
+
|
117
176
|
end
|
118
177
|
|
data/lib/neovim/info.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require "neovim/meta.rb"
|
2
2
|
Neovim::INFO = Neovim::Meta.new "nvim",
|
3
|
-
version: "1.
|
3
|
+
version: "1.7.0",
|
4
4
|
license: "BSD-2-Clause+",
|
5
5
|
authors: ["Bertram Scharpf"],
|
6
6
|
email: "software@bertram-scharpf.de",
|
7
7
|
summary: "Yet another Ruby client for Neovim",
|
8
8
|
description: "A simple Ruby client for Neovim.\nClean code, minimal dependecies, no frills, no wokeness.",
|
9
9
|
homepage: "https://github.com/BertramScharpf/ruby-nvim",
|
10
|
-
commit: "
|
10
|
+
commit: "4e96338"
|
data/lib/neovim/remote.rb
CHANGED
@@ -191,7 +191,7 @@ module Neovim
|
|
191
191
|
if @responses.key? message.request_id then
|
192
192
|
@responses[ message.request_id] = message
|
193
193
|
else
|
194
|
-
log :warning, "Dropped response", message.request_id
|
194
|
+
log :warning, "Dropped response", rid: message.request_id
|
195
195
|
end
|
196
196
|
when Message::Request, Message::Notification then
|
197
197
|
h = find_handler message.method_name
|
data/lib/neovim/ruby_provider.rb
CHANGED
@@ -100,18 +100,13 @@ module Neovim
|
|
100
100
|
|
101
101
|
def set_globals client, range
|
102
102
|
set_global_client client do
|
103
|
-
lines =
|
104
|
-
|
105
|
-
yield lines
|
103
|
+
$range, $lines = range, (Lines.new client, range)
|
104
|
+
yield $lines
|
106
105
|
end
|
107
106
|
ensure
|
108
107
|
$range, $lines = nil, nil
|
109
108
|
end
|
110
109
|
|
111
|
-
def get_lines client, range
|
112
|
-
client.buf_get_lines 0, range.begin-1, range.end, true
|
113
|
-
end
|
114
|
-
|
115
110
|
def plugin_provider &block
|
116
111
|
run_dsl DslProvider, &block
|
117
112
|
end
|
@@ -123,11 +118,13 @@ module Neovim
|
|
123
118
|
dsl.setup do |client|
|
124
119
|
r = client.get_var "ruby_require" rescue nil
|
125
120
|
case r
|
126
|
-
when
|
127
|
-
when
|
128
|
-
|
121
|
+
when String then r = r.split
|
122
|
+
when Array then
|
123
|
+
when Hash then r = r.keys
|
124
|
+
when nil then nil
|
125
|
+
else r = [r.to_s]
|
129
126
|
end
|
130
|
-
if r then
|
127
|
+
if r.notempty? then
|
131
128
|
WriteOut.redirect client do # Protect the RPC interface against erroneous output.
|
132
129
|
r.each do |l|
|
133
130
|
require l
|
@@ -164,11 +161,10 @@ module Neovim
|
|
164
161
|
code.rstrip!
|
165
162
|
if code =~ /\A\|?(-)?\z/ then # | is a workaround because Neovim doesn't allow empty code (the ultimate Quine).
|
166
163
|
no_out = $1
|
167
|
-
|
164
|
+
set_globals client, fst..lst do |lines|
|
168
165
|
client.command "#{lst}"
|
169
|
-
code = (get_lines client, fst..lst).join $/
|
170
166
|
WriteBuf.redirect client do
|
171
|
-
r = script_binding.eval
|
167
|
+
r = script_binding.eval lines.to_s, "ruby_run"
|
172
168
|
unless no_out or r.nil? then
|
173
169
|
script_binding.local_variable_set :_, r
|
174
170
|
puts "#=> #{r.inspect}"
|
@@ -219,20 +215,10 @@ module Neovim
|
|
219
215
|
# This is called by the +:rubydo+ command.
|
220
216
|
dsl.rpc :ruby_do_range do |client,fst,lst,code|
|
221
217
|
set_globals client, fst..lst do |lines|
|
222
|
-
|
223
|
-
lines.each do |l|
|
224
|
-
h = l.hash
|
218
|
+
lines.map! do |l,i|
|
225
219
|
(script_binding.eval 'proc do |l,i| $_, $. = l, i end').call l, i
|
226
220
|
script_binding.eval code, "ruby_do_range"
|
227
|
-
|
228
|
-
if m.hash != h then
|
229
|
-
m = m.lines
|
230
|
-
m.each { |x| x.chomp! }
|
231
|
-
client.buf_set_lines 0, i-1, i, true, m
|
232
|
-
i += m.length
|
233
|
-
else
|
234
|
-
i += 1
|
235
|
-
end
|
221
|
+
script_binding.eval '$_'
|
236
222
|
end
|
237
223
|
end
|
238
224
|
nil
|
data/lib/neovim/tools/copy.rb
CHANGED
@@ -63,9 +63,9 @@ module Kernel
|
|
63
63
|
|
64
64
|
def cmd_write cmd, data
|
65
65
|
case data
|
66
|
-
when
|
67
|
-
when String
|
68
|
-
else
|
66
|
+
when Enumerable then data = data.join $/
|
67
|
+
when String then nil
|
68
|
+
else data = data.to_s
|
69
69
|
end
|
70
70
|
IO.popen cmd, "w" do |t| t.write data end
|
71
71
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nvim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bertram Scharpf
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-02-05 00:00:00.000000000 Z
|
11
11
|
dependencies: []
|
12
12
|
email: software@bertram-scharpf.de
|
13
13
|
executables:
|
@@ -48,7 +48,6 @@ files:
|
|
48
48
|
- lib/neovim/foreign/mplight/bufferio.rb
|
49
49
|
- lib/neovim/foreign/supplement.rb
|
50
50
|
- lib/neovim/foreign/supplement/socket.rb
|
51
|
-
- lib/neovim/foreign/xxd.rb
|
52
51
|
- lib/neovim/handler.rb
|
53
52
|
- lib/neovim/host.rb
|
54
53
|
- lib/neovim/info.rb
|
@@ -80,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
79
|
- !ruby/object:Gem::Version
|
81
80
|
version: '0'
|
82
81
|
requirements: []
|
83
|
-
rubygems_version: 3.6.
|
82
|
+
rubygems_version: 3.6.3
|
84
83
|
specification_version: 4
|
85
84
|
summary: Yet another Ruby client for Neovim
|
86
85
|
test_files: []
|
data/lib/neovim/foreign/xxd.rb
DELETED
@@ -1,195 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# neovim/foreign/xxd.rb -- Xxd reimplementation
|
3
|
-
#
|
4
|
-
|
5
|
-
# The purpose of this is simply to reduce dependencies.
|
6
|
-
|
7
|
-
begin
|
8
|
-
require "xxd"
|
9
|
-
rescue LoadError
|
10
|
-
|
11
|
-
# ----------------------------------------------------------------
|
12
|
-
#
|
13
|
-
# xxd.rb -- A Reimplementation of Xxd in plain Ruby
|
14
|
-
#
|
15
|
-
|
16
|
-
module Xxd
|
17
|
-
|
18
|
-
module ReadChunks
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def read_chunks input
|
23
|
-
case input
|
24
|
-
when String then
|
25
|
-
i = 0
|
26
|
-
while i < input.bytesize do
|
27
|
-
b = input.byteslice i, @line_size
|
28
|
-
yield b
|
29
|
-
i += @line_size
|
30
|
-
end
|
31
|
-
else
|
32
|
-
loop do
|
33
|
-
b = input.read @line_size
|
34
|
-
break unless b
|
35
|
-
yield b
|
36
|
-
break if b.length < @line_size
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
class Dump
|
44
|
-
|
45
|
-
include ReadChunks
|
46
|
-
|
47
|
-
LINE_SIZE = 16
|
48
|
-
ADDR_FMT = "%%0%dx:"
|
49
|
-
|
50
|
-
def initialize full: nil, upper: false, line_size: nil, addr_len: nil, input: nil
|
51
|
-
@full = full
|
52
|
-
@input = input
|
53
|
-
@line_size = line_size||LINE_SIZE
|
54
|
-
@addr_fmt = ADDR_FMT % (addr_len||8)
|
55
|
-
@nib_fmt = "%02x"
|
56
|
-
if upper then
|
57
|
-
@addr_fmt.upcase!
|
58
|
-
@nib_fmt.upcase!
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def run input
|
63
|
-
addr = 0
|
64
|
-
prev, repeat = nil, false
|
65
|
-
yield "# #@input" if @input
|
66
|
-
read_chunks input do |b|
|
67
|
-
if b == prev and not @full then
|
68
|
-
unless repeat then
|
69
|
-
yield "*"
|
70
|
-
repeat = true
|
71
|
-
end
|
72
|
-
else
|
73
|
-
r = @addr_fmt % addr
|
74
|
-
r << " "
|
75
|
-
h = b.unpack "C*"
|
76
|
-
sp = false
|
77
|
-
@line_size.times {
|
78
|
-
x = h.shift
|
79
|
-
r << (x ? @nib_fmt % x : " ")
|
80
|
-
r << " " if sp
|
81
|
-
sp = !sp
|
82
|
-
}
|
83
|
-
r << " " << (b.gsub /[^ -~]/, ".")
|
84
|
-
yield r
|
85
|
-
prev, repeat = b, false
|
86
|
-
end
|
87
|
-
addr += b.size
|
88
|
-
end
|
89
|
-
yield @addr_fmt % addr
|
90
|
-
end
|
91
|
-
|
92
|
-
class <<self
|
93
|
-
|
94
|
-
def reverse input
|
95
|
-
r = nil
|
96
|
-
pos = 0
|
97
|
-
repeat = false
|
98
|
-
input.each_line { |l|
|
99
|
-
case l
|
100
|
-
when /^\s*#/ then
|
101
|
-
when /^\*/ then repeat = true
|
102
|
-
else
|
103
|
-
if (l.slice! /^(\h+):\s*/) then
|
104
|
-
addr = $1.to_i 0x10
|
105
|
-
if repeat then
|
106
|
-
while pos + r.length < addr do
|
107
|
-
yield r
|
108
|
-
pos += r.length
|
109
|
-
end
|
110
|
-
if pos < addr then
|
111
|
-
yield r[ 0, addr - pos]
|
112
|
-
pos = addr
|
113
|
-
end
|
114
|
-
repeat = false
|
115
|
-
else
|
116
|
-
if pos < addr then
|
117
|
-
r = ([0].pack "C*") * (addr - pos)
|
118
|
-
yield r
|
119
|
-
pos = addr
|
120
|
-
elsif pos > addr then
|
121
|
-
yield nil, addr
|
122
|
-
pos = addr
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
row = []
|
127
|
-
while (nib = l.slice! /^\h\h ?/) do
|
128
|
-
row.push nib.to_i 0x10
|
129
|
-
end
|
130
|
-
if row.any? then
|
131
|
-
r = row.pack "C*"
|
132
|
-
yield r
|
133
|
-
pos += r.length
|
134
|
-
end
|
135
|
-
end
|
136
|
-
}
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
class DumpNums
|
144
|
-
|
145
|
-
include ReadChunks
|
146
|
-
|
147
|
-
LINE_SIZE = 12
|
148
|
-
|
149
|
-
def initialize upper: false, line_size: nil, capitals: nil, input: nil
|
150
|
-
@line_size = line_size||LINE_SIZE
|
151
|
-
@nib_fmt = "%#04x"
|
152
|
-
@nib_fmt.upcase! if upper
|
153
|
-
if input then
|
154
|
-
@varname = input.dup
|
155
|
-
@varname.insert 0, "__" if @varname =~ /\A\d/
|
156
|
-
@varname.gsub! /[^a-zA-Z0-9]/, "_"
|
157
|
-
@varname.upcase! if capitals
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def run input, &block
|
162
|
-
if @varname then
|
163
|
-
yield "unsigned char #@varname[] = {"
|
164
|
-
yield "};"
|
165
|
-
len = run_plain input, &block
|
166
|
-
yield "unsigned int #@varname\_len = %d;" % len
|
167
|
-
else
|
168
|
-
run_plain input, &block
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
private
|
173
|
-
|
174
|
-
def run_plain input
|
175
|
-
prev, len = nil, 0
|
176
|
-
read_chunks input do |b|
|
177
|
-
if prev then
|
178
|
-
prev << ","
|
179
|
-
yield prev
|
180
|
-
end
|
181
|
-
prev = " " + ((b.unpack "C*").map { |x| @nib_fmt % x }.join ", ")
|
182
|
-
len += b.bytesize
|
183
|
-
end
|
184
|
-
yield prev if prev
|
185
|
-
len
|
186
|
-
end
|
187
|
-
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
# ----------------------------------------------------------------
|
193
|
-
|
194
|
-
end
|
195
|
-
|