doing 1.0.93 → 2.0.6.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHORS +19 -0
  3. data/CHANGELOG.md +616 -0
  4. data/COMMANDS.md +1181 -0
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +110 -0
  7. data/LICENSE +23 -0
  8. data/README.md +15 -699
  9. data/Rakefile +79 -0
  10. data/_config.yml +1 -0
  11. data/bin/doing +1055 -494
  12. data/doing.gemspec +34 -0
  13. data/doing.rdoc +1839 -0
  14. data/example_plugin.rb +209 -0
  15. data/generate_completions.sh +5 -0
  16. data/img/doing-colors.jpg +0 -0
  17. data/img/doing-printf-wrap-800.jpg +0 -0
  18. data/img/doing-show-note-formatting-800.jpg +0 -0
  19. data/lib/completion/_doing.zsh +203 -0
  20. data/lib/completion/doing.bash +449 -0
  21. data/lib/completion/doing.fish +329 -0
  22. data/lib/doing/array.rb +8 -0
  23. data/lib/doing/cli_status.rb +70 -0
  24. data/lib/doing/colors.rb +136 -0
  25. data/lib/doing/configuration.rb +312 -0
  26. data/lib/doing/errors.rb +109 -0
  27. data/lib/doing/hash.rb +31 -0
  28. data/lib/doing/hooks.rb +59 -0
  29. data/lib/doing/item.rb +155 -0
  30. data/lib/doing/log_adapter.rb +344 -0
  31. data/lib/doing/markdown_document_listener.rb +174 -0
  32. data/lib/doing/note.rb +59 -0
  33. data/lib/doing/pager.rb +95 -0
  34. data/lib/doing/plugin_manager.rb +208 -0
  35. data/lib/doing/plugins/export/csv_export.rb +48 -0
  36. data/lib/doing/plugins/export/html_export.rb +83 -0
  37. data/lib/doing/plugins/export/json_export.rb +140 -0
  38. data/lib/doing/plugins/export/markdown_export.rb +85 -0
  39. data/lib/doing/plugins/export/taskpaper_export.rb +34 -0
  40. data/lib/doing/plugins/export/template_export.rb +141 -0
  41. data/lib/doing/plugins/import/cal_to_json.scpt +0 -0
  42. data/lib/doing/plugins/import/calendar_import.rb +76 -0
  43. data/lib/doing/plugins/import/doing_import.rb +144 -0
  44. data/lib/doing/plugins/import/timing_import.rb +78 -0
  45. data/lib/doing/string.rb +348 -0
  46. data/lib/doing/symbol.rb +16 -0
  47. data/lib/doing/time.rb +18 -0
  48. data/lib/doing/util.rb +186 -0
  49. data/lib/doing/version.rb +1 -1
  50. data/lib/doing/wwid.rb +1868 -2349
  51. data/lib/doing/wwidfile.rb +117 -0
  52. data/lib/doing.rb +43 -3
  53. data/lib/examples/commands/autotag.rb +63 -0
  54. data/lib/examples/commands/wiki.rb +81 -0
  55. data/lib/examples/plugins/hooks.rb +22 -0
  56. data/lib/examples/plugins/say_export.rb +202 -0
  57. data/lib/examples/plugins/templates/wiki.css +169 -0
  58. data/lib/examples/plugins/templates/wiki.haml +27 -0
  59. data/lib/examples/plugins/templates/wiki_index.haml +18 -0
  60. data/lib/examples/plugins/wiki_export.rb +87 -0
  61. data/lib/templates/doing-markdown.erb +5 -0
  62. data/man/doing.1 +964 -0
  63. data/man/doing.1.html +711 -0
  64. data/man/doing.1.ronn +600 -0
  65. data/package-lock.json +3 -0
  66. data/rdoc_to_mmd.rb +42 -0
  67. data/rdocfixer.rb +13 -0
  68. data/scripts/generate_bash_completions.rb +211 -0
  69. data/scripts/generate_fish_completions.rb +204 -0
  70. data/scripts/generate_zsh_completions.rb +168 -0
  71. metadata +82 -7
  72. data/lib/doing/helpers.rb +0 -191
  73. data/lib/doing/markdown_export.rb +0 -16
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.join(__dir__, '..', 'lib')
3
+ require 'doing/cli_status'
4
+
5
+ require 'shellwords'
6
+
7
+ class ::String
8
+ def short_desc
9
+ split(/[,.]/)[0].sub(/ \(.*?\)?$/, '').strip
10
+ end
11
+
12
+ def ltrunc(max)
13
+ if length > max
14
+ sub(/^.*?(.{#{max - 3}})$/, '...\1')
15
+ else
16
+ self
17
+ end
18
+ end
19
+
20
+ def ltrunc!(max)
21
+ replace ltrunc(max)
22
+ end
23
+ end
24
+
25
+ class BashCompletions
26
+ include Status
27
+
28
+ attr_accessor :commands, :global_options
29
+
30
+ def main_function
31
+ first = true
32
+ out = []
33
+ logic = []
34
+ need_export = []
35
+ # processing = []
36
+
37
+ @commands.each_with_index do |cmd, i|
38
+ # processing << cmd[:commands].first
39
+ processing = cmd[:commands]
40
+ progress('Processing subcommand options', i, @commands.count, processing)
41
+
42
+ data = get_help_sections(cmd[:commands].first)
43
+
44
+ arg = data[:synopsis].join(' ').strip.split(/ /).last
45
+ case arg
46
+ when /(path|file)/i
47
+ type = :file
48
+ when /sect/i
49
+ type = 'sections'
50
+ when /view/i
51
+ type = 'views'
52
+ else
53
+ type = nil
54
+ end
55
+
56
+ if data[:command_options]
57
+ options = parse_options(data[:command_options])
58
+ out << command_function(cmd[:commands].first, options, type)
59
+
60
+ if first
61
+ op = 'if'
62
+ first = false
63
+ else
64
+ op = 'elif'
65
+ end
66
+ logic << %(#{op} [[ $last =~ (#{cmd[:commands].join('|')}) ]]; then _doing_#{cmd[:commands].first})
67
+ end
68
+ end
69
+
70
+ out << <<~EOFUNC
71
+ _doing()
72
+ {
73
+ local last="${@: -1}"
74
+ local token=${COMP_WORDS[$COMP_CWORD]}
75
+
76
+ #{logic.join("\n ")}
77
+ else
78
+ OLD_IFS="$IFS"
79
+ IFS=$'\n'
80
+ COMPREPLY=( $(compgen -W "$(doing help -c)" -- $token) )
81
+ IFS="$OLD_IFS"
82
+ fi
83
+ }
84
+ EOFUNC
85
+ clear
86
+ out.join("\n")
87
+ end
88
+
89
+ def command_function(command, options, type)
90
+ long_options = []
91
+ short_options = []
92
+
93
+ options.each do |o|
94
+ next if o.nil?
95
+
96
+ long_options << o[:long] if o[:long]
97
+ short_options << o[:short] if o[:short]
98
+ end
99
+
100
+ long = long_options.map! {|o| "--#{o}"}.join(' ')
101
+ short = short_options.map! {|o| "-#{o}"}.join(' ')
102
+ words = ''
103
+ logic = ''
104
+ words, logic = get_words(type) if type && type.is_a?(String)
105
+
106
+ func = <<~ENDFUNC
107
+ _doing_#{command}() {
108
+ #{words}
109
+ if [[ "$token" == --* ]]; then
110
+ COMPREPLY=( $( compgen -W '#{long}' -- $token ) )
111
+ elif [[ "$token" == -* ]]; then
112
+ COMPREPLY=( $( compgen -W '#{short} #{long}' -- $token ) )
113
+ #{logic}
114
+ fi
115
+ }
116
+ ENDFUNC
117
+
118
+ func
119
+ end
120
+
121
+ def get_words(type)
122
+ func = <<~EOFUNC
123
+ OLD_IFS="$IFS"
124
+ local token=${COMP_WORDS[$COMP_CWORD]}
125
+ IFS=$'\t'
126
+ local words=$(doing #{type})
127
+ IFS="$OLD_IFS"
128
+ EOFUNC
129
+
130
+ logic = <<~EOLOGIC
131
+ else
132
+ local nocasematchWasOff=0
133
+ shopt nocasematch >/dev/null || nocasematchWasOff=1
134
+ (( nocasematchWasOff )) && shopt -s nocasematch
135
+ local w matches=()
136
+ OLD_IFS="$IFS"
137
+ IFS=$'\t'‰
138
+ for w in $words; do
139
+ if [[ "$w" == "$token"* ]]; then
140
+ matches+=("${w// /\ }")
141
+ fi
142
+ done
143
+ IFS="$OLD_IFS"
144
+ (( nocasematchWasOff )) && shopt -u nocasematch
145
+ COMPREPLY=("${matches[@]}")
146
+ EOLOGIC
147
+
148
+ [func, logic]
149
+ end
150
+
151
+
152
+
153
+ def get_help_sections(command = '')
154
+ res = `doing help #{command}`.strip
155
+ scanned = res.scan(/(?m-i)^([A-Z ]+)\n([\s\S]*?)(?=\n+[A-Z]+|\Z)/)
156
+ sections = {}
157
+ scanned.each do |sect|
158
+ title = sect[0].downcase.strip.gsub(/ +/, '_').to_sym
159
+ content = sect[1].split(/\n/).map(&:strip).delete_if(&:empty?)
160
+ sections[title] = content
161
+ end
162
+ sections
163
+ end
164
+
165
+ def parse_option(option)
166
+ res = option.match(/(?:-(?<short>\w), )?(?:--(?:\[no-\])?(?<long>[\w_]+)(?:=(?<arg>\w+))?)\s+- (?<desc>.*?)$/)
167
+ return nil unless res
168
+ {
169
+ short: res['short'],
170
+ long: res['long'],
171
+ arg: res[:arg],
172
+ description: res['desc'].short_desc
173
+ }
174
+ end
175
+
176
+ def parse_options(options)
177
+ options.map { |opt| parse_option(opt) }
178
+ end
179
+
180
+ def parse_command(command)
181
+ res = command.match(/^(?<cmd>[^, \t]+)(?<alias>(?:, [^, \t]+)*)?\s+- (?<desc>.*?)$/)
182
+ commands = [res['cmd']]
183
+ commands.concat(res['alias'].split(/, /).delete_if(&:empty?)) if res['alias']
184
+
185
+ {
186
+ commands: commands,
187
+ description: res['desc'].short_desc
188
+ }
189
+ end
190
+
191
+ def parse_commands(commands)
192
+ commands.map { |cmd| parse_command(cmd) }
193
+ end
194
+
195
+ def initialize
196
+ status('Generating Bash completions', reset: false)
197
+ data = get_help_sections
198
+ @global_options = parse_options(data[:global_options])
199
+ @commands = parse_commands(data[:commands])
200
+ end
201
+
202
+ def generate_completions
203
+ out = []
204
+ out << main_function
205
+ out << 'complete -F _doing doing'
206
+ status('Complete', reset: false)
207
+ out.join("\n")
208
+ end
209
+ end
210
+
211
+ puts BashCompletions.new.generate_completions
@@ -0,0 +1,204 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.join(__dir__, '..', 'lib')
3
+ require 'doing/cli_status'
4
+
5
+ require 'shellwords'
6
+
7
+ class ::String
8
+ def short_desc
9
+ split(/[,.]/)[0].sub(/ \(.*?\)?$/, '').strip
10
+ end
11
+
12
+ def ltrunc(max)
13
+ if length > max
14
+ sub(/^.*?(.{#{max - 3}})$/, '...\1')
15
+ else
16
+ self
17
+ end
18
+ end
19
+
20
+ def ltrunc!(max)
21
+ replace ltrunc(max)
22
+ end
23
+ end
24
+
25
+ class FishCompletions
26
+ include Status
27
+
28
+ attr_accessor :commands, :global_options
29
+
30
+ def generate_helpers
31
+ <<~EOFUNCTIONS
32
+ function __fish_doing_needs_command
33
+ # Figure out if the current invocation already has a command.
34
+
35
+ set -l opts h-help config_file= f-doing_file= n-notes v-version stdout d-debug default x-noauto
36
+ set cmd (commandline -opc)
37
+ set -e cmd[1]
38
+ argparse -s $opts -- $cmd 2>/dev/null
39
+ or return 0
40
+ # These flags function as commands, effectively.
41
+ if set -q argv[1]
42
+ # Also print the command, so this can be used to figure out what it is.
43
+ echo $argv[1]
44
+ return 1
45
+ end
46
+ return 0
47
+ end
48
+
49
+ function __fish_doing_using_command
50
+ set -l cmd (__fish_doing_needs_command)
51
+ test -z "$cmd"
52
+ and return 1
53
+ contains -- $cmd $argv
54
+ and return 0
55
+ end
56
+
57
+ function __fish_doing_complete_sections
58
+ doing sections -c
59
+ end
60
+
61
+ function __fish_doing_complete_views
62
+ doing views -c
63
+ end
64
+
65
+ function __fish_doing_subcommands
66
+ doing help -c
67
+ end
68
+
69
+ function __fish_doing_export_plugins
70
+ doing plugins --type export -c
71
+ end
72
+
73
+ function __fish_doing_import_plugins
74
+ doing plugins --type import -c
75
+ end
76
+
77
+ function __fish_doing_complete_templates
78
+ doing template -c
79
+ end
80
+
81
+ complete -c doing -f
82
+ complete -xc doing -n '__fish_doing_needs_command' -a '(__fish_doing_subcommands)'
83
+
84
+ complete -f -c doing -n '__fish_doing_using_command show' -a '(__fish_doing_complete_sections)'
85
+ complete -f -c doing -n '__fish_doing_using_command view' -a '(__fish_doing_complete_views)'
86
+ complete -f -c doing -n '__fish_doing_using_command template' -a '(__fish_doing_complete_templates)'
87
+ complete -f -c doing -s t -l type -x -n '__fish_doing_using_command import' -a '(__fish_doing_import_plugins)'
88
+
89
+ complete -xc doing -n '__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from (doing help -c)' -a "(doing help -c)"
90
+ EOFUNCTIONS
91
+ end
92
+
93
+ def get_help_sections(command = '')
94
+ res = `doing help #{command}`.strip
95
+ scanned = res.scan(/(?m-i)^([A-Z ]+)\n([\s\S]*?)(?=\n+[A-Z]+|\Z)/)
96
+ sections = {}
97
+ scanned.each do |sect|
98
+ title = sect[0].downcase.strip.gsub(/ +/, '_').to_sym
99
+ content = sect[1].split(/\n/).map(&:strip).delete_if(&:empty?)
100
+ sections[title] = content
101
+ end
102
+ sections
103
+ end
104
+
105
+ def parse_option(option)
106
+ res = option.match(/(?:-(?<short>\w), )?(?:--(?:\[no-\])?(?<long>[\w_]+)(?:=(?<arg>\w+))?)\s+- (?<desc>.*?)$/)
107
+ return nil unless res
108
+ {
109
+ short: res['short'],
110
+ long: res['long'],
111
+ arg: res[:arg],
112
+ description: res['desc'].short_desc
113
+ }
114
+ end
115
+
116
+ def parse_options(options)
117
+ options.map { |opt| parse_option(opt) }
118
+ end
119
+
120
+ def parse_command(command)
121
+ res = command.match(/^(?<cmd>[^, \t]+)(?<alias>(?:, [^, \t]+)*)?\s+- (?<desc>.*?)$/)
122
+ commands = [res['cmd']]
123
+ commands.concat(res['alias'].split(/, /).delete_if(&:empty?)) if res['alias']
124
+
125
+ {
126
+ commands: commands,
127
+ description: res['desc'].short_desc
128
+ }
129
+ end
130
+
131
+ def parse_commands(commands)
132
+ commands.map { |cmd| parse_command(cmd) }
133
+ end
134
+
135
+ def generate_subcommand_completions
136
+ out = []
137
+ # processing = []
138
+ @commands.each_with_index do |cmd, i|
139
+ # processing << cmd[:commands].first
140
+ processing = cmd[:commands]
141
+ progress('Processing subcommands', i, @commands.count, processing)
142
+ out << "complete -xc doing -n '__fish_doing_needs_command' -a '#{cmd[:commands].join(' ')}' -d #{Shellwords.escape(cmd[:description])}"
143
+ end
144
+
145
+ out.join("\n")
146
+ end
147
+
148
+ def generate_subcommand_option_completions
149
+
150
+ out = []
151
+ need_export = []
152
+ # processing = []
153
+
154
+ @commands.each_with_index do |cmd, i|
155
+ # processing << cmd[:commands].first
156
+ processing = cmd[:commands]
157
+ progress('Processing subcommand options', i, @commands.count, processing)
158
+
159
+ data = get_help_sections(cmd[:commands].first)
160
+
161
+ if data[:synopsis].join(' ').strip.split(/ /).last =~ /(path|file)/i
162
+ out << "complete -c doing -F -n '__fish_doing_using_command #{cmd[:commands].join(" ")}'"
163
+ end
164
+
165
+ if data[:command_options]
166
+ parse_options(data[:command_options]).each do |option|
167
+ next if option.nil?
168
+
169
+ arg = option[:arg] ? '-r' : ''
170
+ short = option[:short] ? "-s #{option[:short]}" : ''
171
+ long = option[:long] ? "-l #{option[:long]}" : ''
172
+ out << "complete -c doing #{long} #{short} -f #{arg} -n '__fish_doing_using_command #{cmd[:commands].join(' ')}' -d #{Shellwords.escape(option[:description])}"
173
+
174
+ need_export.concat(cmd[:commands]) if option[:long] == 'output'
175
+ end
176
+ end
177
+ end
178
+
179
+ unless need_export.empty?
180
+ out << "complete -f -c doing -s o -l output -x -n '__fish_doing_using_command #{need_export.join(' ')}' -a '(__fish_doing_export_plugins)'"
181
+ end
182
+
183
+ clear
184
+ out.join("\n")
185
+ end
186
+
187
+ def initialize
188
+ status('Generating Fish completions', reset: false)
189
+ data = get_help_sections
190
+ @global_options = parse_options(data[:global_options])
191
+ @commands = parse_commands(data[:commands])
192
+ end
193
+
194
+ def generate_completions
195
+ out = []
196
+ out << generate_helpers
197
+ out << generate_subcommand_completions
198
+ out << generate_subcommand_option_completions
199
+ status('Complete', reset: false)
200
+ out.join("\n")
201
+ end
202
+ end
203
+
204
+ puts FishCompletions.new.generate_completions
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.join(__dir__, '..', 'lib')
3
+ require 'doing/cli_status'
4
+
5
+ require 'shellwords'
6
+
7
+ class ::String
8
+ def short_desc
9
+ split(/[,.]/)[0].sub(/ \(.*?\)?$/, '').strip
10
+ end
11
+
12
+ def ltrunc(max)
13
+ if length > max
14
+ sub(/^.*?(.{#{max - 3}})$/, '...\1')
15
+ else
16
+ self
17
+ end
18
+ end
19
+
20
+ def ltrunc!(max)
21
+ replace ltrunc(max)
22
+ end
23
+ end
24
+
25
+ class ZshCompletions
26
+ include Status
27
+
28
+ attr_accessor :commands, :global_options
29
+
30
+ def generate_helpers
31
+ <<~EOFUNCTIONS
32
+ compdef _doing doing
33
+
34
+ function _doing() {
35
+ local line state
36
+
37
+ function _commands {
38
+ local -a commands
39
+
40
+ commands=(
41
+ #{generate_subcommand_completions.join("\n ")}
42
+ )
43
+ _describe 'command' commands
44
+ }
45
+
46
+ _arguments -C \
47
+ "1: :_commands" \
48
+ "*::arg:->args"
49
+
50
+
51
+
52
+ case $line[1] in
53
+ #{generate_subcommand_option_completions(indent: ' ').join("\n ")}
54
+ esac
55
+
56
+ _arguments -s $args
57
+ }
58
+
59
+ EOFUNCTIONS
60
+ end
61
+
62
+ def get_help_sections(command = '')
63
+ res = `doing help #{command}`.strip
64
+ scanned = res.scan(/(?m-i)^([A-Z ]+)\n([\s\S]*?)(?=\n+[A-Z]+|\Z)/)
65
+ sections = {}
66
+ scanned.each do |sect|
67
+ title = sect[0].downcase.strip.gsub(/ +/, '_').to_sym
68
+ content = sect[1].split(/\n/).map(&:strip).delete_if(&:empty?)
69
+ sections[title] = content
70
+ end
71
+ sections
72
+ end
73
+
74
+ def parse_option(option)
75
+ res = option.match(/(?:-(?<short>\w), )?(?:--(?:\[no-\])?(?<long>[\w_]+)(?:=(?<arg>\w+))?)\s+- (?<desc>.*?)$/)
76
+ return nil unless res
77
+
78
+ {
79
+ short: res['short'],
80
+ long: res['long'],
81
+ arg: res[:arg],
82
+ description: res['desc'].short_desc
83
+ }
84
+ end
85
+
86
+ def parse_options(options)
87
+ options.map { |opt| parse_option(opt) }
88
+ end
89
+
90
+ def parse_command(command)
91
+ res = command.match(/^(?<cmd>[^, \t]+)(?<alias>(?:, [^, \t]+)*)?\s+- (?<desc>.*?)$/)
92
+ commands = [res['cmd']]
93
+ commands.concat(res['alias'].split(/, /).delete_if(&:empty?)) if res['alias']
94
+
95
+ {
96
+ commands: commands,
97
+ description: res['desc'].short_desc
98
+ }
99
+ end
100
+
101
+ def parse_commands(commands)
102
+ commands.map { |cmd| parse_command(cmd) }
103
+ end
104
+
105
+ def generate_subcommand_completions
106
+ out = []
107
+ # processing = []
108
+ @commands.each_with_index do |cmd, i|
109
+ # processing << cmd[:commands].first
110
+ processing = cmd[:commands]
111
+ progress('Processing subcommands', i, @commands.count, processing)
112
+ cmd[:commands].each do |c|
113
+ out << "'#{c}:#{cmd[:description].gsub(/'/, '\\\'')}'"
114
+ end
115
+ end
116
+ clear
117
+ out
118
+ end
119
+
120
+ def generate_subcommand_option_completions(indent: ' ')
121
+
122
+ out = []
123
+ # processing = []
124
+
125
+ @commands.each_with_index do |cmd, i|
126
+ # processing << cmd[:commands].first
127
+ processing = cmd[:commands]
128
+ progress('Processing subcommand options', i, @commands.count, processing)
129
+
130
+ data = get_help_sections(cmd[:commands].first)
131
+ option_arr = []
132
+
133
+ if data[:command_options]
134
+ parse_options(data[:command_options]).each do |option|
135
+ next if option.nil?
136
+
137
+ arg = option[:arg] ? '=' : ''
138
+
139
+ option_arr << if option[:short]
140
+ %({-#{option[:short]},--#{option[:long]}#{arg}}"[#{option[:description].gsub(/'/, '\\\'')}]")
141
+ else
142
+ %("(--#{option[:long]}#{arg})--#{option[:long]}#{arg}}[#{option[:description].gsub(/'/, '\\\'')}]")
143
+ end
144
+ end
145
+ end
146
+
147
+ cmd[:commands].each do |c|
148
+ out << "#{c}) \n#{indent} args=( #{option_arr.join(' ')} )\n#{indent};;"
149
+ end
150
+ end
151
+
152
+ out
153
+ end
154
+
155
+ def initialize
156
+ status('Generating Zsh completions', reset: false)
157
+ data = get_help_sections
158
+ @global_options = parse_options(data[:global_options])
159
+ @commands = parse_commands(data[:commands])
160
+ end
161
+
162
+ def generate_completions
163
+ generate_helpers
164
+ status('Complete', reset: false)
165
+ end
166
+ end
167
+
168
+ puts ZshCompletions.new.generate_completions
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doing
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.93
4
+ version: 2.0.6.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-16 00:00:00.000000000 Z
11
+ date: 2021-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: safe_yaml
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rake
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -162,16 +176,78 @@ extensions: []
162
176
  extra_rdoc_files:
163
177
  - README.md
164
178
  files:
179
+ - AUTHORS
180
+ - CHANGELOG.md
181
+ - COMMANDS.md
182
+ - Gemfile
183
+ - Gemfile.lock
184
+ - LICENSE
165
185
  - README.md
186
+ - Rakefile
187
+ - _config.yml
166
188
  - bin/doing
189
+ - doing.gemspec
190
+ - doing.rdoc
191
+ - example_plugin.rb
192
+ - generate_completions.sh
193
+ - img/doing-colors.jpg
194
+ - img/doing-printf-wrap-800.jpg
195
+ - img/doing-show-note-formatting-800.jpg
196
+ - lib/completion/_doing.zsh
197
+ - lib/completion/doing.bash
198
+ - lib/completion/doing.fish
167
199
  - lib/doing.rb
168
- - lib/doing/helpers.rb
169
- - lib/doing/markdown_export.rb
200
+ - lib/doing/array.rb
201
+ - lib/doing/cli_status.rb
202
+ - lib/doing/colors.rb
203
+ - lib/doing/configuration.rb
204
+ - lib/doing/errors.rb
205
+ - lib/doing/hash.rb
206
+ - lib/doing/hooks.rb
207
+ - lib/doing/item.rb
208
+ - lib/doing/log_adapter.rb
209
+ - lib/doing/markdown_document_listener.rb
210
+ - lib/doing/note.rb
211
+ - lib/doing/pager.rb
212
+ - lib/doing/plugin_manager.rb
213
+ - lib/doing/plugins/export/csv_export.rb
214
+ - lib/doing/plugins/export/html_export.rb
215
+ - lib/doing/plugins/export/json_export.rb
216
+ - lib/doing/plugins/export/markdown_export.rb
217
+ - lib/doing/plugins/export/taskpaper_export.rb
218
+ - lib/doing/plugins/export/template_export.rb
219
+ - lib/doing/plugins/import/cal_to_json.scpt
220
+ - lib/doing/plugins/import/calendar_import.rb
221
+ - lib/doing/plugins/import/doing_import.rb
222
+ - lib/doing/plugins/import/timing_import.rb
223
+ - lib/doing/string.rb
224
+ - lib/doing/symbol.rb
225
+ - lib/doing/time.rb
226
+ - lib/doing/util.rb
170
227
  - lib/doing/version.rb
171
228
  - lib/doing/wwid.rb
229
+ - lib/doing/wwidfile.rb
230
+ - lib/examples/commands/autotag.rb
231
+ - lib/examples/commands/wiki.rb
232
+ - lib/examples/plugins/hooks.rb
233
+ - lib/examples/plugins/say_export.rb
234
+ - lib/examples/plugins/templates/wiki.css
235
+ - lib/examples/plugins/templates/wiki.haml
236
+ - lib/examples/plugins/templates/wiki_index.haml
237
+ - lib/examples/plugins/wiki_export.rb
172
238
  - lib/helpers/fuzzyfilefinder
239
+ - lib/templates/doing-markdown.erb
173
240
  - lib/templates/doing.css
174
241
  - lib/templates/doing.haml
242
+ - man/doing.1
243
+ - man/doing.1.html
244
+ - man/doing.1.ronn
245
+ - package-lock.json
246
+ - rdoc_to_mmd.rb
247
+ - rdocfixer.rb
248
+ - scripts/generate_bash_completions.rb
249
+ - scripts/generate_fish_completions.rb
250
+ - scripts/generate_zsh_completions.rb
175
251
  homepage: http://brettterpstra.com/project/doing/
176
252
  licenses:
177
253
  - MIT
@@ -184,7 +260,6 @@ rdoc_options:
184
260
  - README.md
185
261
  - "--markup"
186
262
  - markdown
187
- - "-ri"
188
263
  require_paths:
189
264
  - lib
190
265
  - lib
@@ -195,9 +270,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
270
  version: '0'
196
271
  required_rubygems_version: !ruby/object:Gem::Requirement
197
272
  requirements:
198
- - - ">="
273
+ - - ">"
199
274
  - !ruby/object:Gem::Version
200
- version: '0'
275
+ version: 1.3.1
201
276
  requirements: []
202
277
  rubygems_version: 3.2.16
203
278
  signing_key: