kv 0.5.0 → 0.6.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/README.md +5 -3
- data/lib/kv.rb +58 -4
- data/lib/kv/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70b1f3af205a0cc4e0654de74a8d9e31e023719c8cf04cd6fbb9e43d96b14be4
|
4
|
+
data.tar.gz: 5265f5930278a1f39f5d00f6a6f3265e436bcdce233b7350f8f791d7f0752fee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 935613e6eb8be95f504d75b777b83a864bab18a34ccbdc4694df5e82c8b2312d270e9f4f4f5da7ef07ed360cc083281705b61ff62a329aa7004da289e989909f
|
7
|
+
data.tar.gz: 7fb6b11b84f0c014c956cf0f0e223a74ce88426860f65919ef2e351028b957876c72a255fba10c2ed2e65dac0dbf701691cf10817745f7ec231a42de76ff7ed4
|
data/README.md
CHANGED
@@ -10,8 +10,6 @@ Install it yourself as:
|
|
10
10
|
|
11
11
|
kv requires recent Ruby and curses gem.
|
12
12
|
|
13
|
-
# Usage
|
14
|
-
|
15
13
|
## Use kv
|
16
14
|
|
17
15
|
```
|
@@ -27,14 +25,18 @@ $ [CMD] | kv [OPTIONS]
|
|
27
25
|
# View command help
|
28
26
|
$ kv
|
29
27
|
|
30
|
-
|
28
|
+
Usage: kv [options]
|
31
29
|
-f following mode like "tail -f"
|
32
30
|
-n, --line-number LINE goto LINE
|
33
31
|
-N Show lines
|
34
32
|
-T, --time-stamp Enable time stamp
|
35
33
|
-e CMD Run CMD as a child process
|
34
|
+
-p, --pipe Open named pipe
|
35
|
+
-s Separation mode (tsv)
|
36
36
|
```
|
37
37
|
|
38
|
+
Note that `--pipe` option creates a named pipe (`~/.kv_pipe` or a specified file) if there is not a fifo file.
|
39
|
+
|
38
40
|
## Command on a pager
|
39
41
|
|
40
42
|
```
|
data/lib/kv.rb
CHANGED
@@ -30,8 +30,8 @@ class Screen
|
|
30
30
|
|
31
31
|
def initialize input, lines: [],
|
32
32
|
name: nil, search: nil, first_line: 0,
|
33
|
-
following_mode: false, line_mode: false,
|
34
|
-
time_stamp: nil, ext_input: nil
|
33
|
+
following_mode: false, line_mode: false, separation_mode: false,
|
34
|
+
time_stamp: nil, ext_input: nil, fifo_file: nil
|
35
35
|
@rs = RenderStatus.new
|
36
36
|
@last_rs = nil
|
37
37
|
@rs.y = first_line
|
@@ -48,6 +48,8 @@ class Screen
|
|
48
48
|
|
49
49
|
@time_stamp = time_stamp
|
50
50
|
@ext_input = ext_input
|
51
|
+
@fifo_file = fifo_file
|
52
|
+
@separation_mode = separation_mode
|
51
53
|
|
52
54
|
@lines = lines
|
53
55
|
@mode = :screen
|
@@ -106,6 +108,7 @@ class Screen
|
|
106
108
|
end
|
107
109
|
|
108
110
|
@lines << setup_line(line)
|
111
|
+
|
109
112
|
while !@load_unlimited && @lines.size > self.y + @buffer_lines
|
110
113
|
@yq.pop; @yq.clear
|
111
114
|
end
|
@@ -115,6 +118,10 @@ class Screen
|
|
115
118
|
if @filename
|
116
119
|
@file_mtime = File.mtime(@filename)
|
117
120
|
@file_lastpos = input.tell
|
121
|
+
elsif @fifo_file
|
122
|
+
input = open(@fifo_file)
|
123
|
+
log(input)
|
124
|
+
redo
|
118
125
|
end
|
119
126
|
input.close
|
120
127
|
@loading = false
|
@@ -215,6 +222,15 @@ class Screen
|
|
215
222
|
|
216
223
|
Curses.clear
|
217
224
|
|
225
|
+
if @separation_mode && (lines = @lines[self.y ... (self.y + c_lines - 1)])
|
226
|
+
max_cols = []
|
227
|
+
lines.each.with_index{|line, ln|
|
228
|
+
line.split("\t").each_with_index{|w, i|
|
229
|
+
max_cols[i] = max_cols[i] ? [max_cols[i], w.size].max : w.size
|
230
|
+
}
|
231
|
+
}
|
232
|
+
end
|
233
|
+
|
218
234
|
(c_lines-1).times{|i|
|
219
235
|
lno = i + self.y
|
220
236
|
line = @lines[lno]
|
@@ -257,6 +273,17 @@ class Screen
|
|
257
273
|
|
258
274
|
line = line[self.x, cols] || ''
|
259
275
|
|
276
|
+
if @separation_mode
|
277
|
+
line = line.split(/\t/).tap{|e|
|
278
|
+
if (max = max_cols.size) > 0
|
279
|
+
# fill empty columns
|
280
|
+
e[max - 1] ||= nil
|
281
|
+
end
|
282
|
+
}.map.with_index{|w, i|
|
283
|
+
"%-#{max_cols[i]}s" % w
|
284
|
+
}.join(' | ')
|
285
|
+
end
|
286
|
+
|
260
287
|
if !@rs.search || !(Regexp === @rs.search)
|
261
288
|
Curses.addstr line
|
262
289
|
else
|
@@ -712,10 +739,31 @@ class KV
|
|
712
739
|
}
|
713
740
|
|
714
741
|
files = parse_option(argv)
|
742
|
+
name = files.shift
|
715
743
|
|
716
744
|
@pipe_in = nil
|
717
745
|
|
718
|
-
if
|
746
|
+
if @opts[:pipe] || (name && File.pipe?(name))
|
747
|
+
@opts.delete(:pipe)
|
748
|
+
@opts[:fifo_file] = name || '/tmp/kv_pipe'
|
749
|
+
|
750
|
+
if name && File.pipe?(name)
|
751
|
+
# ok
|
752
|
+
else
|
753
|
+
begin
|
754
|
+
name ||= File.expand_path('~/.kv_pipe')
|
755
|
+
unlink_name = name
|
756
|
+
File.mkfifo(name)
|
757
|
+
at_exit{ puts "$ rm #{unlink_name}"; File.unlink(unlink_name) }
|
758
|
+
rescue Errno::EEXIST
|
759
|
+
raise "#{name} already exists."
|
760
|
+
end
|
761
|
+
end
|
762
|
+
|
763
|
+
puts "waiting for #{name}"
|
764
|
+
input = @pipe_in = open(name)
|
765
|
+
name = nil
|
766
|
+
elsif !name
|
719
767
|
case
|
720
768
|
when @opts[:e]
|
721
769
|
cmd = @opts.delete(:e)
|
@@ -733,7 +781,6 @@ class KV
|
|
733
781
|
@pipe_in = input
|
734
782
|
end
|
735
783
|
else
|
736
|
-
name = files.shift
|
737
784
|
begin
|
738
785
|
input = open(name)
|
739
786
|
rescue Errno::ENOENT
|
@@ -775,6 +822,12 @@ class KV
|
|
775
822
|
opts.on('-e CMD', 'Run CMD as a child process'){|cmd|
|
776
823
|
@opts[:e] = cmd
|
777
824
|
}
|
825
|
+
opts.on('-p', '--pipe', 'Open named pipe'){
|
826
|
+
@opts[:pipe] = true
|
827
|
+
}
|
828
|
+
opts.on('-s', 'Separation mode (tsv)'){
|
829
|
+
@opts[:separation_mode] = true
|
830
|
+
}
|
778
831
|
opts.parse!(argv)
|
779
832
|
end
|
780
833
|
|
@@ -785,6 +838,7 @@ class KV
|
|
785
838
|
@screens.last.control
|
786
839
|
rescue PopScreen
|
787
840
|
@screens.pop
|
841
|
+
@screens.last.redraw!
|
788
842
|
rescue PushScreen => e
|
789
843
|
@screens.push e.screen
|
790
844
|
@screens.last.redraw!
|
data/lib/kv/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Koichi Sasada
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|