hyperlist 1.9.1 → 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 +19 -0
  3. data/README.md +14 -1
  4. data/hyperlist +118 -108
  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: 485f51c3f998ca45514979e831f928a2ca907674483ba1ceef644ce6db22423e
4
- data.tar.gz: ca21fe8db31f2b1ac1a1e8059c92f94dbc17a8d42790247238f8073c77ef973d
3
+ metadata.gz: 56e8ead48066f1f09b28d2e014b5c8f1bc6576dffda4b45a5975cde75721399a
4
+ data.tar.gz: 8fe7e8ed277872310b4d0230e45e80c7ac886cbb458244ae6016f48858c661d8
5
5
  SHA512:
6
- metadata.gz: d40e130fbff4cb2564f8a9c541257cd084072f1917067d529a86427c63b0e3716b7a6704f584cf64dc3e204fd0c63a71a20443f3bcef99bc5377bb43c657b7f3
7
- data.tar.gz: 5e6a7cdf9f8b2fb7e93382e41ba8d6e2e39d0403a0e64480d763d8385f5e4d7320684ea4b1fd7503d5a4ed08fe515d5176a04d8ab8723f9e43b7ab9d04a9e2b8
6
+ metadata.gz: 11d7b1fce3b5179c2cdf1278deb4e2e0fafb74aa36f77ea8a7dd4ab494b53bc2af79942769390cb82a8d9a392b830947ec5bdd2b991462d27f53a148ff42809c
7
+ data.tar.gz: 36f631cbc904a3fb4fd28b9e3c17cbd83f55054d04e5add1a2d58ba86a092315a42976ed1eddfedd264fe90f5b54a4069f26e2e9bce3faa1959c0bf2082a28c2
data/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
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
+
15
+ ## [1.9.2] - 2025-12-02
16
+
17
+ ### Fixed
18
+ - **Presentation mode completely rewritten**
19
+ - Now dynamically folds/unfolds as you navigate (like hyperlist.vim)
20
+ - Entering presentation mode (C-P) now stays on the current item instead of jumping to the first line
21
+ - Moving up/down properly reveals the path to the current item while folding everything else
22
+ - Uses proper item tracking via real indices to handle fold state changes correctly
23
+
5
24
  ## [1.9.1] - 2025-12-02
6
25
 
7
26
  ### Added
data/README.md CHANGED
@@ -29,7 +29,20 @@ 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.1
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
39
+
40
+ ### Presentation Mode Fixed
41
+ - **Dynamic folding**: Presentation mode now works like hyperlist.vim - folds/unfolds dynamically as you navigate
42
+ - **Cursor preservation**: Entering presentation mode (C-P) stays on the current item instead of jumping to the first line
43
+ - **Proper navigation**: Moving up/down reveals the path to the current item while folding everything else
44
+
45
+ ## Previous Release: v1.9.1
33
46
 
34
47
  ### External File Change Detection
35
48
  - **Auto-detect external changes**: HyperList now monitors when the file is modified by other processes (vim, another Claude Code session, etc.)
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.1 - 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.1"
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.1"
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
 
@@ -2043,28 +2052,28 @@ class HyperListApp
2043
2052
 
2044
2053
  def move_up
2045
2054
  if @presentation_mode
2046
- # In presentation mode, we need to handle navigation differently
2047
- visible_before = get_visible_items
2048
-
2055
+ # In presentation mode: move to target, then update folds
2056
+ visible = get_visible_items
2057
+ return if visible.empty?
2058
+
2059
+ # Calculate target position
2049
2060
  if @current == 0
2050
- # Wrap around to last item
2051
- target_index = visible_before.length - 1
2061
+ target_index = visible.length - 1
2052
2062
  else
2053
2063
  target_index = @current - 1
2054
2064
  end
2055
-
2056
- # Get the actual item we want to move to
2057
- target_item = visible_before[target_index]
2058
- target_real_idx = get_real_index(target_item)
2059
-
2060
- # Update presentation focus for the target item
2065
+
2066
+ # Get the real index of the target item
2067
+ target_real_idx = get_real_index(visible[target_index])
2068
+
2069
+ # Temporarily set current to target so update_presentation_focus works on it
2061
2070
  @current = target_index
2062
2071
  update_presentation_focus
