kv 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|