na 1.2.53 → 1.2.55

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cecace1a262d294c8ef240dd6413f488b736fc04b7a5edaff413df8184ce2c8
4
- data.tar.gz: 2d34dedd3c0cedc257ad1e7761afab581522aed6d97aa48ad53f4e1b424b1c68
3
+ metadata.gz: 484524907842c8a365053b8f38fe16604500efc523042d31655de928556bf0f3
4
+ data.tar.gz: 6aad55a6f0fbf7ffac73f22b03f756b7e3f1c51a4c5d7a57cf278bf59699a816
5
5
  SHA512:
6
- metadata.gz: a46c75398d031fa5a4d029ab99bf6df3cdc3958cbda22de87402480f5327afcfaed5b9353df6515a7610990b5d97e5553e37a94186402c0af0cb817bb7b59674
7
- data.tar.gz: 705c122dbd8714a18676b633f201707a515d69e3e24ddbce2c008cce498e3ccdf4f9b3829f3e28e474b5aaa1e41de93ed775da14bc414db16649bece9ab185cc
6
+ metadata.gz: 64251a62cfdbc27e858419a448e70bb7a730cd18e30472789b55c99dbe83a931db2f42c14cfb6685fa3211e7b614eb26ce2db127291c2f2bb1dbd1b46415d7a0
7
+ data.tar.gz: daf75663a2310602ae8de2497228df1c51bdac09d30a32d49d9194c36eab542c0314647a0a0e733bee21dfe5527b22f78333d856e21a993de328a0141b216744
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ### 1.2.55
2
+
3
+ 2023-09-11 11:23
4
+
5
+ #### IMPROVED
6
+
7
+ - Change minimum width for text wrapping to 80 columns
8
+
9
+ ### 1.2.54
10
+
11
+ 2023-09-11 10:11
12
+
13
+ #### IMPROVED
14
+
15
+ - Allow selection of action if no search text is provided for tag command
16
+ - If the terminal is less than 60 columns wide, don't indent or wrap (for display on mobile devices)
17
+
1
18
  ### 1.2.53
2
19
 
3
20
  2023-09-10 08:26
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- na (1.2.53)
4
+ na (1.2.55)
5
5
  chronic (~> 0.10, >= 0.10.2)
6
6
  gli (~> 2.21.0)
7
7
  mdless (~> 1.0, >= 1.0.32)
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  _If you're one of the rare people like me who find this useful, feel free to
10
10
  [buy me some coffee][donate]._
11
11
 
12
- The current version of `na` is 1.2.53
12
+ The current version of `na` is 1.2.55
13
13
  .
14
14
 
15
15
  `na` ("next action") is a command line tool designed to make it easy to see what your next actions are for any project, right from the command line. It works with TaskPaper-formatted files (but any plain text format will do), looking for `@na` tags (or whatever you specify) in todo files in your current folder.
@@ -77,7 +77,7 @@ SYNOPSIS
77
77
  na [global options] command [command options] [arguments...]
78
78
 
79
79
  VERSION
80
- 1.2.53
80
+ 1.2.55
81
81
 
82
82
  GLOBAL OPTIONS
83
83
  -a, --add - Add a next action (deprecated, for backwards compatibility)
@@ -660,11 +660,14 @@ NAME
660
660
 
661
661
  SYNOPSIS
662
662
 
663
- na [global options] undo [FILE]...
663
+ na [global options] undo [command options] [FILE]...
664
664
 
665
665
  DESCRIPTION
666
666
  Run without argument to undo most recent change
667
667
 
668
+ COMMAND OPTIONS
669
+ -s, --[no-]select, --[no-]choose - Select from available undo files
670
+
668
671
  EXAMPLES
669
672
 
670
673
  # Undo the last change
data/Test.todo.markdown CHANGED
@@ -3,19 +3,31 @@ comment: 2023-09-03
3
3
  keywords:
4
4
  ---
5
5
 
6
- 2023-09-08:
7
- Project2:
8
- - new_task @na
9
- - new_task @na
6
+ Project3:
10
7
  Project0:
11
- - other task @na
12
- - other task @na
13
- - There, that's better @na
8
+ - This is another task @na
9
+ - How about this one? @na
10
+ - what happens now? @na
14
11
  Subproject:
15
- - new_task 2 @na
12
+ - Bollocks @na
13
+ Subsub:
14
+ - Hey, I think it's all working @na
15
+ - Is this at the end? @na
16
+ - This better work @na
17
+ 2023-09-08:
18
+ Project2:
19
+ - new_task @na
16
20
  - new_task @na