2063
-
2064
- # Now find where the target item ended up after reorganization
2065
- visible_after = get_visible_items
2066
- visible_after.each_with_index do |item, idx|
2067
- if get_real_index(item) == target_real_idx
2072
+
2073
+ # After fold changes, find where the target item is now
2074
+ new_visible = get_visible_items
2075
+ new_visible.each_with_index do |item, idx|
2076
+ if item["_real_index"] == target_real_idx
2068
2077
  @current = idx
2069
2078
  break
2070
2079
  end
@@ -2072,9 +2081,8 @@ class HyperListApp
2072
2081
  else
2073
2082
  # Normal mode navigation
2074
2083
  max_items = get_visible_items.length - 1
2075
-
2084
+
2076
2085
  if @current == 0
2077
- # Wrap around to last item
2078
2086
  @current = max_items
2079
2087
  else
2080
2088
  @current = [@current - 1, 0].max
@@ -2084,29 +2092,29 @@ class HyperListApp
2084
2092
 
2085
2093
  def move_down
2086
2094
  if @presentation_mode
2087
- # In presentation mode, we need to handle navigation differently
2088
- visible_before = get_visible_items
2089
- max = visible_before.length - 1
2090
-
2091
- if @current == max
2092
- # Wrap around to first item
2095
+ # In presentation mode: move to target, then update folds
2096
+ visible = get_visible_items
2097
+ return if visible.empty?
2098
+ max = visible.length - 1
2099
+
2100
+ # Calculate target position
2101
+ if @current >= max
2093
2102
  target_index = 0
2094
2103
  else
2095
2104
  target_index = @current + 1
2096
2105
  end
2097
-
2098
- # Get the actual item we want to move to
2099
- target_item = visible_before[target_index]
2100
- target_real_idx = get_real_index(target_item)
2101
-
2102
- # Update presentation focus for the target item
2106
+
2107
+ # Get the real index of the target item
2108
+ target_real_idx = get_real_index(visible[target_index])
2109
+
2110
+ # Temporarily set current to target so update_presentation_focus works on it
2103
2111
  @current = target_index
2104
2112
  update_presentation_focus
2105
-
2106
- # Now find where the target item ended up after reorganization
2107
- visible_after = get_visible_items
2108
- visible_after.each_with_index do |item, idx|
2109
- if get_real_index(item) == target_real_idx
2113
+
2114
+ # After fold changes, find where the target item is now
2115
+ new_visible = get_visible_items
2116
+ new_visible.each_with_index do |item, idx|
2117
+ if item["_real_index"] == target_real_idx
2110
2118
  @current = idx
2111
2119
  break
2112
2120
  end
@@ -2114,9 +2122,8 @@ class HyperListApp
2114
2122
  else
2115
2123
  # Normal mode navigation
2116
2124
  max = get_visible_items.length - 1
2117
-
2118
- if @current == max
2119
- # Wrap around to first item
2125
+
2126
+ if @current >= max
2120
2127
  @current = 0
2121
2128
  else
2122
2129
  @current = [@current + 1, max].min
@@ -2345,84 +2352,80 @@ class HyperListApp
2345
2352
  # Enter presentation mode
2346
2353
  # Remember which item we're on before any folding changes
2347
2354
  visible_items = get_visible_items
2348
- if @current < visible_items.length
2349
- target_item = visible_items[@current]
2350
- end
2351
-
2355
+ return if visible_items.empty? || @current >= visible_items.length
2356
+
2357
+ # Get the real index of the current item
2358
+ target_real_idx = visible_items[@current]["_real_index"]
2359
+
2352
2360
  @presentation_mode = true
2353
- # Clear cache to force re-rendering
2361
+ # Clear cache to force re-rendering
2354
2362
  @processed_cache.clear
2355
2363
  update_presentation_focus
2356
-
2357
- # Make sure cursor is still on the same item after initial folding
2358
- if target_item
2359
- new_visible = get_visible_items
2360
- new_position = new_visible.index(target_item)
2361
- @current = new_position if new_position
2364
+
2365
+ # Find where the target item is after fold changes
2366
+ new_visible = get_visible_items
2367
+ new_visible.each_with_index do |item, idx|
2368
+ if item["_real_index"] == target_real_idx
2369
+ @current = idx
2370
+ break
2371
+ end
2362
2372
  end
2363
-
2364
- @message = "Presentation mode enabled - focus on current item"
2373
+
2374
+ @message = "Presentation mode enabled"
2365
2375
  end
2366
2376
  end
2367
2377
 
2368
2378
  def update_presentation_focus
2369
- # This method updates the focus in presentation mode
2370
- # It will be called whenever the cursor moves
2379
+ # Presentation mode: fold everything, then reveal path to current item
2380
+ # Like vim's: fold to level 0, then zv (reveal current line)
2371
2381
  return unless @presentation_mode
