hyperlist 1.9.3 → 1.9.4

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: 56e8ead48066f1f09b28d2e014b5c8f1bc6576dffda4b45a5975cde75721399a
4
- data.tar.gz: 8fe7e8ed277872310b4d0230e45e80c7ac886cbb458244ae6016f48858c661d8
3
+ metadata.gz: 95521b846e9a01532da324a8b30dc47fda580098da9aab02dd611e6c70db018d
4
+ data.tar.gz: 6f6e2a7d77fd3c4e59059537c7ae3c4bcea323d60c8e55e80581ac2bd02f91f7
5
5
  SHA512:
6
- metadata.gz: 11d7b1fce3b5179c2cdf1278deb4e2e0fafb74aa36f77ea8a7dd4ab494b53bc2af79942769390cb82a8d9a392b830947ec5bdd2b991462d27f53a148ff42809c
7
- data.tar.gz: 36f631cbc904a3fb4fd28b9e3c17cbd83f55054d04e5add1a2d58ba86a092315a42976ed1eddfedd264fe90f5b54a4069f26e2e9bce3faa1959c0bf2082a28c2
6
+ metadata.gz: abe4b54cf8fb93e73af0e13c3cc3c2810ba770928791db82dac967c5ec76ccf285300c145f87b946a2026880b91faf5800ff86cbbcaa08ac450e4ed241a81a95
7
+ data.tar.gz: 5ecc3c0946cfb672814c6ced81cbd1cbd055127c7e6a2aed89a5885af33fa07d5aab93b4a3689311da061a0cba7d74781263aae5a20db3d76d64565c8b969b22
data/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  All notable changes to the HyperList Ruby TUI will be documented in this file.
4
4
 
5
+ ## [1.9.4] - 2025-12-02
6
+
7
+ ### Enhanced
8
+ - **Property coloring improvements**
9
+ - Added `&` symbol support in properties (e.g., "Day 1 & 2:" now colors correctly)
10
+ - Added chained property support (e.g., "09.03: Silje:" now colors the entire chain red)
11
+
12
+ ### Fixed
13
+ - **Performance optimization**
14
+ - Throttled external file change detection to run every 2 seconds instead of on every keypress
15
+ - Improves responsiveness when holding navigation keys (UP/DOWN)
16
+
5
17
  ## [1.9.3] - 2025-12-02
6
18
 
7
19
  ### Fixed
data/README.md CHANGED
@@ -29,7 +29,17 @@ 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.3
32
+ ## What's New in v1.9.4
33
+
34
+ ### Property Coloring Improvements
35
+ - **Ampersand support**: Properties like "Day 1 & 2:" now color correctly
36
+ - **Chained properties**: Lines like "09.03: Silje: Opening" now color the entire "09.03: Silje:" chain red
37
+
38
+ ### Performance Optimization
39
+ - **Faster navigation**: File change detection now runs every 2 seconds instead of on every keypress
40
+ - Improved responsiveness when holding DOWN/UP keys
41
+
42
+ ## Previous Release: v1.9.3
33
43
 
34
44
  ### Help Viewer Navigation Fixed
35
45
  - Fixed invisible cursor on blank separator lines in help (?) and documentation (??) viewers
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.3 - Terminal User Interface for HyperList files
10
+ HyperList v1.9.4 - 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.3"
55
+ puts "HyperList v1.9.4"
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.3"
76
+ VERSION = "1.9.4"
77
77
 
78
78
  def initialize(filename = nil)
79
79
  @filename = filename ? File.expand_path(filename) : nil
@@ -538,9 +538,16 @@ class HyperListApp
538
538
  end
539
539
 
540
540
  # Check if file was modified externally and prompt for reload
541
+ # Throttled to only check every 2 seconds to avoid filesystem I/O on every keypress
541
542
  def check_file_changed
542
543
  return unless @filename && File.exist?(@filename) && @file_mtime
543
544
 
545
+ # Throttle: only check every 2 seconds
546
+ now = Time.now
547
+ @last_file_check ||= Time.at(0)
548
+ return if (now - @last_file_check) < 2
549
+ @last_file_check = now
550
+
544
551
  current_mtime = File.mtime(@filename) rescue nil
545
552
  return unless current_mtime && current_mtime > @file_mtime
546
553
 
@@ -1619,18 +1626,35 @@ class HyperListApp
1619
1626
  "#{$1}:".fg(colors["red"]) # Red for timestamp properties
1620
1627
  end
1621
1628
 
1622
- # Handle operators and properties with colon pattern
1629
+ # Handle chained properties first (e.g., "09.03: Silje: Opening")
1630
+ # Match sequences of "word: word: word:" at the start of a line, color all red
1631
+ result = safe_regex_replace(result, /^(\s*)((?:[a-zA-Z0-9][a-zA-Z0-9_\-()& .\/=]*:\s*)+)/) do |match|
1632
+ if match =~ /^(\s*)((?:[a-zA-Z0-9][a-zA-Z0-9_\-()& .\/=]*:\s*)+)/
1633
+ prefix = $1 || ""
1634
+ chain = $2
1635
+ # Check if this is an operator (ALL-CAPS only)
1636
+ if chain =~ /^[A-Z][A-Z_\-() \/=]*:\s*$/
1637
+ prefix + chain.fg(colors["blue"]) # Blue for operators
1638
+ else
1639
+ prefix + chain.fg(colors["red"]) # Red for property chains
1640
+ end
1641
+ else
1642
+ match
1643
+ end
1644
+ end
1645
+
1646
+ # Handle operators and properties with colon pattern (for inline occurrences)
1623
1647
  # Operators: ALL-CAPS followed by colon (with or without space)
1624
1648
  # Properties: Mixed case followed by colon and space
1625
1649
  # Modified pattern to also match after ANSI placeholders (⟨ANSI\d+⟩)
1626
- result = safe_regex_replace(result, /(\A|\s+|⟨ANSI\d+⟩)([a-zA-Z][a-zA-Z0-9_\-() .\/=]*):(\s*)/) do |match|
1650
+ result = safe_regex_replace(result, /(\s+|⟨ANSI\d+⟩)([a-zA-Z][a-zA-Z0-9_\-()& .\/=]*):(\s*)/) do |match|
1627
1651
  # Extract parts from the match
1628
- if match =~ /(\A|\s+|⟨ANSI\d+⟩)([a-zA-Z][a-zA-Z0-9_\-() .\/=]*):(\s*)/
1652
+ if match =~ /(\s+|⟨ANSI\d+⟩)([a-zA-Z][a-zA-Z0-9_\-()& .\/=]*):(\s*)/
1629
1653
  prefix_space = $1
1630
1654
  text_part = $2
1631
1655
  space_after = $3 || ""
1632
1656
  colon_space = ":#{space_after}"
1633
-
1657
+
1634
1658
  # Check if it's an operator (ALL-CAPS with optional _, -, (), /, =, spaces)
1635
1659
  if text_part =~ /^[A-Z][A-Z_\-() \/=]*$/
1636
1660
  prefix_space + text_part.fg(colors["blue"]) + colon_space.fg(colors["blue"]) # Blue for operators (including S: and T:)
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.3"
3
+ spec.version = "1.9.4"
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.3
4
+ version: 1.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geir Isene
@@ -70,6 +70,7 @@ extensions: []
70
70
  extra_rdoc_files: []
71
71
  files:
72
72
  - "./hyperlist"
73
+ - ".claude/tsc-cache/ae1f6800-54bf-4599-aee8-058bd15a57a3/affected-repos.txt"
73
74
  - CHANGELOG.md
74
75
  - LICENSE
75
76
  - README.md