17
- - new_task 2 @na
18
- Project1:
19
- - Test4
20
- - Test5
21
- - Test6
21
+ - test task @na
22
+ Project0:
23
+ - other task @na
24
+ - other task @na
25
+ - There, that's better @na
26
+ Subproject:
27
+ - new_task 2 @na
28
+ - new_task @na
29
+ - new_task 2 @na
30
+ Project1:
31
+ - Test4
32
+ - Test5
33
+ - Test6
data/bin/commands/tag.rb CHANGED
@@ -89,10 +89,6 @@ class App
89
89
  end
90
90
  end
91
91
 
92
- if (tokens.nil? || tokens.empty?) && options[:tagged].empty?
93
- NA.notify("#{NA.theme[:error]}Empty input, cancelled", exit_code: 1)
94
- end
95
-
96
92
  all_req = options[:tagged].join(' ') !~ /[+!-]/ && !options[:or]
97
93
  tags = []
98
94
  options[:tagged].join(',').split(/ *, */).each do |arg|
data/bin/commands/undo.rb CHANGED
@@ -6,11 +6,20 @@ class App
6
6
  long_desc 'Run without argument to undo most recent change'
7
7
  arg_name 'FILE', optional: true, multiple: true
8
8
  command %i[undo] do |c|
9
+ c.desc 'Select from available undo files'
10
+ c.switch %i[s select choose]
11
+
9
12
  c.example 'na undo', desc: 'Undo the last change'
10
13
  c.example 'na undo myproject', desc: 'Undo the last change to a file matching "myproject"'
11
14
 
12
15
  c.action do |_global_options, options, args|
13
- if args.empty?
16
+ if options[:select]
17
+ options = IO.read(NA.database_path(file: 'last_modified.txt')).strip.split(/\n/)
18
+ res = NA.choose_from(options, sorted: false)
19
+ NA.notify("#{NA.theme[:error]}Cancelled", exit_code: 1) unless res
20
+
21
+ NA.restore_modified_file(res)
22
+ elsif args.empty?
14
23
  NA.restore_last_modified_file
15
24
  else
16
25
  args.each do |arg|
data/bin/na CHANGED
@@ -87,6 +87,7 @@ class App
87
87
  end
88
88
 
89
89
  pre do |global, _command, _options, _args|
90
+ NA.move_deprecated_backups
90
91
  NA.verbose = global[:debug]
91
92
  NA::Pager.paginate = global[:pager] && $stdout.isatty
92
93
  NA::Color.coloring = global[:color] && $stdout.isatty
data/lib/na/array.rb CHANGED
@@ -12,6 +12,8 @@ class ::Array
12
12
  end
13
13
 
14
14
  def wrap(width, indent, color)
15
+ return map { |l| "#{color} #{l.wrap(width, 2)}" } if width < 60
16
+
15
17
  map! do |l|
16
18
  "#{color}#{' ' * indent }• #{l.wrap(width, indent)}{x}"
17
19
  end
@@ -410,7 +410,6 @@ module NA
410
410
  parent = project.split(%r{[:/]})
411
411
 
412
412
  if NA.global_file
413
- puts NA.global_file
414
413
  if NA.cwd_is == :tag
415
414
  add_tag = [NA.cwd]
416
415
  else
@@ -622,10 +621,7 @@ module NA
622
621
  ## @param search The search
623
622
  ##
624
623
  def last_modified_file(search: nil)
625
- db = database_path(file: 'last_modified.txt')
626
- return nil unless File.exist?(db)
627
-
628
- files = IO.read(db).split(/\n/).map(&:strip)
624
+ files = backup_files
629
625
  files.delete_if { |f| f !~ Regexp.new(search.dir_to_rx(require_last: true)) } if search
630
626
  files.last
631
627
  end
@@ -644,19 +640,72 @@ module NA
644
640
  end
645
641
  end
646
642
 
