doing 2.1.58 → 2.1.62

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.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/Gemfile.lock +2 -2
  4. data/README.md +1 -1
  5. data/bin/commands/done.rb +13 -4
  6. data/bin/commands/update.rb +37 -0
  7. data/bin/commands/view.rb +1 -1
  8. data/bin/doing +1 -1
  9. data/docs/doc/Array.html +1 -1
  10. data/docs/doc/BooleanTermParser/Clause.html +1 -1
  11. data/docs/doc/BooleanTermParser/Operator.html +1 -1
  12. data/docs/doc/BooleanTermParser/Query.html +1 -1
  13. data/docs/doc/BooleanTermParser/QueryParser.html +1 -1
  14. data/docs/doc/BooleanTermParser/QueryTransformer.html +1 -1
  15. data/docs/doc/BooleanTermParser.html +1 -1
  16. data/docs/doc/Doing/ArrayCleanup.html +1 -1
  17. data/docs/doc/Doing/ArrayNestedHash.html +1 -1
  18. data/docs/doc/Doing/ArrayTags.html +1 -1
  19. data/docs/doc/Doing/CSVExport.html +1 -1
  20. data/docs/doc/Doing/CalendarImport.html +1 -1
  21. data/docs/doc/Doing/Change.html +1 -1
  22. data/docs/doc/Doing/Changes.html +1 -1
  23. data/docs/doc/Doing/ChronifyArray.html +1 -1
  24. data/docs/doc/Doing/ChronifyNumeric.html +1 -1
  25. data/docs/doc/Doing/ChronifyString.html +1 -1
  26. data/docs/doc/Doing/Color.html +6 -1
  27. data/docs/doc/Doing/Completion/BashCompletions.html +1 -1
  28. data/docs/doc/Doing/Completion/FigCompletions.html +1 -1
  29. data/docs/doc/Doing/Completion/FishCompletions.html +1 -1
  30. data/docs/doc/Doing/Completion/StringUtils.html +65 -7
  31. data/docs/doc/Doing/Completion/ZshCompletions.html +1 -1
  32. data/docs/doc/Doing/Completion.html +1 -1
  33. data/docs/doc/Doing/Configuration.html +1 -1
  34. data/docs/doc/Doing/DayOneRenderer.html +1 -1
  35. data/docs/doc/Doing/DayoneExport.html +1 -1
  36. data/docs/doc/Doing/DoingExport.html +1 -1
  37. data/docs/doc/Doing/DoingImport.html +1 -1
  38. data/docs/doc/Doing/Entry.html +1 -1
  39. data/docs/doc/Doing/Errors/DoingNoTraceError.html +1 -1
  40. data/docs/doc/Doing/Errors/DoingRuntimeError.html +1 -1
  41. data/docs/doc/Doing/Errors/DoingStandardError.html +1 -1
  42. data/docs/doc/Doing/Errors/EmptyInput.html +1 -1
  43. data/docs/doc/Doing/Errors/HistoryLimitError.html +1 -1
  44. data/docs/doc/Doing/Errors/InvalidPlugin.html +1 -1
  45. data/docs/doc/Doing/Errors/MissingBackupFile.html +1 -1
  46. data/docs/doc/Doing/Errors/NoResults.html +1 -1
  47. data/docs/doc/Doing/Errors/PluginException.html +1 -1
  48. data/docs/doc/Doing/Errors/UserCancelled.html +1 -1
  49. data/docs/doc/Doing/Errors/WrongCommand.html +1 -1
  50. data/docs/doc/Doing/Errors.html +1 -1
  51. data/docs/doc/Doing/HTMLExport.html +1 -1
  52. data/docs/doc/Doing/Hooks.html +1 -1
  53. data/docs/doc/Doing/Item.html +2 -2
  54. data/docs/doc/Doing/ItemDates.html +1 -1
  55. data/docs/doc/Doing/ItemQuery.html +1 -1
  56. data/docs/doc/Doing/ItemState.html +1 -1
  57. data/docs/doc/Doing/ItemTags.html +1 -1
  58. data/docs/doc/Doing/Items.html +1 -1
  59. data/docs/doc/Doing/JSONExport.html +1 -1
  60. data/docs/doc/Doing/JSONImport.html +1 -1
  61. data/docs/doc/Doing/Logger.html +1 -1
  62. data/docs/doc/Doing/MarkdownExport.html +1 -1
  63. data/docs/doc/Doing/Note.html +1 -1
  64. data/docs/doc/Doing/Pager.html +1 -1
  65. data/docs/doc/Doing/Plugins.html +1 -1
  66. data/docs/doc/Doing/Prompt.html +2 -2
  67. data/docs/doc/Doing/PromptChoose.html +1 -1
  68. data/docs/doc/Doing/PromptFZF.html +1 -1
  69. data/docs/doc/Doing/PromptInput.html +1 -1
  70. data/docs/doc/Doing/PromptSTD.html +1 -1
  71. data/docs/doc/Doing/PromptYN.html +1 -1
  72. data/docs/doc/Doing/Section.html +1 -1
  73. data/docs/doc/Doing/StringHighlight.html +1 -1
  74. data/docs/doc/Doing/StringNormalize.html +1 -1
  75. data/docs/doc/Doing/StringQuery.html +61 -5
  76. data/docs/doc/Doing/StringTags.html +1 -1
  77. data/docs/doc/Doing/StringTransform.html +1 -1
  78. data/docs/doc/Doing/StringTruncate.html +1 -1
  79. data/docs/doc/Doing/StringURL.html +1 -1
  80. data/docs/doc/Doing/SymbolNormalize.html +1 -1
  81. data/docs/doc/Doing/TaskPaperExport.html +1 -1
  82. data/docs/doc/Doing/TemplateExport.html +2 -2
  83. data/docs/doc/Doing/TemplateString.html +3 -3
  84. data/docs/doc/Doing/TimingImport.html +1 -1
  85. data/docs/doc/Doing/Types.html +1 -1
  86. data/docs/doc/Doing/Util/Backup.html +1 -1
  87. data/docs/doc/Doing/Util.html +1 -1
  88. data/docs/doc/Doing/Version.html +1 -1
  89. data/docs/doc/Doing/WWID.html +2 -2
  90. data/docs/doc/Doing.html +2 -2
  91. data/docs/doc/FalseClass.html +1 -1
  92. data/docs/doc/GLI/Commands/Help.html +1 -1
  93. data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +1 -1
  94. data/docs/doc/GLI/Commands.html +1 -1
  95. data/docs/doc/GLI.html +1 -1
  96. data/docs/doc/Hash.html +1 -1
  97. data/docs/doc/Numeric.html +1 -1
  98. data/docs/doc/Object.html +1 -1
  99. data/docs/doc/PhraseParser/Operator.html +1 -1
  100. data/docs/doc/PhraseParser/PhraseClause.html +1 -1
  101. data/docs/doc/PhraseParser/Query.html +1 -1
  102. data/docs/doc/PhraseParser/QueryParser.html +1 -1
  103. data/docs/doc/PhraseParser/QueryTransformer.html +1 -1
  104. data/docs/doc/PhraseParser/TermClause.html +1 -1
  105. data/docs/doc/PhraseParser.html +1 -1
  106. data/docs/doc/Status.html +1 -1
  107. data/docs/doc/String.html +65 -2
  108. data/docs/doc/Symbol.html +1 -1
  109. data/docs/doc/Time.html +1 -1
  110. data/docs/doc/TrueClass.html +1 -1
  111. data/docs/doc/_index.html +1 -1
  112. data/docs/doc/file.README.html +2 -2
  113. data/docs/doc/index.html +2 -2
  114. data/docs/doc/method_list.html +554 -546
  115. data/docs/doc/top-level-namespace.html +1 -1
  116. data/doing.rdoc +11 -1
  117. data/lib/completion/_doing.zsh +4 -0
  118. data/lib/completion/doing.bash +11 -0
  119. data/lib/completion/doing.fish +2 -0
  120. data/lib/completion/doing.ts +14 -0
  121. data/lib/doing/colors.rb +57 -0
  122. data/lib/doing/completion/completion_string.rb +11 -0
  123. data/lib/doing/string/highlight.rb +6 -7
  124. data/lib/doing/string/query.rb +10 -0
  125. data/lib/doing/version.rb +1 -1
  126. data/lib/doing/wwid/modify.rb +0 -1
  127. data/lib/doing/wwid/timers.rb +1 -156
  128. data/lib/templates/doing.css +2 -2
  129. metadata +3 -2
