hyperlist 1.9.2 → 1.9.3

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 (6) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +7 -1
  4. data/hyperlist +42 -26
  5. data/hyperlist.gemspec +1 -1
  6. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb81e544d2363e852a1e29bb1eef3d2fd891e766b2ade2a3e5c56fdc3073302e
4
- data.tar.gz: 14f24e55bfb6f3241ef9120cadcc680971617bfa5378893c3523e4eb1cb1105b
3
+ metadata.gz: 56e8ead48066f1f09b28d2e014b5c8f1bc6576dffda4b45a5975cde75721399a
4
+ data.tar.gz: 8fe7e8ed277872310b4d0230e45e80c7ac886cbb458244ae6016f48858c661d8
5
5
  SHA512:
6
- metadata.gz: 067b8ba96f97768aa5461e2458b7215cf045926875765ac631b450c9a15ed2313ded67f7986163c6fef8c5408dddf0160a10fa7933ffedbe23722822078e9060
7
- data.tar.gz: c10a7a1e147fadd212445b9d5ee7baadada737f53ccc55aa89db86f95f2cb208edf1d56a373020c4ac51c5a898e5c2198cb1458cccbfea36526dff104cfe61a7
6
+ metadata.gz: 11d7b1fce3b5179c2cdf1278deb4e2e0fafb74aa36f77ea8a7dd4ab494b53bc2af79942769390cb82a8d9a392b830947ec5bdd2b991462d27f53a148ff42809c
7
+ data.tar.gz: 36f631cbc904a3fb4fd28b9e3c17cbd83f55054d04e5add1a2d58ba86a092315a42976ed1eddfedd264fe90f5b54a4069f26e2e9bce3faa1959c0bf2082a28c2
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to the HyperList Ruby TUI will be documented in this file.
4
4
 
5
+ ## [1.9.3] - 2025-12-02
6
+
7
+ ### Fixed
8
+ - **Help/documentation viewer navigation**
9
+ - Fixed invisible cursor on blank separator lines in help (?) and documentation (??) viewers
10
+ - Blank lines now contain a space so cursor highlighting is visible when navigating
11
+ - **Presentation mode state preservation**
12
+ - Help, documentation, and recent files viewers now properly save/restore presentation mode state
13
+ - Prevents presentation mode logic from interfering with viewer navigation
14
+
5
15
  ## [1.9.2] - 2025-12-02
6
16
 
7
17
  ### Fixed
data/README.md CHANGED
@@ -29,7 +29,13 @@ For historical context and the original VIM implementation, see: [hyperlist.vim]
29
29
  ### Help Screen
30
30
  ![HyperList Help](img/screenshot_help.png)
31
31
 
32
- ## What's New in v1.9.2
32
+ ## What's New in v1.9.3
33
+
34
+ ### Help Viewer Navigation Fixed
35
+ - Fixed invisible cursor on blank separator lines in help (?) and documentation (??) viewers
36
+ - Presentation mode state now properly preserved when entering/exiting viewers
37
+
38
+ ## Previous Release: v1.9.2
33
39
 
34
40
  ### Presentation Mode Fixed
35
41
  - **Dynamic folding**: Presentation mode now works like hyperlist.vim - folds/unfolds dynamically as you navigate
data/hyperlist CHANGED
@@ -7,7 +7,7 @@
7
7
  # Check for help/version BEFORE loading any libraries
8
8
  if ARGV[0] == '-h' || ARGV[0] == '--help'
9
9
  puts <<~HELP
10
- HyperList v1.9.2 - Terminal User Interface for HyperList files
10
+ HyperList v1.9.3 - Terminal User Interface for HyperList files
11
11
 
12
12
  USAGE
13
13
  hyperlist [OPTIONS] [FILE]
@@ -52,7 +52,7 @@ if ARGV[0] == '-h' || ARGV[0] == '--help'
52
52
  HELP
53
53
  exit 0
54
54
  elsif ARGV[0] == '-v' || ARGV[0] == '--version'
55
- puts "HyperList v1.9.2"
55
+ puts "HyperList v1.9.3"
56
56
  exit 0
57
57
  end
58
58
 
@@ -73,7 +73,7 @@ class HyperListApp
73
73
  include Rcurses::Input
74
74
  include Rcurses::Cursor