643
+ ##
644
+ ## Get list of backed up files
645
+ ##
646
+ ## @return [Array] list of file paths
647
+ ##
648
+ def backup_files
649
+ db = database_path(file: 'last_modified.txt')
650
+ NA.notify("#{NA.theme[:error]}Backup database not found", exit_code: 1) unless File.exist?(db)
651
+
652
+ IO.read(db).strip.split(/\n/).map(&:strip)
653
+ end
654
+
655
+ def move_deprecated_backups
656
+ backup_files.each do |file|
657
+ if File.exist?(old_backup_path(file))
658
+ NA.notify("Moving deprecated backup to new backup folder (#{file})", debug: true)
659
+ backup_path(file)
660
+ end
661
+ end
662
+ end
663
+
664
+ def old_backup_path(file)
665
+ File.join(File.dirname(file), ".#{File.basename(file)}.bak")
666
+ end
667
+
668
+ ##
669
+ ## Get the backup file path for a file
670
+ ##
671
+ ## @param file The file
672
+ ##
673
+ def backup_path(file)
674
+ backup_home = File.expand_path('~/.local/share/na/backup')
675
+ backup = old_backup_path(file)
676
+ backup_dir = File.join(backup_home, File.dirname(backup))
677
+ FileUtils.mkdir_p(backup_dir) unless File.directory?(backup_dir)
678
+
679
+ backup_target = File.join(backup_home, backup)
680
+ FileUtils.mv(backup, backup_target) if File.exist?(backup)
681
+ backup_target
682
+ end
683
+
684
+ def weed_modified_files(file = nil)
685
+ files = backup_files
686
+
687
+ files.delete_if { |f| f =~ /#{file}/ } if file
688
+
689
+ files.delete_if { |f| !File.exist?(backup_path(f)) }
690
+
691
+ File.open(database_path(file: 'last_modified.txt'), 'w') { |f| f.puts files.join("\n") }
692
+ end
693
+
647
694
  ##
648
695
  ## Restore a file from backup
649
696
  ##
650
697
  ## @param file The file
651
698
  ##
652
699
  def restore_modified_file(file)
653
- bak_file = File.join(File.dirname(file), ".#{File.basename(file)}.bak")
700
+ bak_file = backup_path(file)
654
701
  if File.exist?(bak_file)
655
702
  FileUtils.mv(bak_file, file)
656
703
  NA.notify("#{NA.theme[:success]}Backup restored for #{file.highlight_filename}")
657
704
  else
658
705
  NA.notify("#{NA.theme[:error]}Backup file for #{file.highlight_filename} not found")
659
706
  end
707
+
708
+ weed_modified_files(file)
660
709
  end
661
710
 
662
711
  ##
@@ -821,11 +870,9 @@ module NA
821
870
  ## @param target [String] The file to back up
822
871
  ##
823
872
  def backup_file(target)
824
- file = ".#{File.basename(target)}.bak"
825
- backup = File.join(File.dirname(target), file)
826
- FileUtils.cp(target, backup)
873
+ FileUtils.cp(target, backup_path(target))
827
874
  save_modified_file(target)
828
- NA.notify("#{NA.theme[:warning]}Backup file created at #{backup.highlight_filename}", debug: true)
875
+ NA.notify("#{NA.theme[:warning]}Backup file created for #{target.highlight_filename}", debug: true)
829
876
  end
830
877
 
831
878
  ##
data/lib/na/string.rb CHANGED
@@ -52,7 +52,7 @@ class ::String
52
52
  prefix = match(/(^[ \t]+)/)
53
53
  return 0 if prefix.nil?
54
54
 
55
- prefix[1].gsub(/ /, "\t").scan(/\t/).count
55
+ prefix[1].gsub(/ /, "\t").scan(/\t/).count
56
56
  end
57
57
 
58
58
  def action?
@@ -149,6 +149,8 @@ class ::String
149
149
  end
150
150
 
151
151
  def wrap(width, indent)
152
+ return "\n#{self}" if width <= 80
153
+
152
154
  output = []
153
155
  line = []
154
156
  length = indent
data/lib/na/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Na
2
- VERSION = '1.2.53'
2
+ VERSION = '1.2.55'
3
3
  end
data/src/_README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  _If you're one of the rare people like me who find this useful, feel free to
10
10
  [buy me some coffee][donate]._
11
11
 
12
- The current version of `na` is <!--VER-->1.2.52<!--END VER-->.
12
+ The current version of `na` is <!--VER-->1.2.54<!--END VER-->.
13
13
 
14
14
  `na` ("next action") is a command line tool designed to make it easy to see what your next actions are for any project, right from the command line. It works with TaskPaper-formatted files (but any plain text format will do), looking for `@na` tags (or whatever you specify) in todo files in your current folder.
15
15
 
data/test2.txt ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ comment: 2023
3
+ keywords:
4
+ ---
5
+
6
+ Inbox:
7
+ - Test @na
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: na
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.53
4
+ version: 1.2.55
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-10 00:00:00.000000000 Z
11
+ date: 2023-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -247,6 +247,7 @@ files:
247
247
  - na.rdoc
248
248
  - scripts/fixreadme.rb
249
249
  - src/_README.md
250
+ - test2.txt
250
251
  homepage: https://brettterpstra.com/projects/na/
251
252
  licenses:
252
253
  - MIT