@@ -216,7 +216,7 @@
216
216
  </div>
217
217
 
218
218
  <div id="footer">
219
- Generated on Wed Jun 1 10:40:46 2022 by
219
+ Generated on Fri Jul 1 10:30:16 2022 by
220
220
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
221
221
  0.9.27 (ruby-3.0.1).
222
222
  </div>
data/doing.rdoc CHANGED
@@ -5,7 +5,7 @@ record of what you've been doing, complete with tag-based time tracking. The
5
5
  command line tool allows you to add entries, annotate with tags and notes, and
6
6
  view your entries with myriad options, with a focus on a "natural" language syntax.
7
7
 
8
- v2.1.58
8
+ v2.1.62
9
9
 
10
10
  === Global Options
11
11
  === --config_file arg
@@ -3009,6 +3009,16 @@ Redo last undo. Note: you cannot undo a redo
3009
3009
 
3010
3010
 
3011
3011
 
3012
+ ==== Command: <tt>update </tt>
3013
+ Update doing to the latest version
3014
+
3015
+ Checks for the latest available version of doing and updates your local install if needed.
3016
+ ===== Options
3017
+ ===== -p|--pre|--beta
3018
+ Check for pre-release version
3019
+
3020
+
3021
+
3012
3022
  ==== Command: <tt>view VIEW_NAME</tt>