75
75
 
76
- VERSION = "1.9.2"
76
+ VERSION = "1.9.3"
77
77
 
78
78
  def initialize(filename = nil)
79
79
  @filename = filename ? File.expand_path(filename) : nil
@@ -596,7 +596,11 @@ class HyperListApp
596
596
  saved_offset = @offset
597
597
  saved_filename = @filename
598
598
  saved_modified = @modified
599
-
599
+ saved_presentation_mode = @presentation_mode
600
+
601
+ # Disable presentation mode for recent files viewer
602
+ @presentation_mode = false
603
+
600
604
  # Create items for recent files display
601
605
  @items = []
602
606
  @items << {"text" => "RECENT FILES (press Enter to open, q to cancel)", "level" => 0, "fold" => false, "raw" => true}
@@ -627,6 +631,7 @@ class HyperListApp
627
631
  @offset = saved_offset
628
632
  @filename = saved_filename
629
633
  @modified = saved_modified
634
+ @presentation_mode = saved_presentation_mode
630
635
  break
631
636
  when "j", "DOWN"
632
637
  move_down if @current < @items.length - 1
@@ -641,9 +646,11 @@ class HyperListApp
641
646
  @offset = saved_offset
642
647
  @filename = saved_filename
643
648
  @modified = saved_modified
649
+ @presentation_mode = saved_presentation_mode
644
650
  @message = "Unsaved changes! Save first before opening another file"
645
651
  break
646
652
  else
653
+ @presentation_mode = saved_presentation_mode
647
654
  @filename = File.expand_path(selected_file)
648
655
  load_file(@filename)
649
656
  @current = 0
@@ -663,9 +670,11 @@ class HyperListApp
663
670
  @offset = saved_offset
664
671
  @filename = saved_filename
665
672
  @modified = saved_modified
673
+ @presentation_mode = saved_presentation_mode
666
674
  @message = "Unsaved changes! Save first before opening another file"
667
675
  break
668
676
  else
677
+ @presentation_mode = saved_presentation_mode
669
678
  @filename = File.expand_path(selected_file)
670
679
  load_file(@filename)
671
680
  @current = 0
@@ -677,7 +686,7 @@ class HyperListApp
677
686
  end
678
687
  end
679
688
  end
680
-
689
+
681
690
  def save_file
682
691
  return unless @filename
683
692
 
@@ -3738,9 +3747,9 @@ class HyperListApp
3738
3747
  # Build help text using consistent formatting
3739
3748
  help_lines = []
3740
3749
  help_lines << " Press #{"?".fg("10")} for full documentation, #{"UP/DOWN".fg("10")} to scroll, or any other key to return"
3741
- help_lines << ""
3750
+ help_lines << " "
3742
3751
  help_lines << "#{"HYPERLIST KEY BINDINGS".b}"
3743
- help_lines << ""
3752
+ help_lines << " "
3744
3753
  help_lines << "#{"NAVIGATION".fg("14")}"
3745
3754
  help_lines << help_line("#{"j/↓".fg("10")}", "Move down", "#{"k/↑".fg("10")}", "Move up")
3746
3755
  help_lines << help_line("#{"h".fg("10")}", "Go to parent", "#{"l".fg("10")}", "Go to first child")
@@ -3749,10 +3758,10 @@ class HyperListApp
3749
3758
  help_lines << help_line("#{"R".fg("10")}", "Jump to reference", "#{"F".fg("10")}", "Open file/URL")
