hiiro 0.1.201 → 0.1.202

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: 0161eeaf4f0cbe1052c13d9373ab9ed268394d1895f498fd5b964ba363b017d9
4
- data.tar.gz: 559024c602f5667a1ae23b3d9d917295fe676194c17e24489d3047f16cb1b50d
3
+ metadata.gz: cb51c411e28d0ce3d0b7d9374b8de629de59442a34baa0428b1eec6198f3a661
4
+ data.tar.gz: 815b50958a7f9d12fa80523ff234a548ace880e722d6c34f5e5461877e2a0e11
5
5
  SHA512:
6
- metadata.gz: 85941f5cf69ef053cc6ae8a08ef2b1036313ee8b60413243009cbd85311c2fcb8823b52c11780dd7b4fdf2785027440a86373146673dbb76e9ab2b3de819d773
7
- data.tar.gz: 8cba796136692b6cd26cc372a42d429d422a7a141414939cc383212f4fa9a491b1a94a05cb0383fc2db27d503c4d63ad00be87bd49c63e08b52b5e4458acc3a6
6
+ metadata.gz: 995d28e52ef80c890d3356112236b53eb4a0ee2a0cf7a09a560573fa45c1c8ba970d75d4405309c00542a4412b7eaf3b5d21d4c8603781ee87acd478c8b5e935
7
+ data.tar.gz: 5c41177b7ccb01d40f4cd56e7a7b2319be8993f89e54fe0d11e10a707e671c1ecb76f4e60844d39d1d5786152f882d5ac0cfc29615397e778b78cedd8f78825c
data/lib/hiiro/queue.rb CHANGED
@@ -40,6 +40,50 @@ class Hiiro
40
40
  Dir.glob(File.join(dir, '*.md')).sort.map { |f| File.basename(f, '.md') }
41
41
  end
42
42
 
43
+ def tasks_in_sorted(status)
44
+ dir = queue_dirs[status]
45
+ Dir.glob(File.join(dir, '*.md')).map { |f|
46
+ { name: File.basename(f, '.md'), mtime: File.mtime(f) }
47
+ }.sort_by { |t| -t[:mtime].to_i }
48
+ end
49
+
50
+ def format_mtime(mtime)
51
+ now = Time.now
52
+ mtime.year == now.year ? mtime.strftime("%m-%d %H:%M") : mtime.strftime("%Y-%m-%d %H:%M")
53
+ end
54
+
55
+ def list_lines(all: false)
56
+ lines = []
57
+ STATUSES.each do |status|
58
+ tasks = tasks_in_sorted(status.to_sym)
59
+ next if tasks.empty?
60
+
61
+ display = all ? tasks : tasks.first(10)
62
+ display.each do |t|
63
+ ts = format_mtime(t[:mtime])
64
+ line = "%-10s %-12s %s" % [status, ts, t[:name]]
65
+ meta = meta_for(t[:name], status.to_sym)
66
+ if meta && status == 'running'
67
+ started = meta['started_at']
68
+ if started
69
+ elapsed = Time.now - Time.parse(started)
70
+ mins = (elapsed / 60).to_i
71
+ line += " (#{mins}m)"
72
+ end
73
+ line += " [#{meta['tmux_session']}:#{meta['tmux_window']}]" if meta['tmux_session']
74
+ end
75
+ preview = task_preview(t[:name], status.to_sym)
76
+ line += " #{preview}" if preview
77
+ lines << line
78
+ end
79
+
80
+ if !all && tasks.size > 10
81
+ lines << " ... and #{tasks.size - 10} more"
82
+ end
83
+ end
84
+ lines
85
+ end
86
+
43
87
  def all_tasks
44
88
  STATUSES.flat_map do |status|
45
89
  tasks_in(status.to_sym).map { |name| { name: name, status: status } }
@@ -315,54 +359,30 @@ class Hiiro
315
359
  end
316
360
  }
317
361
 
318
- h.add_subcmd(:ls) {
319
- tasks = q.all_tasks
320
- if tasks.empty?
321
- puts "No tasks"
322
- next
323
- end
324
- tasks.each do |t|
325
- line = "%-10s %s" % [t[:status], t[:name]]
326
- meta = q.meta_for(t[:name], t[:status].to_sym)
327
- if meta && t[:status] == 'running'
328
- started = meta['started_at']
329
- if started
330
- elapsed = Time.now - Time.parse(started)
331
- mins = (elapsed / 60).to_i
332
- line += " (#{mins}m)"
333
- end
334
- line += " [#{meta['tmux_session']}:#{meta['tmux_window']}]" if meta['tmux_session']
335
- end
336
- preview = q.task_preview(t[:name], t[:status].to_sym)
337
- line += " #{preview}" if preview
338
- puts line
362
+ list_cmd = proc { |*args|
363
+ opts = Hiiro::Options.parse(args) do
364
+ flag(:all, short: :a, desc: 'Show all tasks without limit; use pager if output exceeds terminal height')
339
365
  end
340
- }
341
-
342
- h.add_subcmd(:list) {
343
- tasks = q.all_tasks
344
- if tasks.empty?
366
+ lines = q.list_lines(all: opts.all)
367
+ if lines.empty?
345
368
  puts "No tasks"
346
369
  next
347
370
  end
348
- tasks.each do |t|
349
- line = "%-10s %s" % [t[:status], t[:name]]
350
- meta = q.meta_for(t[:name], t[:status].to_sym)
351
- if meta && t[:status] == 'running'
352
- started = meta['started_at']
353
- if started
354
- elapsed = Time.now - Time.parse(started)
355
- mins = (elapsed / 60).to_i
356
- line += " (#{mins}m)"
357
- end
358
- line += " [#{meta['tmux_session']}:#{meta['tmux_window']}]" if meta['tmux_session']
371
+ if opts.all
372
+ terminal_lines = ENV['LINES']&.to_i || 24
373
+ if lines.size > terminal_lines
374
+ IO.popen(ENV['PAGER'] || 'less', 'w') { |io| io.puts lines }
375
+ else
376
+ puts lines
359
377
  end
360
- preview = q.task_preview(t[:name], t[:status].to_sym)
361
- line += " #{preview}" if preview
362
- puts line
378
+ else
379
+ puts lines
363
380
  end
364
381
  }
365
382
 
383
+ h.add_subcmd(:ls, &list_cmd)
384
+ h.add_subcmd(:list, &list_cmd)
385
+
366
386
  h.add_subcmd(:status) {
367
387
  tasks = q.all_tasks
368
388
  if tasks.empty?
data/lib/hiiro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Hiiro
2
- VERSION = "0.1.201"
2
+ VERSION = "0.1.202"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiiro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.201
4
+ version: 0.1.202
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Toyota