3013
3023
  Display a user-created view
3014
3024
 
@@ -52,6 +52,7 @@ function _doing() {
52
52
  'test:Test Stuff'
53
53
  'today:List entries from today'
54
54
  'undo:Undo the last X changes to the Doing file'
55
+ 'update:Update doing to the latest version'
55
56
  'view:Display a user-created view'
56
57
  'views:List available custom views'
57
58
  'wiki:Output a tag wiki'
@@ -200,6 +201,9 @@ function _doing() {
200
201
  undo)
201
202
  args=( {'(--file)-f','(-f)--file'}"[Specify alternate doing file]:PATH:" {'(--interactive)-i','(-i)--interactive'}"[Select from recent backups]" {'(--prune)-p','(-p)--prune'}"[Remove old backups]:COUNT:" {'(--redo)-r','(-r)--redo'}"[Redo last undo]" )
202
203
  ;;
204
+ update)
205
+ args=( "--beta[Check for pre-release version]" )
206
+ ;;
203
207
  view)
204
208
  args=( "--after[Show entries newer than date]:DATE_STRING:" "--age[Age]:AGE:" "--before[Show entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" {'(--count)-c','(-c)--count'}"[Count to display]:COUNT:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--color[Include colors in output]" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Select from a menu of matching entries to perform additional operations]" "--not[Show items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--search[Filter entries using a search query]:QUERY:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--totals[Show intervals with totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
205
209
  ;;
@@ -368,6 +368,16 @@ _doing_undo() {
368
368
  fi
369
369
  }
370
370
 
371
+ _doing_update() {
372
+
373
+ if [[ "$token" == --* ]]; then
374
+ COMPREPLY=( $( compgen -W '--beta' -- $token ) )
375
+ elif [[ "$token" == -* ]]; then
376
+ COMPREPLY=( $( compgen -W ' --beta' -- $token ) )
377
+
378
+ fi
379
+ }
380
+
371
381
  _doing_view() {
372
382
  OLD_IFS="$IFS"
373
383
  local token=${COMP_WORDS[$COMP_CWORD]}
@@ -466,6 +476,7 @@ _doing()
466
476
  elif [[ $last =~ (template) ]]; then _doing_template
467
477
  elif [[ $last =~ (today) ]]; then _doing_today
468
478
  elif [[ $last =~ (undo) ]]; then _doing_undo
479
+ elif [[ $last =~ (update) ]]; then _doing_update
469
480
  elif [[ $last =~ (view) ]]; then _doing_view
470
481
  elif [[ $last =~ (views) ]]; then _doing_views
471
482
  elif [[ $last =~ (wiki) ]]; then _doing_wiki
@@ -172,6 +172,7 @@ complete -xc doing -n '__fish_doing_needs_command' -a 'template' -d Output\ HTML
172
172
  complete -xc doing -n '__fish_doing_needs_command' -a 'test' -d Test\ Stuff
173
173
  complete -xc doing -n '__fish_doing_needs_command' -a 'today' -d List\ entries\ from\ today
174
174
  complete -xc doing -n '__fish_doing_needs_command' -a 'undo' -d Undo\ the\ last\ X\ changes\ to\ the\ Doing\ file
175
+ complete -xc doing -n '__fish_doing_needs_command' -a 'update' -d Update\ doing\ to\ the\ latest\ version
175
176
  complete -xc doing -n '__fish_doing_needs_command' -a 'view' -d Display\ a\ user-created\ view
176
177
  complete -xc doing -n '__fish_doing_needs_command' -a 'views' -d List\ available\ custom\ views
177
178
  complete -xc doing -n '__fish_doing_needs_command' -a 'wiki' -d Output\ a\ tag\ wiki
@@ -559,6 +560,7 @@ complete -c doing -l file -s f -f -r -n '__fish_doing_using_command undo' -d Spe
559
560
  complete -c doing -l interactive -s i -f -n '__fish_doing_using_command undo' -d Select\ from\ recent\ backups
560
561
  complete -c doing -l prune -s p -f -r -n '__fish_doing_using_command undo' -d Remove\ old\ backups
561
562
  complete -c doing -l redo -s r -f -n '__fish_doing_using_command undo' -d Redo\ last\ undo
563
+ complete -c doing -l beta -f -n '__fish_doing_using_command update' -d Check\ for\ pre-release\ version
562
564
  complete -c doing -l after -f -r -n '__fish_doing_using_command view' -d Show\ entries\ newer\ than\ date
563
565
  complete -c doing -l age -f -r -n '__fish_doing_using_command view' -d Age
564
566
  complete -c doing -l before -f -r -n '__fish_doing_using_command view' -d Show\ entries\ older\ than\ date
@@ -4463,6 +4463,20 @@ const completionSpec: Fig.Spec = {
4463
4463
 
4464
4464
  },
4465
4465
 
4466
+ {
4467
+ name: "update",
4468
+ description: "Update doing to the latest version",
4469
+ options: [
4470
+ {
4471
+ name: ["--beta"],
4472
+ description: "Check for pre-release version",
4473
+
4474
+ },
4475
+
4476
+ ],
4477
+
4478
+ },
4479
+
4466
4480
  {
4467
4481
  name: "view",
4468
4482
  description: "Display a user-created view",
data/lib/doing/colors.rb CHANGED
@@ -4,6 +4,7 @@
4
4
  module Doing
5
5
  # Terminal output color functions.
6
6
  module Color
7
+ ESCAPE_REGEX = /(?<=\[)(?:(?:(?:[349]|10)[0-9]|[0-9])?;?)+(?=m)/.freeze
7
8
  # All available color names. Available as methods and string extensions.
8
9
  #
9
10
  # @example Use a color as a method. Color reset will be added to end of string.
@@ -125,6 +126,62 @@ module Doing
125
126
  def normalize_color
126
127
  gsub(/_/, '').sub(/bright/i, 'bold').sub(/bgbold/, 'boldbg')
127
128
  end
129
+
130
+ # Get the calculated ANSI color at the end of the
131
+ # string
132
+ #
133
+ # @return ANSI escape sequence to match color
134
+ #
135
+ def last_color_code
136
+ m = scan(ESCAPE_REGEX)
137
+
138
+ em = ['0']
139
+ fg = nil
140
+ bg = nil
141
+ rgbf = nil
142
+ rgbb = nil
143
+
144
+ m.each do |c|
145
+ case c
146
+ when '0'
147
+ em = ['0']
148
+ fg, bg, rgbf, rgbb = nil
149
+ when /^[34]8/
150
+ case c
151
+ when /^3/
152
+ fg = nil
153
+ rgbf = c
154
+ when /^4/
155
+ bg = nil
156
+ rgbb = c
157
+ end
158
+ else
159
+ c.split(/;/).each do |i|
160
+ x = i.to_i
161
+ if x <= 9
162
+ em << x
163
+ elsif x >= 30 && x <= 39
164
+ rgbf = nil
165
+ fg = x
166
+ elsif x >= 40 && x <= 49
167
+ rgbb = nil
168
+ bg = x
169
+ elsif x >= 90 && x <= 97
170
+ rgbf = nil
171
+ fg = x
172
+ elsif x >= 100 && x <= 107
173
+ rgbb = nil
174
+ bg = x
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ escape = "\e[#{em.join(';')}m"
181
+ escape += "\e[#{rgbb}m" if rgbb
182
+ escape += "\e[#{rgbf}m" if rgbf
183
+ escape + "\e[#{[fg, bg].delete_if(&:nil?).join(';')}m"
184
+ end
128
185
  end
129
186
 
130
187
  class << self
@@ -1,10 +1,21 @@
1
1
  module Doing
2
2
  module Completion
3
3
  module StringUtils
4
+
5
+ ##
6
+ ## Get short description for command completion
7
+ ##
8
+ ## @return [String] Short description
9
+ ##
4
10
  def short_desc
5
11
  split(/[,.]/)[0].sub(/ \(.*?\)?$/, '').strip
6
12
  end
7
13
 
14
+ ##
15
+ ## Truncate string from left
16
+ ##
17
+ ## @param max The maximum number of characters
18
+ ##
8
19
  def ltrunc(max)
9
20
  if length > max
10
21
  sub(/^.*?(.{#{max - 3}})$/, '...\1')
@@ -17,14 +17,9 @@ module Doing
17
17
  ##
18
18
  def highlight_tags(color = 'yellow', last_color: nil)
19
19
  unless last_color
20
- escapes = scan(/(\e\[[\d;]+m)[^\e]+@/)
21
20
  color = color.split(' ') unless color.is_a?(Array)
22
21
  tag_color = color.each_with_object([]) { |c, arr| arr << Doing::Color.send(c) }.join('')
23
- last_color = if escapes.good?
24
- (escapes.count > 1 ? escapes[-2..-1] : [escapes[-1]]).map { |v| v[0] }.join('')
25
- else
26
- Doing::Color.default
27
- end
22
+ last_color = last_color_code
28
23
  end
29
24
  gsub(/(\s|m)(@[^ ("']+)/, "\\1#{tag_color}\\2#{last_color}")
30
25
  end
@@ -54,7 +49,11 @@ module Doing
54
49
  qs.concat(query[:should]) if query[:should]
55
50
  qs.each do |s|
56
51
  rx = Regexp.new(s.wildcard_to_rx, ignore_case(s, case_type))
57
- out.gsub!(rx) { |m| m.bgyellow.black }
52
+ out.gsub!(rx) do
53
+ m = Regexp.last_match
54
+ last = m.pre_match.last_color_code
55
+ "#{m[0].bgyellow.black}#{last}"
56
+ end
58
57
  end
59
58
  end
60
59
  out
@@ -85,6 +85,11 @@ module Doing
85
85
  Regexp.new(pattern, !case_sensitive)
86
86
  end
87
87
 
88
+ ##
89
+ ## Returns a phrase query (elastic search) representation of the object as a phrase parser.
90
+ ##
91
+ ## @return Phrase query representation of the object.
92
+ ##
88
93
  def to_phrase_query
89
94
  parser = PhraseParser::QueryParser.new
90
95
  transformer = PhraseParser::QueryTransformer.new
@@ -92,6 +97,11 @@ module Doing
92
97
  transformer.apply(parse_tree).to_elasticsearch
93
98
  end
94
99
 
100
+ ##
101
+ ## Returns a query (elastic search) representation of the object as a boolean term parser.
102
+ ##
103
+ ## @return Query representation of the object.
104
+ ##
95
105
  def to_query
96
106
  parser = BooleanTermParser::QueryParser.new
97
107
  transformer = BooleanTermParser::QueryTransformer.new
data/lib/doing/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Doing
2
- VERSION = '2.1.58'
2
+ VERSION = '2.1.62'
3
3
  end
@@ -159,7 +159,6 @@ module Doing
159
159
  write(@doing_file)
160
160
  end
161
161
 
162
-
163
162
  ##
164
163
  ## Tag the last entry or X entries
165
164
  ##
@@ -14,162 +14,7 @@ module Doing
14
14
  def tag_times(format: :text, sort_by: :time, sort_order: :asc)
15
15
  return '' if @timers.empty?
16
16
 
17
- max = @timers.keys.sort_by(&:length).reverse[0].length + 1
18
-
19
- total = @timers.delete('All')
20
-
21
- tags_data = @timers.delete_if { |_k, v| v.zero? }
22
- sorted_tags_data = if sort_by.normalize_tag_sort == :name
23
- tags_data.sort_by { |k, _v| k }
24
- else
25
- tags_data.sort_by { |_k, v| v }
26
- end
27
-
28
- sorted_tags_data.reverse! if sort_order.normalize_order == :asc
29
- case format
30
- when :html
31
-
32
- output = <<EOHEAD
33
- <table>
34
- <caption id="tagtotals">Tag Totals</caption>
35
- <colgroup>
36
- <col style="text-align:left;"/>
37
- <col style="text-align:left;"/>
38
- </colgroup>
39
- <thead>
40
- <tr>
41
- <th style="text-align:left;">project</th>
42
- <th style="text-align:left;">time</th>
43
- </tr>
44
- </thead>
45
- <tbody>
46
- EOHEAD
47
- sorted_tags_data.reverse.each do |k, v|
48
- if v.positive?
49
- output += "<tr><td style='text-align:left;'>#{k}</td><td style='text-align:left;'>#{v.time_string(format: :clock)}</td></tr>\n"
50
- end
51
- end
52
- tail = <<EOTAIL
53
- <tr>
54
- <td style="text-align:left;" colspan="2"></td>
55
- </tr>
56
- </tbody>
57
- <tfoot>
58
- <tr>
59
- <td style="text-align:left;"><strong>Total</strong></td>
60
- <td style="text-align:left;">#{total.time_string(format: :clock)}</td>
61
- </tr>
62
- </tfoot>
63
- </table>
64
- EOTAIL
65
- output + tail
66
- when :markdown
67
- pad = sorted_tags_data.map { |k, _| k }.group_by(&:size).max.last[0].length
68
- pad = 7 if pad < 7
69
- output = <<~EOHEADER
70
- | #{' ' * (pad - 7)}project | time |
71
- | #{'-' * (pad - 1)}: | :------- |
72
- EOHEADER
73
- sorted_tags_data.reverse.each do |k, v|
74
- if v.positive?
75
- output += "| #{' ' * (pad - k.length)}#{k} | #{v.time_string(format: :clock)} |\n"
76
- end
77
- end
78
- tail = '[Tag Totals]'
79
- output + tail
80
- when :json
81
- output = []
82
- sorted_tags_data.reverse.each do |k, v|
83
- output << {
84
- 'tag' => k,
85
- 'seconds' => v,
86
- 'formatted' => v.time_string(format: :clock)
87
- }
88
- end
89
- output
90
- when :human
91
- output = []
92
- sorted_tags_data.reverse.each do |k, v|
93
- spacer = ''
94
- (max - k.length).times do
95
- spacer += ' '
96
- end
97
- output.push("┃ #{spacer}#{k}:#{v.time_string(format: :hm)} ┃")
98
- end
99
-
100
- header = '┏━━ Tag Totals '
101
- (max - 2).times { header += '━' }
102
- header += '┓'
103
- footer = '┗'
104
- (max + 12).times { footer += '━' }
105
- footer += '┛'
106
- divider = '┣'
107
- (max + 12).times { divider += '━' }
108
- divider += '┫'
109
- output = output.empty? ? '' : "\n#{header}\n#{output.join("\n")}"
110
- output += "\n#{divider}"
111
- spacer = ''
112
- (max - 6).times do
113
- spacer += ' '
114
- end
115
- total_time = total.time_string(format: :hm)
116
- total = "┃ #{spacer}total: "
117
- total += total_time
118
- total += ' ┃'
119
- output += "\n#{total}"
120
- output += "\n#{footer}"
121
- output
122
- else
123
- output = []
124
- sorted_tags_data.reverse.each do |k, v|
125
- spacer = ''
126
- (max - k.length).times do
127
- spacer += ' '
128
- end
129
- output.push("#{k}:#{spacer}#{v.time_string(format: :clock)}")
130
- end
131
-
132
- output = output.empty? ? '' : "\n--- Tag Totals ---\n#{output.join("\n")}"
133
- output += "\n\nTotal tracked: #{total.time_string(format: :clock)}\n"
134
- output
135
- end
136
- end
137
-
138
- ##
139
- ## Gets the interval between entry's start
140
- ## date and @done date
141
- ##
142
- ## @param item [Item] The entry
143
- ## @param formatted [Boolean] Return human readable
144
- ## time (default seconds)
145
- ## @param record [Boolean] Add the interval to the
146
- ## total for each tag
147
- ##
148
- ## @return Interval in seconds, or [d, h, m] array if
149
- ## formatted is true. False if no end date or
150
- ## interval is 0
151
- ##
152
- def get_interval(item, formatted: true, record: true)
153
- if item.interval
154
- seconds = item.interval
155
- record_tag_times(item, seconds) if record
156
- return seconds.positive? ? seconds : false unless formatted
157
-
158
- return seconds.positive? ? seconds.time_string(format: :clock) : false
159
- end
160
-
161
- false
162
- end##
163
- ## Get total elapsed time for all tags in
164
- ## selection
165
- ##
166
- ## @param format [String] return format (html,
167
- ## json, or text)
168
- ## @param sort_by [Symbol] Sort by :name or :time
169
- ## @param sort_order [Symbol] The sort order (:asc or :desc)
170
- ##
171
- def tag_times(format: :text, sort_by: :time, sort_order: :asc)
172
- return '' if @timers.empty?
17
+ @timers.delete('meanwhile')
173
18
 
174
19
  max = @timers.keys.sort_by(&:length).reverse[0].length + 1
175
20
 
@@ -50,7 +50,7 @@ article > ul > li:hover {
50
50
  .date {
51
51
  color: #7d9ca2;
52
52
  font-size: 17px;
53
- padding: 15px 1ch 0 0;
53
+ padding: 3px 1ch 0 0;
54
54
  text-align: right;
55
55
  white-space: nowrap;
56
56
  transition: color .2s ease-in-out;
@@ -59,7 +59,7 @@ article > ul > li:hover {
59
59
  .entry {
60
60
  border-left: solid 1px #ccc;
61
61
  line-height: 1.2;
62
- padding: 10px 10px 10px 3ch;
62
+ padding: 2px 10px 2px 3ch;
63
63
  text-indent: -2ch;
64
64
  }
65
65
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doing
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.58
4
+ version: 2.1.62
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-01 00:00:00.000000000 Z
11
+ date: 2022-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github-markup
@@ -470,6 +470,7 @@ files:
470
470
  - bin/commands/template.rb
471
471
  - bin/commands/today.rb
472
472
  - bin/commands/undo.rb
473
+ - bin/commands/update.rb
473
474
  - bin/commands/view.rb
474
475
  - bin/commands/views.rb
475
476
  - bin/commands/yesterday.rb