doing 2.1.23 → 2.1.27
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardoc/checksums +17 -21
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/CHANGELOG.md +329 -102
- data/Dockerfile +5 -5
- data/Dockerfile-2.6 +5 -5
- data/Dockerfile-2.7 +5 -4
- data/Dockerfile-3.0 +5 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/Rakefile +3 -3
- data/bin/commands/add_section.rb +15 -0
- data/bin/commands/again.rb +57 -0
- data/bin/commands/archive.rb +55 -0
- data/bin/commands/cancel.rb +60 -0
- data/bin/commands/changes.rb +69 -0
- data/bin/commands/choose.rb +9 -0
- data/bin/commands/colors.rb +21 -0
- data/bin/commands/commands.rb +89 -0
- data/bin/commands/commands_accepting.rb +76 -0
- data/bin/commands/completion.rb +27 -0
- data/bin/commands/config.rb +245 -0
- data/bin/commands/done.rb +235 -0
- data/bin/commands/finish.rb +126 -0
- data/bin/commands/flag.rb +90 -0
- data/bin/commands/grep.rb +108 -0
- data/bin/commands/import.rb +71 -0
- data/bin/commands/install_fzf.rb +17 -0
- data/bin/commands/last.rb +81 -0
- data/bin/commands/meanwhile.rb +76 -0
- data/bin/commands/note.rb +91 -0
- data/bin/commands/now.rb +145 -0
- data/bin/commands/on.rb +65 -0
- data/bin/commands/open.rb +53 -0
- data/bin/commands/plugins.rb +23 -0
- data/bin/commands/recent.rb +77 -0
- data/bin/commands/redo.rb +26 -0
- data/bin/commands/reset.rb +73 -0
- data/bin/commands/rotate.rb +42 -0
- data/bin/commands/sections.rb +11 -0
- data/bin/commands/select.rb +105 -0
- data/bin/commands/show.rb +185 -0
- data/bin/commands/since.rb +63 -0
- data/bin/commands/tag.rb +149 -0
- data/bin/commands/tag_dir.rb +29 -0
- data/bin/commands/tags.rb +66 -0
- data/bin/commands/template.rb +61 -0
- data/bin/commands/today.rb +64 -0
- data/bin/commands/undo.rb +49 -0
- data/bin/commands/view.rb +201 -0
- data/bin/commands/views.rb +11 -0
- data/bin/commands/yesterday.rb +72 -0
- data/bin/doing +241 -3662
- data/docs/doc/Array.html +13 -449
- data/docs/doc/BooleanTermParser/Clause.html +5 -5
- data/docs/doc/BooleanTermParser/Operator.html +4 -4
- data/docs/doc/BooleanTermParser/Query.html +8 -8
- data/docs/doc/BooleanTermParser/QueryParser.html +2 -2
- data/docs/doc/BooleanTermParser/QueryTransformer.html +2 -2
- data/docs/doc/BooleanTermParser.html +1 -1
- data/docs/doc/Doing/Color.html +65 -59
- data/docs/doc/Doing/Completion.html +2 -2
- data/docs/doc/Doing/Configuration.html +49 -16
- data/docs/doc/Doing/Errors/DoingNoTraceError.html +2 -2
- data/docs/doc/Doing/Errors/DoingRuntimeError.html +2 -2
- data/docs/doc/Doing/Errors/DoingStandardError.html +2 -2
- data/docs/doc/Doing/Errors/EmptyInput.html +2 -2
- data/docs/doc/Doing/Errors/NoResults.html +2 -2
- data/docs/doc/Doing/Errors/PluginException.html +3 -3
- data/docs/doc/Doing/Errors/UserCancelled.html +2 -2
- data/docs/doc/Doing/Errors/WrongCommand.html +2 -2
- data/docs/doc/Doing/Errors.html +1 -1
- data/docs/doc/Doing/Hooks.html +6 -6
- data/docs/doc/Doing/Item.html +50 -16
- data/docs/doc/Doing/Items.html +10 -10
- data/docs/doc/Doing/LogAdapter.html +24 -24
- data/docs/doc/Doing/Note.html +7 -7
- data/docs/doc/Doing/Pager.html +4 -4
- data/docs/doc/Doing/Plugins.html +7 -7
- data/docs/doc/Doing/Prompt.html +59 -14
- data/docs/doc/Doing/Section.html +6 -6
- data/docs/doc/Doing/TemplateString.html +8 -8
- data/docs/doc/Doing/Types.html +46 -1
- data/docs/doc/Doing/Util/Backup.html +10 -10
- data/docs/doc/Doing/Util.html +15 -15
- data/docs/doc/Doing/WWID.html +73 -61
- data/docs/doc/Doing.html +3 -3
- data/docs/doc/FalseClass.html +235 -0
- data/docs/doc/GLI/Commands/Help.html +3 -3
- data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +17 -17
- data/docs/doc/GLI/Commands.html +1 -1
- data/docs/doc/GLI.html +1 -1
- data/docs/doc/Hash.html +45 -11
- data/docs/doc/Numeric.html +5 -5
- data/docs/doc/Object.html +203 -0
- data/docs/doc/PhraseParser/Operator.html +4 -4
- data/docs/doc/PhraseParser/PhraseClause.html +5 -5
- data/docs/doc/PhraseParser/Query.html +10 -10
- data/docs/doc/PhraseParser/QueryParser.html +2 -2
- data/docs/doc/PhraseParser/QueryTransformer.html +2 -2
- data/docs/doc/PhraseParser/TermClause.html +5 -5
- data/docs/doc/PhraseParser.html +1 -1
- data/docs/doc/Status.html +7 -7
- data/docs/doc/String.html +306 -3111
- data/docs/doc/Symbol.html +45 -11
- data/docs/doc/Time.html +6 -6
- data/docs/doc/TrueClass.html +235 -0
- data/docs/doc/_index.html +37 -19
- data/docs/doc/class_list.html +1 -1
- data/docs/doc/file.README.html +2 -2
- data/docs/doc/index.html +2 -2
- data/docs/doc/method_list.html +240 -576
- data/docs/doc/top-level-namespace.html +2 -2
- data/doing.rdoc +289 -169
- data/example_plugin.rb +2 -2
- data/lib/completion/_doing.zsh +35 -31
- data/lib/completion/doing.bash +30 -19
- data/lib/completion/doing.fish +81 -67
- data/lib/doing/array/array.rb +4 -0
- data/lib/doing/array/nested_hash.rb +17 -0
- data/lib/doing/{array.rb → array/tags.rb} +7 -25
- data/lib/doing/changelog/change.rb +26 -11
- data/lib/doing/changelog/changes.rb +14 -4
- data/lib/doing/{array_chronify.rb → chronify/array.rb} +0 -0
- data/lib/doing/chronify/chronify.rb +5 -0
- data/lib/doing/{numeric_chronify.rb → chronify/numeric.rb} +0 -0
- data/lib/doing/{string_chronify.rb → chronify/string.rb} +0 -0
- data/lib/doing/colors.rb +115 -54
- data/lib/doing/completion/fish_completion.rb +2 -1
- data/lib/doing/configuration.rb +9 -6
- data/lib/doing/good.rb +72 -0
- data/lib/doing/hash.rb +4 -0
- data/lib/doing/help_monkey_patch.rb +6 -5
- data/lib/doing/hooks.rb +3 -3
- data/lib/doing/item.rb +19 -15
- data/lib/doing/items.rb +2 -2
- data/lib/doing/log_adapter.rb +35 -2
- data/lib/doing/normalize.rb +188 -0
- data/lib/doing/pager.rb +1 -0
- data/lib/doing/plugins/export/dayone_export.rb +1 -1
- data/lib/doing/plugins/export/html_export.rb +1 -1
- data/lib/doing/plugins/export/json_export.rb +1 -1
- data/lib/doing/plugins/export/markdown_export.rb +1 -1
- data/lib/doing/plugins/export/template_export.rb +3 -1
- data/lib/doing/plugins/import/calendar_import.rb +1 -1
- data/lib/doing/plugins/import/doing_import.rb +1 -1
- data/lib/doing/plugins/import/timing_import.rb +1 -1
- data/lib/doing/prompt.rb +9 -3
- data/lib/doing/string/highlight.rb +95 -0
- data/lib/doing/string/query.rb +129 -0
- data/lib/doing/string/string.rb +12 -0
- data/lib/doing/string/tags.rb +164 -0
- data/lib/doing/string/transform.rb +168 -0
- data/lib/doing/string/truncate.rb +75 -0
- data/lib/doing/string/url.rb +82 -0
- data/lib/doing/template_string.rb +2 -24
- data/lib/doing/types.rb +9 -0
- data/lib/doing/util.rb +20 -16
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +91 -51
- data/lib/doing.rb +5 -6
- data/lib/examples/commands/wiki.rb +6 -7
- data/lib/examples/plugins/wiki_export/wiki_export.rb +1 -1
- data/lib/helpers/threaded_tests.rb +69 -79
- data/lib/helpers/threaded_tests_string.rb +50 -0
- data/scripts/deploy.rb +107 -0
- data/scripts/runtests.sh +4 -0
- metadata +65 -8
- data/lib/doing/string.rb +0 -765
- data/lib/doing/symbol.rb +0 -28
File without changes
|
File without changes
|
data/lib/doing/colors.rb
CHANGED
@@ -6,61 +6,67 @@ module Doing
|
|
6
6
|
module Color
|
7
7
|
# :stopdoc:
|
8
8
|
ATTRIBUTES = [
|
9
|
-
[:clear,
|
10
|
-
[:reset,
|
11
|
-
[:bold,
|
12
|
-
[:dark,
|
13
|
-
[:italic,
|
14
|
-
[:underline,
|
15
|
-
[:underscore,
|
16
|
-
[:blink,
|
17
|
-
[:rapid_blink,
|
18
|
-
[:negative,
|
19
|
-
[:concealed,
|
20
|
-
[:strikethrough,
|
21
|
-
[:
|
22
|
-
[:
|
23
|
-
[:
|
24
|
-
[:
|
25
|
-
[:
|
26
|
-
[:
|
27
|
-
[:
|
28
|
-
[:
|
29
|
-
[:
|
30
|
-
[:
|
31
|
-
[:
|
32
|
-
[:
|
33
|
-
[:
|
34
|
-
[:
|
35
|
-
[:
|
36
|
-
[:
|
37
|
-
[:
|
38
|
-
[:
|
39
|
-
[:
|
40
|
-
[:
|
41
|
-
[:
|
42
|
-
[:
|
43
|
-
[:
|
44
|
-
[:
|
45
|
-
[:
|
46
|
-
[:
|
47
|
-
[:
|
48
|
-
[:
|
49
|
-
[:
|
50
|
-
[:
|
51
|
-
[:
|
52
|
-
[:
|
53
|
-
[:
|
54
|
-
[:
|
55
|
-
[:
|
56
|
-
[:
|
57
|
-
[:
|
58
|
-
[:
|
9
|
+
[:clear, 0], # String#clear is already used to empty string in Ruby 1.9
|
10
|
+
[:reset, 0], # synonym for :clear
|
11
|
+
[:bold, 1],
|
12
|
+
[:dark, 2],
|
13
|
+
[:italic, 3], # not widely implemented
|
14
|
+
[:underline, 4],
|
15
|
+
[:underscore, 4], # synonym for :underline
|
16
|
+
[:blink, 5],
|
17
|
+
[:rapid_blink, 6], # not widely implemented
|
18
|
+
[:negative, 7], # no reverse because of String#reverse
|
19
|
+
[:concealed, 8],
|
20
|
+
[:strikethrough, 9], # not widely implemented
|
21
|
+
[:strike, 9], # not widely implemented
|
22
|
+
[:black, 30],
|
23
|
+
[:red, 31],
|
24
|
+
[:green, 32],
|
25
|
+
[:yellow, 33],
|
26
|
+
[:blue, 34],
|
27
|
+
[:magenta, 35],
|
28
|
+
[:purple, 35],
|
29
|
+
[:cyan, 36],
|
30
|
+
[:white, 37],
|
31
|
+
[:bgblack, 40],
|
32
|
+
[:bgred, 41],
|
33
|
+
[:bggreen, 42],
|
34
|
+
[:bgyellow, 43],
|
35
|
+
[:bgblue, 44],
|
36
|
+
[:bgmagenta, 45],
|
37
|
+
[:bgpurple, 45],
|
38
|
+
[:bgcyan, 46],
|
39
|
+
[:bgwhite, 47],
|
40
|
+
[:boldblack, 90],
|
41
|
+
[:boldred, 91],
|
42
|
+
[:boldgreen, 92],
|
43
|
+
[:boldyellow, 93],
|
44
|
+
[:boldblue, 94],
|
45
|
+
[:boldmagenta, 95],
|
46
|
+
[:boldpurple, 95],
|
47
|
+
[:boldcyan, 96],
|
48
|
+
[:boldwhite, 97],
|
49
|
+
[:boldbgblack, 100],
|
50
|
+
[:boldbgred, 101],
|
51
|
+
[:boldbggreen, 102],
|
52
|
+
[:boldbgyellow, 103],
|
53
|
+
[:boldbgblue, 104],
|
54
|
+
[:boldbgmagenta, 105],
|
55
|
+
[:boldbgpurple, 105],
|
56
|
+
[:boldbgcyan, 106],
|
57
|
+
[:boldbgwhite, 107],
|
58
|
+
[:softpurple, '0;35;40'],
|
59
|
+
[:hotpants, '7;34;40'],
|
59
60
|
[:knightrider, '7;30;40'],
|
60
|
-
[:flamingo,
|
61
|
-
[:yeller,
|
62
|
-
[:whiteboard,
|
63
|
-
[:
|
61
|
+
[:flamingo, '7;31;47'],
|
62
|
+
[:yeller, '1;37;43'],
|
63
|
+
[:whiteboard, '1;30;47'],
|
64
|
+
[:chalkboard, '1;37;40'],
|
65
|
+
[:led, '0;32;40'],
|
66
|
+
[:redacted, '0;30;40'],
|
67
|
+
[:alert, '1;31;43'],
|
68
|
+
[:error, '1;37;41'],
|
69
|
+
[:default, '0;39']
|
64
70
|
].map(&:freeze).freeze
|
65
71
|
|
66
72
|
ATTRIBUTE_NAMES = ATTRIBUTES.transpose.first
|
@@ -78,6 +84,40 @@ module Doing
|
|
78
84
|
end
|
79
85
|
end
|
80
86
|
|
87
|
+
# Template coloring
|
88
|
+
class ::String
|
89
|
+
##
|
90
|
+
## Extract the longest valid %color name from a string.
|
91
|
+
##
|
92
|
+
## Allows %colors to bleed into other text and still
|
93
|
+
## be recognized, e.g. %greensomething still finds
|
94
|
+
## %green.
|
95
|
+
##
|
96
|
+
## @return [String] a valid color name
|
97
|
+
##
|
98
|
+
def validate_color
|
99
|
+
valid_color = nil
|
100
|
+
compiled = ''
|
101
|
+
normalize_color.split('').each do |char|
|
102
|
+
compiled += char
|
103
|
+
valid_color = compiled if Color.attributes.include?(compiled.to_sym)
|
104
|
+
end
|
105
|
+
|
106
|
+
valid_color
|
107
|
+
end
|
108
|
+
|
109
|
+
##
|
110
|
+
## Normalize a color name, removing underscores,
|
111
|
+
## replacing "bright" with "bold", and converting
|
112
|
+
## bgbold to boldbg
|
113
|
+
##
|
114
|
+
## @return [String] Normalized color name
|
115
|
+
##
|
116
|
+
def normalize_color
|
117
|
+
gsub(/_/, '').sub(/bright/i, 'bold').sub(/bgbold/, 'boldbg')
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
81
121
|
class << self
|
82
122
|
# Returns true, if the coloring function of this module
|
83
123
|
# is switched on, false otherwise.
|
@@ -113,6 +153,27 @@ module Doing
|
|
113
153
|
result
|
114
154
|
end
|
115
155
|
EOT
|
156
|
+
|
157
|
+
# Accept brightwhite in addition to boldwhite
|
158
|
+
if c =~ /bold/
|
159
|
+
eval <<-EOT
|
160
|
+
def #{c.to_s.sub(/bold/, 'bright')}(string = nil)
|
161
|
+
result = ''
|
162
|
+
result << "\e[#{v}m" if Doing::Color.coloring?
|
163
|
+
if block_given?
|
164
|
+
result << yield
|
165
|
+
elsif string.respond_to?(:to_str)
|
166
|
+
result << string.to_str
|
167
|
+
elsif respond_to?(:to_str)
|
168
|
+
result << to_str
|
169
|
+
else
|
170
|
+
return result #only switch on
|
171
|
+
end
|
172
|
+
result << "\e[0m" if Doing::Color.coloring?
|
173
|
+
result
|
174
|
+
end
|
175
|
+
EOT
|
176
|
+
end
|
116
177
|
end
|
117
178
|
|
118
179
|
# Regular expression that is used to scan for ANSI-sequences while
|
@@ -123,8 +123,9 @@ module Doing
|
|
123
123
|
complete -f -c doing -n '__fish_doing_using_command view' -a '(__fish_doing_complete_views)'
|
124
124
|
complete -f -c doing -n '__fish_doing_using_command template' -a '(__fish_doing_complete_templates)'
|
125
125
|
complete -f -c doing -s t -l type -x -n '__fish_doing_using_command import' -a '(__fish_doing_import_plugins)'
|
126
|
+
complete -f -c doing -n '__fish_doing_using_command help' -a '(__fish_doing_subcommands)'
|
126
127
|
|
127
|
-
complete -xc doing -n '__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from (doing help -c)' -a "(doing help -c)"
|
128
|
+
# complete -xc doing -n '__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from (doing help -c)' -a "(doing help -c)"
|
128
129
|
|
129
130
|
function __fish_doing_complete_args
|
130
131
|
for cmd in (doing commands_accepting -c $argv[1])
|
data/lib/doing/configuration.rb
CHANGED
@@ -29,6 +29,7 @@ module Doing
|
|
29
29
|
'plugin_path' => File.join(Util.user_home, '.config', 'doing', 'plugins'),
|
30
30
|
'command_path' => File.join(Util.user_home, '.config', 'doing', 'commands')
|
31
31
|
},
|
32
|
+
'disabled_commands' => [],
|
32
33
|
'doing_file' => '~/.local/share/doing/what_was_i_doing.md',
|
33
34
|
'doing_file_sort' => 'desc',
|
34
35
|
'backup_dir' => '~/.local/share/doing/doing_backup',
|
@@ -45,8 +46,7 @@ module Doing
|
|
45
46
|
'templates' => {
|
46
47
|
'default' => {
|
47
48
|
'date_format' => '%Y-%m-%d %H:%M',
|
48
|
-
'template' => '%reset%cyan%shortdate %boldwhite%80║ title %
|
49
|
-
%yellow%interval%boldred%duration%dark%white%80_14┃ note',
|
49
|
+
'template' => '%reset%cyan%shortdate %boldwhite%80║ title %boldmagenta[%boldwhite%-10section%boldmagenta]%reset %yellow%interval%boldred%duration%white%80_14┃ note',
|
50
50
|
'wrap_width' => 0,
|
51
51
|
'order' => 'asc'
|
52
52
|
},
|
@@ -63,8 +63,7 @@ module Doing
|
|
63
63
|
},
|
64
64
|
'recent' => {
|
65
65
|
'date_format' => '%_I:%M%P',
|
66
|
-
'template' => '%reset%cyan%shortdate %boldwhite%80║ title %
|
67
|
-
%yellow%interval%boldred%duration%dark%white%80_14┃ note',
|
66
|
+
'template' => '%reset%cyan%shortdate %boldwhite%80║ title %boldmagenta[%boldwhite%-10section%boldmagenta]%reset %yellow%interval%boldred%duration%white%80_14┃ note',
|
68
67
|
'wrap_width' => 88,
|
69
68
|
'count' => 10,
|
70
69
|
'order' => 'asc'
|
@@ -180,6 +179,10 @@ module Doing
|
|
180
179
|
end
|
181
180
|
end
|
182
181
|
|
182
|
+
def fetch(*path, default)
|
183
|
+
@settings.dig(*path) || default
|
184
|
+
end
|
185
|
+
|
183
186
|
##
|
184
187
|
## Resolve a fuzzy-matched key path
|
185
188
|
##
|
@@ -314,7 +317,7 @@ module Doing
|
|
314
317
|
|
315
318
|
@ignore_local = opt[:ignore_local] if opt[:ignore_local]
|
316
319
|
|
317
|
-
config = read_config.
|
320
|
+
config = read_config.clone
|
318
321
|
|
319
322
|
plugin_config = Util.deep_merge_hashes(DEFAULTS['plugins'], config['plugins'] || {})
|
320
323
|
|
@@ -322,7 +325,7 @@ module Doing
|
|
322
325
|
|
323
326
|
Plugins.plugins.each do |_type, plugins|
|
324
327
|
plugins.each do |title, plugin|
|
325
|
-
plugin_config[title] = plugin[:config] if plugin[:config]
|
328
|
+
plugin_config[title] = plugin[:config] if plugin[:config].good?
|
326
329
|
config['export_templates'][title] ||= nil if plugin[:templates] && !plugin[:templates].empty?
|
327
330
|
end
|
328
331
|
end
|
data/lib/doing/good.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Doing
|
4
|
+
# Object helpers
|
5
|
+
class ::Object
|
6
|
+
##
|
7
|
+
## Tests if object is nil or empty
|
8
|
+
##
|
9
|
+
## @return [Boolean] true if object is defined and
|
10
|
+
## has content
|
11
|
+
##
|
12
|
+
def good?
|
13
|
+
!nil? && !empty?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class ::String
|
18
|
+
##
|
19
|
+
## Tests if object is nil or empty
|
20
|
+
##
|
21
|
+
## @return [Boolean] true if object is defined and
|
22
|
+
## has content
|
23
|
+
##
|
24
|
+
def good?
|
25
|
+
!strip.empty?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class ::Array
|
30
|
+
##
|
31
|
+
## Tests if object is nil or empty
|
32
|
+
##
|
33
|
+
## @return [Boolean] true if object is defined and
|
34
|
+
## has content
|
35
|
+
##
|
36
|
+
def good?
|
37
|
+
!nil? && !empty?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class ::FalseClass
|
42
|
+
##
|
43
|
+
## Tests if object is nil or empty
|
44
|
+
##
|
45
|
+
## @return [Boolean] true if object is defined and
|
46
|
+
## has content
|
47
|
+
##
|
48
|
+
def good?
|
49
|
+
false
|
50
|
+
end
|
51
|
+
|
52
|
+
def normalize_tag_sort
|
53
|
+
:time
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class ::TrueClass
|
58
|
+
##
|
59
|
+
## Tests if object is nil or empty
|
60
|
+
##
|
61
|
+
## @return [Boolean] true if object is defined and
|
62
|
+
## has content
|
63
|
+
##
|
64
|
+
def good?
|
65
|
+
true
|
66
|
+
end
|
67
|
+
|
68
|
+
def normalize_tag_sort
|
69
|
+
:name
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/doing/hash.rb
CHANGED
@@ -4,15 +4,15 @@ module GLI
|
|
4
4
|
module Commands
|
5
5
|
# Help Command Monkeypatch for paginated output
|
6
6
|
class Help < Command
|
7
|
-
def show_help(global_options,options,arguments,out,error)
|
7
|
+
def show_help(global_options, options, arguments, out, error)
|
8
8
|
Doing::Pager.paginate = true
|
9
9
|
|
10
|
-
command_finder = HelpModules::CommandFinder.new(@app,arguments,error)
|
10
|
+
command_finder = HelpModules::CommandFinder.new(@app, arguments, error)
|
11
11
|
if options[:c]
|
12
|
-
help_output = HelpModules::HelpCompletionFormat.new(@app,command_finder,arguments).format
|
12
|
+
help_output = HelpModules::HelpCompletionFormat.new(@app, command_finder, arguments).format
|
13
13
|
out.puts help_output unless help_output.nil?
|
14
14
|
elsif arguments.empty? || options[:c]
|
15
|
-
Doing::Pager.page HelpModules::GlobalHelpFormat.new(@app
|
15
|
+
Doing::Pager.page HelpModules::GlobalHelpFormat.new(@app, @sorter, @text_wrapping_class).format
|
16
16
|
else
|
17
17
|
name = arguments.shift
|
18
18
|
command = command_finder.find_command(name)
|
@@ -22,7 +22,8 @@ module GLI
|
|
22
22
|
@app,
|
23
23
|
@sorter,
|
24
24
|
@synopsis_formatter_class,
|
25
|
-
@text_wrapping_class
|
25
|
+
@text_wrapping_class
|
26
|
+
).format
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
data/lib/doing/hooks.rb
CHANGED
@@ -10,8 +10,8 @@ module Doing
|
|
10
10
|
post_local_config: [], # wwid
|
11
11
|
post_read: [], # wwid
|
12
12
|
pre_entry_add: [], # wwid, new_entry
|
13
|
-
post_entry_added: [], # wwid, new_entry
|
14
|
-
post_entry_updated: [], # wwid, entry
|
13
|
+
post_entry_added: [], # wwid, new_entry
|
14
|
+
post_entry_updated: [], # wwid, entry, old_entry
|
15
15
|
post_entry_removed: [], # wwid, entry.dup
|
16
16
|
pre_export: [], # wwid, format, entries
|
17
17
|
pre_write: [], # wwid, file
|
@@ -57,7 +57,7 @@ module Doing
|
|
57
57
|
|
58
58
|
def self.trigger(event, *args)
|
59
59
|
hooks = @registry[event]
|
60
|
-
return
|
60
|
+
return unless hooks.good?
|
61
61
|
|
62
62
|
# sort and call hooks according to priority and load order
|
63
63
|
hooks.sort_by { |h| @hook_priority[h] }.each do |hook|
|
data/lib/doing/item.rb
CHANGED
@@ -177,7 +177,7 @@ module Doing
|
|
177
177
|
tags.each do |tag|
|
178
178
|
bool = remove ? :and : :not
|
179
179
|
if tags?(tag, bool)
|
180
|
-
@title.tag
|
180
|
+
@title = @title.tag(tag, **options).strip
|
181
181
|
remove ? removed.push(tag) : added.push(tag)
|
182
182
|
end
|
183
183
|
end
|
@@ -278,7 +278,7 @@ module Doing
|
|
278
278
|
case_type ||= prefs.fetch('case', 'smart').normalize_case
|
279
279
|
new_note = Note.new
|
280
280
|
|
281
|
-
if search.
|
281
|
+
if search.rx? || matching == :fuzzy
|
282
282
|
rx = search.to_rx(distance: distance, case_type: case_type)
|
283
283
|
new_title = @title.gsub(rx) { |m| yellow(m) }
|
284
284
|
new_note.add(@note.to_s.gsub(rx) { |m| yellow(m) })
|
@@ -316,7 +316,7 @@ module Doing
|
|
316
316
|
distance ||= prefs.fetch('distance', 3).to_i
|
317
317
|
case_type ||= prefs.fetch('case', 'smart').normalize_case
|
318
318
|
|
319
|
-
if search.
|
319
|
+
if search.rx? || matching == :fuzzy
|
320
320
|
matches = @title + @note.to_s =~ search.to_rx(distance: distance, case_type: case_type)
|
321
321
|
else
|
322
322
|
query = search.strip.to_phrase_query
|
@@ -335,7 +335,7 @@ module Doing
|
|
335
335
|
# matches = text =~ search.to_rx(distance: distance, case_type: case_type)
|
336
336
|
# end
|
337
337
|
|
338
|
-
# if search.
|
338
|
+
# if search.rx? || !fuzzy
|
339
339
|
# matches = text =~ search.to_rx(distance: distance, case_type: case_type)
|
340
340
|
# else
|
341
341
|
# distance = 0.25 if distance > 1
|
@@ -393,13 +393,13 @@ module Doing
|
|
393
393
|
|
394
394
|
Doing.logger.count(@section == 'Archive' ? :archived : :moved) if log
|
395
395
|
Doing.logger.debug("#{@section == 'Archive' ? 'Archived' : 'Moved'}:",
|
396
|
-
"#{@title.
|
396
|
+
"#{@title.trunc(60)} from #{from} to #{@section}")
|
397
397
|
self
|
398
398
|
end
|
399
399
|
|
400
400
|
# outputs item in Doing file format, including leading tab
|
401
401
|
def to_s
|
402
|
-
"\t- #{@date.strftime('%Y-%m-%d %H:%M')} | #{@title}#{@note.
|
402
|
+
"\t- #{@date.strftime('%Y-%m-%d %H:%M')} | #{@title}#{@note.good? ? "\n#{@note}" : ''}"
|
403
403
|
end
|
404
404
|
|
405
405
|
##
|
@@ -429,6 +429,10 @@ module Doing
|
|
429
429
|
%(<Doing::Item @date=#{@date}>)
|
430
430
|
end
|
431
431
|
|
432
|
+
def clone
|
433
|
+
Marshal.load(Marshal.dump(self))
|
434
|
+
end
|
435
|
+
|
432
436
|
private
|
433
437
|
|
434
438
|
def should?(key)
|
@@ -457,7 +461,7 @@ module Doing
|
|
457
461
|
end
|
458
462
|
|
459
463
|
def all_searches?(searches, case_type: :smart)
|
460
|
-
return true
|
464
|
+
return true unless searches.good?
|
461
465
|
|
462
466
|
text = @title + @note.to_s
|
463
467
|
searches.each do |s|
|
@@ -468,7 +472,7 @@ module Doing
|
|
468
472
|
end
|
469
473
|
|
470
474
|
def no_searches?(searches, case_type: :smart)
|
471
|
-
return true
|
475
|
+
return true unless searches.good?
|
472
476
|
|
473
477
|
text = @title + @note.to_s
|
474
478
|
searches.each do |s|
|
@@ -479,7 +483,7 @@ module Doing
|
|
479
483
|
end
|
480
484
|
|
481
485
|
def any_searches?(searches, case_type: :smart)
|
482
|
-
return true
|
486
|
+
return true unless searches.good?
|
483
487
|
|
484
488
|
text = @title + @note.to_s
|
485
489
|
searches.each do |s|
|
@@ -490,7 +494,7 @@ module Doing
|
|
490
494
|
end
|
491
495
|
|
492
496
|
def all_tags?(tags)
|
493
|
-
return true
|
497
|
+
return true unless tags.good?
|
494
498
|
|
495
499
|
tags.each do |tag|
|
496
500
|
return false unless @title =~ /@#{tag.wildcard_to_rx}(?= |\(|\Z)/i
|
@@ -499,7 +503,7 @@ module Doing
|
|
499
503
|
end
|
500
504
|
|
501
505
|
def no_tags?(tags)
|
502
|
-
return true
|
506
|
+
return true unless tags.good?
|
503
507
|
|
504
508
|
tags.each do |tag|
|
505
509
|
return false if @title =~ /@#{tag.wildcard_to_rx}(?= |\(|\Z)/i
|
@@ -508,7 +512,7 @@ module Doing
|
|
508
512
|
end
|
509
513
|
|
510
514
|
def any_tags?(tags)
|
511
|
-
return true
|
515
|
+
return true unless tags.good?
|
512
516
|
|
513
517
|
tags.each do |tag|
|
514
518
|
return true if @title =~ /@#{tag.wildcard_to_rx}(?= |\(|\Z)/i
|
@@ -537,7 +541,7 @@ module Doing
|
|
537
541
|
end
|
538
542
|
|
539
543
|
def any_values?(queries)
|
540
|
-
return true
|
544
|
+
return true unless queries.good?
|
541
545
|
|
542
546
|
queries.each do |q|
|
543
547
|
parts = split_value_query(q)
|
@@ -547,7 +551,7 @@ module Doing
|
|
547
551
|
end
|
548
552
|
|
549
553
|
def all_values?(queries)
|
550
|
-
return true
|
554
|
+
return true unless queries.good?
|
551
555
|
|
552
556
|
queries.each do |q|
|
553
557
|
parts = split_value_query(q)
|
@@ -557,7 +561,7 @@ module Doing
|
|
557
561
|
end
|
558
562
|
|
559
563
|
def no_values?(queries)
|
560
|
-
return true
|
564
|
+
return true unless queries.good?
|
561
565
|
|
562
566
|
queries.each do |q|
|
563
567
|
parts = split_value_query(q)
|
data/lib/doing/items.rb
CHANGED
@@ -102,7 +102,7 @@ module Doing
|
|
102
102
|
|
103
103
|
self[s_idx] = new_item
|
104
104
|
Doing.logger.count(:updated)
|
105
|
-
Doing.logger.info('Entry updated:', self[s_idx].title.
|
105
|
+
Doing.logger.info('Entry updated:', self[s_idx].title.trunc(60))
|
106
106
|
new_item
|
107
107
|
end
|
108
108
|
|
@@ -132,7 +132,7 @@ module Doing
|
|
132
132
|
@sections.each do |section|
|
133
133
|
out.push(section.original)
|
134
134
|
items = in_section(section.title).sort_by { |i| i.date }
|
135
|
-
items.reverse! if Doing.config.settings['doing_file_sort'].normalize_order ==
|
135
|
+
items.reverse! if Doing.config.settings['doing_file_sort'].normalize_order == :desc
|
136
136
|
items.each { |item| out.push(item.to_s)}
|
137
137
|
end
|
138
138
|
|
data/lib/doing/log_adapter.rb
CHANGED
@@ -277,17 +277,50 @@ module Doing
|
|
277
277
|
|
278
278
|
def log_benchmarks
|
279
279
|
if ENV['DOING_BENCHMARK']
|
280
|
+
|
280
281
|
output = []
|
281
|
-
@benchmarks
|
282
|
+
beginning = @benchmarks[:total][:start]
|
283
|
+
ending = @benchmarks[:total][:finish]
|
284
|
+
total = ending - beginning
|
285
|
+
factor = TTY::Screen.columns / total
|
286
|
+
|
287
|
+
cols = Array.new(TTY::Screen.columns)
|
288
|
+
|
289
|
+
colors = %w[bgred bggreen bgyellow bgblue bgmagenta bgcyan bgwhite boldbgred boldbggreen boldbgyellow boldbgblue boldbgwhite]
|
290
|
+
idx = 0
|
291
|
+
# @benchmarks.delete(:total)
|
292
|
+
|
293
|
+
@benchmarks.sort_by { |_, timers| [timers[:start], timers[:finish]] }.each do |k, timers|
|
282
294
|
if timers[:finish] && timers[:start]
|
283
|
-
|
295
|
+
color = colors[idx % colors.count]
|
296
|
+
fg = if idx < 7
|
297
|
+
Color.boldblack
|
298
|
+
else
|
299
|
+
Color.boldwhite
|
300
|
+
end
|
301
|
+
color = Color.send(color) + fg
|
302
|
+
|
303
|
+
start = ((timers[:start] - beginning) * factor).floor
|
304
|
+
finish = ((timers[:finish] - beginning) * factor).ceil
|
305
|
+
|
306
|
+
cols.fill("#{color}-", start..finish)
|
307
|
+
cols[start] = "#{color}|"
|
308
|
+
cols[finish] = "#{color}|"
|
309
|
+
output << "#{color}#{k}#{Color.default}: #{timers[:finish] - timers[:start]}"
|
284
310
|
else
|
285
311
|
output << "#{k}: error"
|
286
312
|
end
|
313
|
+
|
314
|
+
idx += 1
|
287
315
|
end
|
316
|
+
|
288
317
|
output.each do |msg|
|
289
318
|
$stdout.puts color_message(:debug, 'Benchmark:', msg)
|
290
319
|
end
|
320
|
+
|
321
|
+
$stdout.puts color_message(:debug, 'Benchmark:', "Total: #{total}")
|
322
|
+
|
323
|
+
$stdout.puts cols[0..TTY::Screen.columns-1].join + Color.reset
|
291
324
|
end
|
292
325
|
end
|
293
326
|
|