rbnotes 0.4.6 → 0.4.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8c8badba84cecd738d81b16ec9539c6b8f51199433da1808bcf07fffd45635c
4
- data.tar.gz: ab85b5e5d963b88014ffeb780c8da1beb2116e55789e13dfcd2fdea3183651e1
3
+ metadata.gz: a6625e8e9365a5c69cb9fd1f9d227e04247edda6ddbb9f5d3d442e0e7f87ac96
4
+ data.tar.gz: 5b00c1ecef74b47957112de785c57e249aa35b07c8809401872f75dec392f4c1
5
5
  SHA512:
6
- metadata.gz: 6bcbd5ce75daf93183480fe1f00ab72d801b70c894bb9ba70ecc8f03cc7cdc3f2173c71dc0a7c6d119cfcbb9a0c63dff5b8c05a527c1df8dfbbe186509a4e41c
7
- data.tar.gz: 72a593af5a18ce7482952df1ceb9d2eb6132d2072bb3adc70075b08118e0594d0f294738e74ddf0087adb2a06946f145cef4ff71b4425aeb855aeaf68e211ac9
6
+ metadata.gz: 3d6e047ed738940dcbadd14bc8c176c486404951e4349eebe82c8bfbd92c1ad09fe996adb7c5db8bfdbf20ca364b6cebabd5dad3a2edbd9a597a2ad373a658ec
7
+ data.tar.gz: 504add631c2960e0b12eabce1075ba6d90745db531ebb95b1721a46bee236d7906d489169e0161d9e6213627cd28ceea59a8db1bb0e9c3f5ab0ba8878befb3c7
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
  ## [Unreleased]
8
8
  Nothing to record here.
9
9
 
10
+ ## [0.4.7] - 2020-11-15
11
+ ### Changed
12
+ - Beautify output of the `search` command. (#63)
13
+
14
+ ### Fixed
15
+ - Fix issue #61: `list` command fails in pipeline.
16
+
10
17
  ## [0.4.6] - 2020-11-13
11
18
  ### Added
12
19
  - Add a new command `pick` to select a note with picker program. (#59)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbnotes (0.4.6)
4
+ rbnotes (0.4.7)
5
5
  textrepo (~> 0.5.4)
6
6
  unicode-display_width (~> 1.7)
7
7
 
@@ -48,6 +48,11 @@ app = App.new
48
48
  begin
49
49
  app.parse_global_options(ARGV)
50
50
  app.run(ARGV)
51
+ rescue Errno::EPIPE => e
52
+ # Fix issue #61: When the pipeline which rbnotes connects is
53
+ # discarded by the other program, the execption was raised. It does
54
+ # not end abnormally for rbnotes. So, just ignores the exception.
55
+ exit 0
51
56
  rescue MissingArgumentError, MissingTimestampError,
52
57
  NoEditorError, ProgramAbortError,
53
58
  Textrepo::InvalidTimestampStringError,
@@ -39,11 +39,8 @@ module Rbnotes::Commands
39
39
  result = repo.search(pattern, timestamp_pattern)
40
40
  rescue Textrepo::InvalidSearchResultError => e
41
41
  puts e.message
42
- else
43
- result.each { |stamp, num, match|
44
- puts "#{stamp}:#{num}:#{match}"
45
- }
46
42
  end
43
+ print_search_result(result.map{ |e| SearchEntry.new(*e) })
47
44
  end
48
45
 
49
46
  def help # :nodoc:
@@ -63,5 +60,47 @@ STAMP_PATTERN must be:
63
60
  (e) date part only: "1030"
64
61
  HELP
65
62
  end
63
+
64
+ private
65
+
66
+ # Each entry of search result is:
67
+ #
68
+ # [<timestamp>, <line_number>, <matched_text>]
69
+ #
70
+ # The sort must be done in;
71
+ #
72
+ # - descending order for <timestamp>,
73
+ # - ascending ordier for <line_number>.
74
+ #
75
+
76
+ SearchEntry = Struct.new(:timestamp, :line_number, :matched_text) {
77
+ def timestamp_size
78
+ timestamp.to_s.size
79
+ end
80
+ }
81
+
82
+ def print_search_result(entries)
83
+ maxcol_stamp = entries.map(&:timestamp_size).max
84
+ maxcol_num = entries.map(&:line_number).max
85
+
86
+ sort(entries).each { |e|
87
+ stamp_display = "%- *s" % [maxcol_stamp, e.timestamp]
88
+ num_display = "%*d" % [maxcol_num, e.line_number]
89
+
90
+ puts "#{stamp_display}: #{num_display}: #{e.matched_text}"
91
+ }
92
+ end
93
+
94
+ def sort(search_result)
95
+ search_result.sort { |a, b|
96
+ stamp_comparison = (b.timestamp <=> a.timestamp)
97
+ if stamp_comparison == 0
98
+ a.line_number <=> b.line_number
99
+ else
100
+ stamp_comparison
101
+ end
102
+ }
103
+ end
104
+
66
105
  end
67
106
  end
@@ -203,11 +203,12 @@ module Rbnotes
203
203
  def make_headline(timestamp, text)
204
204
  _, column = IO.console_size
205
205
  delimiter = ": "
206
- subject_width = column - TIMESTAMP_STR_MAX_WIDTH - delimiter.size - 1
206
+ timestamp_width = timestamp.to_s.size
207
+ subject_width = column - timestamp_width - delimiter.size - 1
207
208
 
208
209
  subject = remove_heading_markup(text[0])
209
210
 
210
- ts_part = "#{timestamp.to_s} "[0..(TIMESTAMP_STR_MAX_WIDTH - 1)]
211
+ ts_part = "#{timestamp.to_s} "[0..(timestamp_width - 1)]
211
212
  sj_part = truncate_str(subject, subject_width)
212
213
 
213
214
  ts_part + delimiter + sj_part
@@ -285,8 +286,6 @@ module Rbnotes
285
286
  dates
286
287
  end
287
288
 
288
- TIMESTAMP_STR_MAX_WIDTH = "yyyymoddhhmiss_sfx".size
289
-
290
289
  def truncate_str(str, size)
291
290
  count = 0
292
291
  result = ""
@@ -1,4 +1,4 @@
1
1
  module Rbnotes
2
- VERSION = "0.4.6"
3
- RELEASE = "2020-11-13"
2
+ VERSION = "0.4.7"
3
+ RELEASE = "2020-11-15"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbnotes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - mnbi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-13 00:00:00.000000000 Z
11
+ date: 2020-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: textrepo