3750
3759
  help_lines << help_line("#{"ma".fg("10")}", "Set mark 'a'", "#{"'a".fg("10")}", "Jump to mark 'a'")
3751
3760
  help_lines << help_line("#{"''".fg("10")}", "Jump to prev position", "#{"N".fg("10")}", "Next = template marker")
3752
- help_lines << ""
3761
+ help_lines << " "
3753
3762
  help_lines << "#{"SEARCH".fg("14")}"
3754
3763
  help_lines << help_line("#{"/".fg("10")}", "Search forward", "#{"n".fg("10")}", "Next match")
3755
- help_lines << ""
3764
+ help_lines << " "
3756
3765
  help_lines << "#{"FOLDING".fg("14")}"
3757
3766
  help_lines << help_line("#{"Space".fg("10")}", "Toggle fold", "#{"za".fg("10")}", "Toggle all folds")
3758
3767
  help_lines << help_line("#{"zo".fg("10")}", "Open fold", "#{"zc".fg("10")}", "Close fold")
@@ -3760,7 +3769,7 @@ class HyperListApp
3760
3769
  help_lines << help_line("#{"1-9".fg("10")}", "Expand to level", "#{"0".fg("10")}", "Multi-digit fold level")
3761
3770
  help_lines << help_line("#{"▶".fg("245")}", "Collapsed (hidden)")
3762
3771
  help_lines << help_line("#{"▷".fg("245")}", "Expanded (visible)")
3763
- help_lines << ""
3772
+ help_lines << " "
3764
3773
  help_lines << "#{"EDITING".fg("14")}"
3765
3774
  help_lines << help_line("#{"i/Enter".fg("10")}", "Edit line", "#{"o".fg("10")}", "Insert line below")
3766
3775
  help_lines << help_line("#{"O".fg("10")}", "Insert line above", "#{"a".fg("10")}", "Insert child")
@@ -3776,7 +3785,7 @@ class HyperListApp
3776
3785
  help_lines << help_line("#{"C-UP".fg("10")}", "Move up in visible list", "#{"C-DOWN".fg("10")}", "Move down in visible list")
3777
3786
  help_lines << help_line("#{"→".fg("10")}", "Uncollapse item", "#{"←".fg("10")}", "Collapse item")
3778
3787
  help_lines << help_line("#{"Tab".fg("10")}", "Indent item+kids", "#{"S-Tab".fg("10")}", "Unindent item+kids")
3779
- help_lines << ""
3788
+ help_lines << " "
3780
3789
  help_lines << "#{"SPECIAL FEATURES".fg("14")}"
3781
3790
  help_lines << help_line("#{"v".fg("10")}", "Toggle checkbox", "#{"V".fg("10")}", "Checkbox with date")
3782
3791
  help_lines << help_line("#{"C-X".fg("10")}", "Remove checkbox", "", "")
@@ -3784,7 +3793,7 @@ class HyperListApp
3784
3793
  help_lines << help_line("#{"C-P".fg("10")}", "Presentation mode", "#{"Tab/S-Tab".fg("10")}", "Next/prev sibling (in P)")
3785
3794
  help_lines << help_line("#{"Ma".fg("10")}", "Record macro 'a'", "#{"@a".fg("10")}", "Play macro 'a'")
3786
3795
  help_lines << help_line("#{"w".fg("10")}", "Switch panes (split view)")
3787
- help_lines << ""
3796
+ help_lines << " "
3788
3797
  help_lines << "#{"FILE OPERATIONS".fg("14")}"
3789
3798
  help_lines << help_line("#{":w".fg("10")}", "Save", "#{":q".fg("10")}", "Quit")
3790
3799
  help_lines << help_line("#{":wq".fg("10")}", "Save and quit", "#{":e file".fg("10")}", "Open file")
@@ -3792,27 +3801,24 @@ class HyperListApp
3792
3801
  help_lines << help_line("#{":graph :g".fg("10")}", "Export to PNG graph", "#{":vsplit :vs".fg("10")}", "Split view")
3793
3802
  help_lines << help_line("#{":as on".fg("10")}", "Enable autosave", "#{":as off".fg("10")}", "Disable autosave")
3794
3803
  help_lines << help_line("#{":as N".fg("10")}", "Set interval (secs)", "#{":as".fg("10")}", "Show autosave status")
3795
- help_lines << ""
3804
+ help_lines << " "
3796
3805
  help_lines << "#{"TAGGING & BATCH OPS".fg("14")}"
3797
3806
  help_lines << help_line("#{"t".fg("10")}", "Tag/untag item", "#{"u".fg("10")}", "Clear all tags")
3798
3807
  help_lines << help_line("#{"C-T".fg("10")}", "Tag by regex pattern", "", "")
3799
3808
  help_lines << help_line("#{"[T:N]".fg("245")}", "Status shows N tagged", "#{"Blue bg".fg("245")}", "Tagged items")
3800
3809
  help_lines << help_line("#{"D/y/Tab".fg("245")}", "Ops work on tagged items")
3801
- help_lines << ""
3802
-
3810
+ help_lines << " "
3803
3811
  help_lines << "#{"TEMPLATES".fg("14")}"
3804
3812
  help_lines << help_line("#{"T".fg("10")}", "Insert template", "#{":st".fg("10")}", "Save as template")
3805
3813
  help_lines << help_line("#{":dt".fg("10")}", "Delete template", "#{":lt".fg("10")}", "List user templates")
3806
- help_lines << ""
3807
-
3814
+ help_lines << " "
3808
3815
  help_lines << "#{"CONFIGURATION".fg("14")}"
3809
3816
  help_lines << help_line("#{":set".fg("10")}", "Show all settings")
3810
- help_lines << help_line("#{":set o".fg("10")}", "Show option value")
3817
+ help_lines << help_line("#{":set o".fg("10")}", "Show option value")
3811
3818
  help_lines << help_line("#{":set o=val".fg("10")}", "Set option value")
3812
3819
  help_lines << help_line("#{"Options:".fg("245")}", "theme, wrap, fold_level")
3813
3820
  help_lines << help_line("#{"".fg("245")}", "show_numbers, tab_width")
3814
- help_lines << ""
3815
-
3821
+ help_lines << " "
3816
3822
  help_lines << "#{"HELP & QUIT".fg("14")}"
3817
3823
  help_lines << help_line("#{"?".fg("10")}", "This help", "#{"??".fg("10")}", "Full documentation")
3818
3824
  help_lines << help_line("#{"q".fg("10")}", "Quit (asks to save)", "#{"Q".fg("10")}", "Force quit")
@@ -3832,13 +3838,17 @@ class HyperListApp
3832
3838
  saved_current = @current
3833
3839
  saved_offset = @offset
3834
3840
  saved_modified = @modified
3835
-
3841
+ saved_presentation_mode = @presentation_mode
3842
+
3843
+ # Disable presentation mode for help viewer
3844
+ @presentation_mode = false
3845
+
3836
3846
  # Create temporary help items for scrolling
3837
3847
  @items = help.split("\n").map { |line| {"text" => line, "level" => 0, "fold" => false, "raw" => true} }
3838
3848
  @current = 0
3839
3849
  @offset = 0
3840
3850
  @modified = false
3841
-
3851
+
3842
3852
  # Help viewer loop
3843
3853
  loop do
3844
3854
  render_main
@@ -3880,8 +3890,9 @@ class HyperListApp
3880
3890
  @current = saved_current
3881
3891
  @offset = saved_offset
3882
3892
  @modified = saved_modified
3893
+ @presentation_mode = saved_presentation_mode
3883
3894
  end
3884
-
3895
+
3885
3896
  def show_documentation
3886
3897
  doc = <<~DOC
3887
3898
 
@@ -4360,13 +4371,17 @@ class HyperListApp
4360
4371
  saved_offset = @offset
4361
4372
  saved_filename = @filename
4362
4373
  saved_modified = @modified
4363
-
4374
+ saved_presentation_mode = @presentation_mode
4375
+
4376
+ # Disable presentation mode for documentation viewer
4377
+ @presentation_mode = false
4378
+
4364
4379
  # Create temporary documentation items
4365
4380
  @items = doc.split("\n").map { |line| {"text" => line, "level" => 0, "fold" => false, "raw" => true} }
4366
4381
  @current = 0
4367
4382
  @offset = 0
4368
4383
  @modified = false
4369
-
4384
+
4370
4385
  # Documentation viewer loop
4371
4386
  loop do
4372
4387
  render_main
@@ -4413,8 +4428,9 @@ class HyperListApp
4413
4428
  @offset = saved_offset
4414
4429
  @filename = saved_filename
4415
4430
  @modified = saved_modified
4431
+ @presentation_mode = saved_presentation_mode
4416
4432
  end
4417
-
4433
+
4418
4434
  def handle_command
4419
4435
  @mode = :command
4420
4436
  # Set command history (reversed for proper UP arrow navigation)
data/hyperlist.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "hyperlist"
3
- spec.version = "1.9.2"
3
+ spec.version = "1.9.3"
4
4
  spec.authors = ["Geir Isene"]
5
5
  spec.email = ["g@isene.com"]
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperlist
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.2
4
+ version: 1.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geir Isene