2372
-
2382
+
2373
2383
  visible_items = get_visible_items
2374
2384
  return if visible_items.empty? || @current >= visible_items.length
2375
-
2376
- # Remember which item we're focused on
2385
+
2386
+ # Get the current item before we change anything
2377
2387
  current_item = visible_items[@current]
2378
- current_level = current_item["level"]
2379
2388
  current_real_idx = get_real_index(current_item)
2380
-
2381
- # First, fold everything
2389
+ return unless current_real_idx
2390
+
2391
+ current_level = current_item["level"]
2392
+
2393
+ # Step 1: Fold everything that has children
2382
2394
  @items.each_with_index do |item, idx|
2383
2395
  item["fold"] = has_children?(idx, @items)
2384
2396
  item["presentation_focus"] = false
2385
2397
  end
2386
-
2387
- # Mark current item as in focus and unfold it in the main items array
2388
- if current_real_idx && current_real_idx < @items.length
2389
- @items[current_real_idx]["presentation_focus"] = true
2390
- @items[current_real_idx]["fold"] = false
2391
- end
2392
-
2393
- # Unfold all ancestors of current item
2394
- ancestor_indices = []
2398
+
2399
+ # Step 2: Unfold all ancestors (path from root to current item)
2395
2400
  search_level = current_level - 1
2396
2401
  idx = current_real_idx - 1
2397
-
2398
2402
  while idx >= 0 && search_level >= 0
2399
2403
  if @items[idx]["level"] == search_level
2400
- @items[idx]["fold"] = false
2401
- @items[idx]["presentation_focus"] = false # Ancestors visible but not focused
2402
- ancestor_indices << idx
2404
+ @items[idx]["fold"] = false # Unfold this ancestor
2403
2405
  search_level -= 1
2404
2406
  end
2405
2407
  idx -= 1
2406
2408
  end
2407
-
2408
- # Mark immediate children as in focus (only one level down)
2409
+
2410
+ # Step 3: Unfold the current item to show its direct children
2411
+ @items[current_real_idx]["fold"] = false
2412
+ @items[current_real_idx]["presentation_focus"] = true
2413
+
2414
+ # Step 4: Mark direct children as in focus (for visual highlighting)
2409
2415
  idx = current_real_idx + 1
2410
2416
  while idx < @items.length && @items[idx]["level"] > current_level
2411
2417
  if @items[idx]["level"] == current_level + 1
2412
2418
  @items[idx]["presentation_focus"] = true
2413
- # Don't unfold children - let them stay folded unless user explicitly unfolds
2414
2419
  end
2415
2420
  idx += 1
2416
2421
  end
2417
-
2418
- # Now recalculate the cursor position to point to the same item
2422
+
2423
+ # Step 5: Recalculate cursor position after fold changes
2419
2424
  new_visible_items = get_visible_items
2420
2425
  new_position = new_visible_items.index(current_item)
2421
- if new_position
2422
- @current = new_position
2423
- end
2424
-
2425
- # Clear cache to force re-rendering with new focus
2426
+ @current = new_position if new_position
2427
+
2428
+ # Clear cache to force re-rendering
2426
2429
  @processed_cache.clear
2427
2430
  end
2428
2431
 
@@ -3744,9 +3747,9 @@ class HyperListApp
3744
3747
  # Build help text using consistent formatting
3745
3748
  help_lines = []
3746
3749
  help_lines << " Press #{"?".fg("10")} for full documentation, #{"UP/DOWN".fg("10")} to scroll, or any other key to return"
3747
- help_lines << ""
3750
+ help_lines << " "
3748
3751
  help_lines << "#{"HYPERLIST KEY BINDINGS".b}"
3749
- help_lines << ""
3752
+ help_lines << " "
3750
3753
  help_lines << "#{"NAVIGATION".fg("14")}"
3751
3754
  help_lines << help_line("#{"j/↓".fg("10")}", "Move down", "#{"k/↑".fg("10")}", "Move up")
3752
3755
  help_lines << help_line("#{"h".fg("10")}", "Go to parent", "#{"l".fg("10")}", "Go to first child")
@@ -3755,10 +3758,10 @@ class HyperListApp
3755
3758
  help_lines << help_line("#{"R".fg("10")}", "Jump to reference", "#{"F".fg("10")}", "Open file/URL")
3756
3759
  help_lines << help_line("#{"ma".fg("10")}", "Set mark 'a'", "#{"'a".fg("10")}", "Jump to mark 'a'")
3757
3760
  help_lines << help_line("#{"''".fg("10")}", "Jump to prev position", "#{"N".fg("10")}", "Next = template marker")
3758
- help_lines << ""
3761
+ help_lines << " "
3759
3762
  help_lines << "#{"SEARCH".fg("14")}"
3760
3763
  help_lines << help_line("#{"/".fg("10")}", "Search forward", "#{"n".fg("10")}", "Next match")
3761
- help_lines << ""
3764
+ help_lines << " "
3762
3765
  help_lines << "#{"FOLDING".fg("14")}"
3763
3766
  help_lines << help_line("#{"Space".fg("10")}", "Toggle fold", "#{"za".fg("10")}", "Toggle all folds")
3764
3767
  help_lines << help_line("#{"zo".fg("10")}", "Open fold", "#{"zc".fg("10")}", "Close fold")
@@ -3766,7 +3769,7 @@ class HyperListApp
3766
3769
  help_lines << help_line("#{"1-9".fg("10")}", "Expand to level", "#{"0".fg("10")}", "Multi-digit fold level")
3767
3770
  help_lines << help_line("#{"▶".fg("245")}", "Collapsed (hidden)")
3768
3771
  help_lines << help_line("#{"▷".fg("245")}", "Expanded (visible)")
3769
- help_lines << ""
3772
+ help_lines << " "
3770
3773
  help_lines << "#{"EDITING".fg("14")}"
3771
3774
  help_lines << help_line("#{"i/Enter".fg("10")}", "Edit line", "#{"o".fg("10")}", "Insert line below")
3772
3775
  help_lines << help_line("#{"O".fg("10")}", "Insert line above", "#{"a".fg("10")}", "Insert child")
@@ -3782,7 +3785,7 @@ class HyperListApp
3782
3785
  help_lines << help_line("#{"C-UP".fg("10")}", "Move up in visible list", "#{"C-DOWN".fg("10")}", "Move down in visible list")
3783
3786
  help_lines << help_line("#{"→".fg("10")}", "Uncollapse item", "#{"←".fg("10")}", "Collapse item")
3784
3787
  help_lines << help_line("#{"Tab".fg("10")}", "Indent item+kids", "#{"S-Tab".fg("10")}", "Unindent item+kids")
3785
- help_lines << ""
3788
+ help_lines << " "
3786
3789
  help_lines << "#{"SPECIAL FEATURES".fg("14")}"
3787
3790
  help_lines << help_line("#{"v".fg("10")}", "Toggle checkbox", "#{"V".fg("10")}", "Checkbox with date")
3788
3791
  help_lines << help_line("#{"C-X".fg("10")}", "Remove checkbox", "", "")
@@ -3790,7 +3793,7 @@ class HyperListApp
3790
3793
  help_lines << help_line("#{"C-P".fg("10")}", "Presentation mode", "#{"Tab/S-Tab".fg("10")}", "Next/prev sibling (in P)")
3791
3794
  help_lines << help_line("#{"Ma".fg("10")}", "Record macro 'a'", "#{"@a".fg("10")}", "Play macro 'a'")
3792
3795
  help_lines << help_line("#{"w".fg("10")}", "Switch panes (split view)")
3793
- help_lines << ""
3796
+ help_lines << " "
3794
3797
  help_lines << "#{"FILE OPERATIONS".fg("14")}"
3795
3798
  help_lines << help_line("#{":w".fg("10")}", "Save", "#{":q".fg("10")}", "Quit")
3796
3799
  help_lines << help_line("#{":wq".fg("10")}", "Save and quit", "#{":e file".fg("10")}", "Open file")
@@ -3798,27 +3801,24 @@ class HyperListApp
3798
3801
  help_lines << help_line("#{":graph :g".fg("10")}", "Export to PNG graph", "#{":vsplit :vs".fg("10")}", "Split view")
3799
3802
  help_lines << help_line("#{":as on".fg("10")}", "Enable autosave", "#{":as off".fg("10")}", "Disable autosave")
3800
3803
  help_lines << help_line("#{":as N".fg("10")}", "Set interval (secs)", "#{":as".fg("10")}", "Show autosave status")
3801
- help_lines << ""
3804
+ help_lines << " "
3802
3805
  help_lines << "#{"TAGGING & BATCH OPS".fg("14")}"
3803
3806
  help_lines << help_line("#{"t".fg("10")}", "Tag/untag item", "#{"u".fg("10")}", "Clear all tags")
3804
3807
  help_lines << help_line("#{"C-T".fg("10")}", "Tag by regex pattern", "", "")
3805
3808
  help_lines << help_line("#{"[T:N]".fg("245")}", "Status shows N tagged", "#{"Blue bg".fg("245")}", "Tagged items")
3806
3809
  help_lines << help_line("#{"D/y/Tab".fg("245")}", "Ops work on tagged items")
3807
- help_lines << ""
3808
-
3810
+ help_lines << " "
3809
3811
  help_lines << "#{"TEMPLATES".fg("14")}"
3810
3812
  help_lines << help_line("#{"T".fg("10")}", "Insert template", "#{":st".fg("10")}", "Save as template")
3811
3813
  help_lines << help_line("#{":dt".fg("10")}", "Delete template", "#{":lt".fg("10")}", "List user templates")
3812
- help_lines << ""
3813
-
3814
+ help_lines << " "
3814
3815
  help_lines << "#{"CONFIGURATION".fg("14")}"
3815
3816
  help_lines << help_line("#{":set".fg("10")}", "Show all settings")
3816
- help_lines << help_line("#{":set o".fg("10")}", "Show option value")
3817
+ help_lines << help_line("#{":set o".fg("10")}", "Show option value")
3817
3818
  help_lines << help_line("#{":set o=val".fg("10")}", "Set option value")
3818
3819
  help_lines << help_line("#{"Options:".fg("245")}", "theme, wrap, fold_level")
3819
3820
  help_lines << help_line("#{"".fg("245")}", "show_numbers, tab_width")
3820
- help_lines << ""
3821
-
3821
+ help_lines << " "
3822
3822
  help_lines << "#{"HELP & QUIT".fg("14")}"
3823
3823
  help_lines << help_line("#{"?".fg("10")}", "This help", "#{"??".fg("10")}", "Full documentation")
3824
3824
  help_lines << help_line("#{"q".fg("10")}", "Quit (asks to save)", "#{"Q".fg("10")}", "Force quit")
@@ -3838,13 +3838,17 @@ class HyperListApp
3838
3838
  saved_current = @current
3839
3839
  saved_offset = @offset
3840
3840
  saved_modified = @modified
3841
-
3841
+ saved_presentation_mode = @presentation_mode
3842
+
3843
+ # Disable presentation mode for help viewer
3844
+ @presentation_mode = false
3845
+
3842
3846
  # Create temporary help items for scrolling
3843
3847
  @items = help.split("\n").map { |line| {"text" => line, "level" => 0, "fold" => false, "raw" => true} }
3844
3848
  @current = 0
3845
3849
  @offset = 0
3846
3850
  @modified = false
3847
-
3851
+
3848
3852
  # Help viewer loop
3849
3853
  loop do
3850
3854
  render_main
@@ -3886,8 +3890,9 @@ class HyperListApp
3886
3890
  @current = saved_current
3887
3891
  @offset = saved_offset
3888
3892
  @modified = saved_modified
3893
+ @presentation_mode = saved_presentation_mode
3889
3894
  end
3890
-
3895
+
3891
3896
  def show_documentation
3892
3897
  doc = <<~DOC
3893
3898
 
@@ -4366,13 +4371,17 @@ class HyperListApp
4366
4371
  saved_offset = @offset
4367
4372
  saved_filename = @filename
4368
4373
  saved_modified = @modified
4369
-
4374
+ saved_presentation_mode = @presentation_mode
4375
+
4376
+ # Disable presentation mode for documentation viewer
4377
+ @presentation_mode = false
4378
+
4370
4379
  # Create temporary documentation items
4371
4380
  @items = doc.split("\n").map { |line| {"text" => line, "level" => 0, "fold" => false, "raw" => true} }
4372
4381
  @current = 0
4373
4382
  @offset = 0
4374
4383
  @modified = false
4375
-
4384
+
4376
4385
  # Documentation viewer loop
4377
4386
  loop do
4378
4387
  render_main
@@ -4419,8 +4428,9 @@ class HyperListApp
4419
4428
  @offset = saved_offset
4420
4429
  @filename = saved_filename
4421
4430
  @modified = saved_modified
4431
+ @presentation_mode = saved_presentation_mode
4422
4432
  end
4423
-
4433
+
4424
4434
  def handle_command
4425
4435
  @mode = :command
4426
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.1"
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.1
4
+ version: 1.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geir Isene