hyperlist 1.9.5 → 1.10.0
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 +4 -4
- data/CHANGELOG.md +31 -0
- data/hyperlist +51 -36
- data/hyperlist.gemspec +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b8d42e5386dc58dbdc20cd58047ccb03bbcb29d56980770a40a076a540a507cc
|
|
4
|
+
data.tar.gz: 7afd2752e67c25575a5b3e76b7d567eab6d4520dfb322049b5b21f099e24d7ce
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 731e6c85e60c11b12e2d6b57769c49ca64c40a7250280548a43adcd82bab9a4e18d5cf3048c5e5a81955f16b919e287efb9e64b00c99925539326b578576bd60
|
|
7
|
+
data.tar.gz: fd2ed40ca6aacf449f154c821774af8009b02cfbcbf0c387e27d547994274bfc490835973e01082c4ca3029171720fe4cd32d0105aa2b834964df7bf2a6c8051
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the HyperList Ruby TUI will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.10.0] - 2026-08-11
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- HyperList definition v2.8: `+` and `-` are Neutral Starters marking where
|
|
9
|
+
an Item begins, carrying no further meaning. A Starter is required only on
|
|
10
|
+
an Item that spans more than one line, and its following lines are now
|
|
11
|
+
indented two spaces beyond the Item's own indent rather than one. The rule
|
|
12
|
+
forcing every sibling at the same indent to carry a Starter has been
|
|
13
|
+
dropped. Built-in syntax reference and embedded self-definition updated.
|
|
14
|
+
|
|
15
|
+
## [1.9.7] - 2026-08-10
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- HyperList definition v2.7: the `[?!]` fallback Qualifier, read as
|
|
19
|
+
"otherwise". Applies when no preceding sibling Qualifier at the same
|
|
20
|
+
indent did, so a fallback binds to the Items above it instead of
|
|
21
|
+
restating the condition negated. Added to the built-in syntax
|
|
22
|
+
reference and the embedded self-definition.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- Graphviz export treated `[?!]` as an ordinary condition and emitted
|
|
26
|
+
`tooltip="Condition: ?!"`. It now renders as a dashed diamond with no
|
|
27
|
+
tooltip, since a fallback is not a condition.
|
|
28
|
+
|
|
29
|
+
## [1.9.6] - 2026-05-11
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- Rename rcurses string-styling methods to match rcurses 7.0.0:
|
|
33
|
+
`.b → .bd`, `.i → .it`, `.u → .ul`. Without this, HyperList crashed
|
|
34
|
+
on first render against rcurses 7+. Fixes #1.
|
|
35
|
+
|
|
5
36
|
## [1.9.4] - 2025-12-02
|
|
6
37
|
|
|
7
38
|
### Enhanced
|
data/hyperlist
CHANGED
|
@@ -73,7 +73,7 @@ class HyperListApp
|
|
|
73
73
|
include Rcurses::Input
|
|
74
74
|
include Rcurses::Cursor
|
|
75
75
|
|
|
76
|
-
VERSION = "1.
|
|
76
|
+
VERSION = "1.10.0"
|
|
77
77
|
|
|
78
78
|
def initialize(filename = nil)
|
|
79
79
|
@filename = filename ? File.expand_path(filename) : nil
|
|
@@ -1207,7 +1207,7 @@ class HyperListApp
|
|
|
1207
1207
|
|
|
1208
1208
|
def wrap_line(text, width, indent_level)
|
|
1209
1209
|
# Wrap a line per HyperList spec:
|
|
1210
|
-
# Multi-line items start with '+'
|
|
1210
|
+
# Multi-line items start with a Neutral Starter ('+' or '-')
|
|
1211
1211
|
# Continuation lines have just a space prefix
|
|
1212
1212
|
return [text] unless @wrap
|
|
1213
1213
|
|
|
@@ -1514,7 +1514,7 @@ class HyperListApp
|
|
|
1514
1514
|
marker = $2
|
|
1515
1515
|
content = $3 || ""
|
|
1516
1516
|
# Apply underline to content after the marker
|
|
1517
|
-
result = prefix + marker + content.
|
|
1517
|
+
result = prefix + marker + content.ul
|
|
1518
1518
|
end
|
|
1519
1519
|
elsif @st_underline_mode == 2
|
|
1520
1520
|
# Underline transitions
|
|
@@ -1523,7 +1523,7 @@ class HyperListApp
|
|
|
1523
1523
|
marker = $2
|
|
1524
1524
|
content = $3 || ""
|
|
1525
1525
|
# Apply underline to content after the marker
|
|
1526
|
-
result = prefix + marker + content.
|
|
1526
|
+
result = prefix + marker + content.ul
|
|
1527
1527
|
end
|
|
1528
1528
|
end
|
|
1529
1529
|
|
|
@@ -1596,7 +1596,7 @@ class HyperListApp
|
|
|
1596
1596
|
processed_checkbox = true
|
|
1597
1597
|
elsif result =~ /^(\s*)(\[O\])/
|
|
1598
1598
|
spaces = $1
|
|
1599
|
-
colored = "[O]".fg(colors["green"]).
|
|
1599
|
+
colored = "[O]".fg(colors["green"]).bd
|
|
1600
1600
|
result = result.sub(/^(\s*)(\[O\])/, "#{spaces}#{colored}") # Bold bright green for in-progress
|
|
1601
1601
|
processed_checkbox = true
|
|
1602
1602
|
elsif result =~ /^(\s*)(\[-\])/
|
|
@@ -1734,13 +1734,13 @@ class HyperListApp
|
|
|
1734
1734
|
# Handle text formatting (bold, italic, underline)
|
|
1735
1735
|
# Based on hyperlist.vim patterns with tab/space boundaries
|
|
1736
1736
|
# Bold: '\(\t\| \)\@<=\*.\{-}\*\($\| \)\@='
|
|
1737
|
-
result.gsub!(/(?<=\s|\A)\*([^*]+)\*(?=\s|\z)/) { $1.
|
|
1737
|
+
result.gsub!(/(?<=\s|\A)\*([^*]+)\*(?=\s|\z)/) { $1.bd }
|
|
1738
1738
|
|
|
1739
1739
|
# Italic: '\(\t\| \)\@<=/.\{-}/\($\| \)\@='
|
|
1740
|
-
result.gsub!(/(?<=\s|\A)\/([^\/]+)\/(?=\s|\z)/) { $1.
|
|
1740
|
+
result.gsub!(/(?<=\s|\A)\/([^\/]+)\/(?=\s|\z)/) { $1.it }
|
|
1741
1741
|
|
|
1742
1742
|
# Underline: '\(\t\| \)\@<=_.\{-}_\($\| \)\@='
|
|
1743
|
-
result.gsub!(/(?<=\s|\A)_([^_]+)_(?=\s|\z)/) { $1.
|
|
1743
|
+
result.gsub!(/(?<=\s|\A)_([^_]+)_(?=\s|\z)/) { $1.ul }
|
|
1744
1744
|
|
|
1745
1745
|
result
|
|
1746
1746
|
end
|
|
@@ -3772,7 +3772,7 @@ class HyperListApp
|
|
|
3772
3772
|
help_lines = []
|
|
3773
3773
|
help_lines << " Press #{"?".fg("10")} for full documentation, #{"UP/DOWN".fg("10")} to scroll, or any other key to return"
|
|
3774
3774
|
help_lines << " "
|
|
3775
|
-
help_lines << "#{"HYPERLIST KEY BINDINGS".
|
|
3775
|
+
help_lines << "#{"HYPERLIST KEY BINDINGS".bd}"
|
|
3776
3776
|
help_lines << " "
|
|
3777
3777
|
help_lines << "#{"NAVIGATION".fg("14")}"
|
|
3778
3778
|
help_lines << help_line("#{"j/↓".fg("10")}", "Move down", "#{"k/↑".fg("10")}", "Move up")
|
|
@@ -3848,7 +3848,7 @@ class HyperListApp
|
|
|
3848
3848
|
help_lines << help_line("#{"q".fg("10")}", "Quit (asks to save)", "#{"Q".fg("10")}", "Force quit")
|
|
3849
3849
|
help_lines << ""
|
|
3850
3850
|
help_lines << "#{"COLOR SCHEME".fg("14")}"
|
|
3851
|
-
help_lines << help_line("#{"[X]".fg("10")}", "Completed", "#{"[O]".fg("10").
|
|
3851
|
+
help_lines << help_line("#{"[X]".fg("10")}", "Completed", "#{"[O]".fg("10").bd}", "In progress")
|
|
3852
3852
|
help_lines << help_line("#{"[ ]".fg("22")}", "Unchecked", "#{"[-]".fg("2")}", "Partial")
|
|
3853
3853
|
help_lines << help_line("#{"[?]".fg("2")}", "Conditionals", "#{"AND:".fg("4")}", "Operators")
|
|
3854
3854
|
help_lines << help_line("#{"Date:".fg("1")}", "Properties", "#{"<ref>".fg("5")}", "References")
|
|
@@ -3920,7 +3920,7 @@ class HyperListApp
|
|
|
3920
3920
|
def show_documentation
|
|
3921
3921
|
doc = <<~DOC
|
|
3922
3922
|
|
|
3923
|
-
#{"HYPERLIST DOCUMENTATION".
|
|
3923
|
+
#{"HYPERLIST DOCUMENTATION".bd}
|
|
3924
3924
|
#{"Version 2.6 - Complete Specification".fg("245")}
|
|
3925
3925
|
|
|
3926
3926
|
#{"Official HyperList Page:".fg("14")} #{"https://isene.org/hyperlist/".fg("5")}
|
|
@@ -3928,7 +3928,7 @@ class HyperListApp
|
|
|
3928
3928
|
|
|
3929
3929
|
#{"═" * 60}
|
|
3930
3930
|
|
|
3931
|
-
#{"OVERVIEW".
|
|
3931
|
+
#{"OVERVIEW".bd}
|
|
3932
3932
|
|
|
3933
3933
|
HyperList represents a way to describe anything - any state or any
|
|
3934
3934
|
transition. It represents data in tree-structure lists with a very
|
|
@@ -3943,13 +3943,15 @@ class HyperListApp
|
|
|
3943
3943
|
|
|
3944
3944
|
#{"═" * 60}
|
|
3945
3945
|
|
|
3946
|
-
#{"HYPERLIST ITEM STRUCTURE".
|
|
3946
|
+
#{"HYPERLIST ITEM STRUCTURE".bd}
|
|
3947
3947
|
|
|
3948
3948
|
A HyperList Item consists of these parts in sequence:
|
|
3949
3949
|
|
|
3950
3950
|
1. #{"Starter".fg("5")} (optional)
|
|
3951
|
-
•
|
|
3952
|
-
•
|
|
3951
|
+
• Neutral Starter: "+ " or "- " — marks where an Item begins
|
|
3952
|
+
• Identifier: Numbers (1.1.1) or mixed (1A1A) — also unique
|
|
3953
|
+
Required only when an Item spans more than one line; its following
|
|
3954
|
+
lines are indented two spaces beyond the Item's own indent
|
|
3953
3955
|
|
|
3954
3956
|
2. #{"Type".fg("5")} (optional)
|
|
3955
3957
|
• State: S: or |
|
|
@@ -3965,14 +3967,14 @@ class HyperListApp
|
|
|
3965
3967
|
|
|
3966
3968
|
#{"═" * 60}
|
|
3967
3969
|
|
|
3968
|
-
#{"BASIC STRUCTURE".
|
|
3970
|
+
#{"BASIC STRUCTURE".bd}
|
|
3969
3971
|
|
|
3970
3972
|
• Items are organized hierarchically using TAB indentation
|
|
3971
3973
|
• Each level of indentation represents a deeper level
|
|
3972
3974
|
• Children add information to their parents
|
|
3973
3975
|
• A separator between items reads as "then" or "and"
|
|
3974
3976
|
|
|
3975
|
-
#{"CHECKBOXES".
|
|
3977
|
+
#{"CHECKBOXES".bd}
|
|
3976
3978
|
|
|
3977
3979
|
[_] Unchecked item (underscore placeholder)
|
|
3978
3980
|
[ ] Unchecked item (space placeholder)
|
|
@@ -3985,12 +3987,13 @@ class HyperListApp
|
|
|
3985
3987
|
Use 'V' to toggle with automatic timestamp on completion.
|
|
3986
3988
|
Format: [x] YYYY-MM-DD HH.MM: (timestamp after checkbox)
|
|
3987
3989
|
|
|
3988
|
-
#{"QUALIFIERS".
|
|
3990
|
+
#{"QUALIFIERS".bd}
|
|
3989
3991
|
|
|
3990
3992
|
Qualifiers in square brackets tell how many times, when, or under
|
|
3991
3993
|
what conditions an item exists or is executed:
|
|
3992
3994
|
|
|
3993
3995
|
[?] Optional item
|
|
3996
|
+
[?!] Otherwise (no preceding sibling Qualifier applied)
|
|
3994
3997
|
[3] Do item 3 times
|
|
3995
3998
|
[1+] Do item 1 or more times
|
|
3996
3999
|
[2..5] Do item 2 to 5 times
|
|
@@ -4004,7 +4007,7 @@ class HyperListApp
|
|
|
4004
4007
|
Complex example:
|
|
4005
4008
|
[2..7, Raining, Temp<5°C] Do item 2-7 times while raining and cold
|
|
4006
4009
|
|
|
4007
|
-
#{"TIMESTAMPS".
|
|
4010
|
+
#{"TIMESTAMPS".bd}
|
|
4008
4011
|
|
|
4009
4012
|
ISO-8601 format: YYYY-MM-DD HH.MM.SS (can be shortened)
|
|
4010
4013
|
|
|
@@ -4023,7 +4026,7 @@ class HyperListApp
|
|
|
4023
4026
|
[YYYY-MM-03] Every 3rd of every month
|
|
4024
4027
|
[Tue,Fri 12.00] Noon every Tuesday and Friday
|
|
4025
4028
|
|
|
4026
|
-
#{"PROPERTIES".
|
|
4029
|
+
#{"PROPERTIES".bd}
|
|
4027
4030
|
|
|
4028
4031
|
Any text followed by colon is a property (displayed in red):
|
|
4029
4032
|
|
|
@@ -4032,7 +4035,7 @@ class HyperListApp
|
|
|
4032
4035
|
2025-08-11 14.30: Meeting starts
|
|
4033
4036
|
State: Active
|
|
4034
4037
|
|
|
4035
|
-
#{"OPERATORS".
|
|
4038
|
+
#{"OPERATORS".bd}
|
|
4036
4039
|
|
|
4037
4040
|
ALL CAPS followed by colon (displayed in blue):
|
|
4038
4041
|
|
|
@@ -4051,7 +4054,7 @@ class HyperListApp
|
|
|
4051
4054
|
EXAMPLES: List of examples follows
|
|
4052
4055
|
CHOOSE: Select from options
|
|
4053
4056
|
|
|
4054
|
-
#{"REFERENCES".
|
|
4057
|
+
#{"REFERENCES".bd}
|
|
4055
4058
|
|
|
4056
4059
|
Enclosed in angle brackets < > (displayed in magenta):
|
|
4057
4060
|
|
|
@@ -4074,7 +4077,7 @@ class HyperListApp
|
|
|
4074
4077
|
<https://url.com> External URL
|
|
4075
4078
|
<file:/path/to/file> File reference
|
|
4076
4079
|
|
|
4077
|
-
#{"TEXT FORMATTING".
|
|
4080
|
+
#{"TEXT FORMATTING".bd}
|
|
4078
4081
|
|
|
4079
4082
|
*bold text* Bold formatting
|
|
4080
4083
|
/italic text/ Italic formatting
|
|
@@ -4082,7 +4085,7 @@ class HyperListApp
|
|
|
4082
4085
|
|
|
4083
4086
|
Formatting can be combined and nested.
|
|
4084
4087
|
|
|
4085
|
-
#{"ADDITIVES".
|
|
4088
|
+
#{"ADDITIVES".bd}
|
|
4086
4089
|
|
|
4087
4090
|
#{"Comments".fg("6")} (in parentheses):
|
|
4088
4091
|
(This is a comment) Not executed in transitions
|
|
@@ -4097,7 +4100,7 @@ class HyperListApp
|
|
|
4097
4100
|
#TODO #important Markers for categorization
|
|
4098
4101
|
#ProjectAlpha No spaces allowed in tags
|
|
4099
4102
|
|
|
4100
|
-
#{"SUBSTITUTIONS".
|
|
4103
|
+
#{"SUBSTITUTIONS".bd}
|
|
4101
4104
|
|
|
4102
4105
|
Use curly brackets for variable substitution:
|
|
4103
4106
|
|
|
@@ -4107,7 +4110,7 @@ class HyperListApp
|
|
|
4107
4110
|
Ask user for input; Use {input}
|
|
4108
4111
|
→ Variable from user interaction
|
|
4109
4112
|
|
|
4110
|
-
#{"MULTI-LINE ITEMS".
|
|
4113
|
+
#{"MULTI-LINE ITEMS".bd}
|
|
4111
4114
|
|
|
4112
4115
|
Use + prefix for items spanning multiple lines:
|
|
4113
4116
|
|
|
@@ -4117,7 +4120,7 @@ class HyperListApp
|
|
|
4117
4120
|
If one item at a level is multi-line, all items at that
|
|
4118
4121
|
level must start with + or an identifier.
|
|
4119
4122
|
|
|
4120
|
-
#{"SEPARATORS".
|
|
4123
|
+
#{"SEPARATORS".bd}
|
|
4121
4124
|
|
|
4122
4125
|
Newline → "then" (for sequence) or "and" (for children)
|
|
4123
4126
|
Semicolon → Compact multiple items on one line
|
|
@@ -4131,7 +4134,7 @@ class HyperListApp
|
|
|
4131
4134
|
Task A; Task B; Task C
|
|
4132
4135
|
→ Task A then Task B then Task C
|
|
4133
4136
|
|
|
4134
|
-
#{"CHANGE MARKUP".
|
|
4137
|
+
#{"CHANGE MARKUP".bd}
|
|
4135
4138
|
|
|
4136
4139
|
Special tags for document editing:
|
|
4137
4140
|
|
|
@@ -4141,7 +4144,7 @@ class HyperListApp
|
|
|
4141
4144
|
##-> Indent item right
|
|
4142
4145
|
##Text## Mark item as changed
|
|
4143
4146
|
|
|
4144
|
-
#{"LITERAL BLOCKS".
|
|
4147
|
+
#{"LITERAL BLOCKS".bd}
|
|
4145
4148
|
|
|
4146
4149
|
Escape HyperList interpretation with backslash blocks:
|
|
4147
4150
|
|
|
@@ -4151,7 +4154,7 @@ class HyperListApp
|
|
|
4151
4154
|
Until the closing backslash
|
|
4152
4155
|
\\
|
|
4153
4156
|
|
|
4154
|
-
#{"EXAMPLES".
|
|
4157
|
+
#{"EXAMPLES".bd}
|
|
4155
4158
|
|
|
4156
4159
|
#{"Simple Todo List:".fg("1")}
|
|
4157
4160
|
[ ] Buy groceries
|
|
@@ -4187,17 +4190,20 @@ class HyperListApp
|
|
|
4187
4190
|
|
|
4188
4191
|
#{"═" * 60}
|
|
4189
4192
|
|
|
4190
|
-
#{"COMPLETE HYPERLIST DEFINITION (from specification v2.6)".
|
|
4193
|
+
#{"COMPLETE HYPERLIST DEFINITION (from specification v2.6)".bd}
|
|
4191
4194
|
|
|
4192
4195
|
HyperList
|
|
4193
4196
|
[1+] HyperList Item
|
|
4194
4197
|
[?] Starter; OR:
|
|
4198
|
+
Neutral Starter = "+ " or "- "
|
|
4199
|
+
Marks where an Item begins and carries no further meaning
|
|
4195
4200
|
Identifier (Numbers: Format = "1.1.1.1", Mixed: Format = "1A1A")
|
|
4196
|
-
|
|
4197
|
-
|
|
4198
|
-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
+
Unique, so the Item can be referred to; also acts as a Starter
|
|
4202
|
+
+ An Item spanning more than one line must have a Starter, and its
|
|
4203
|
+
following lines are indented two spaces beyond the Item's own indent
|
|
4204
|
+
One level of indentation is at least three columns wide, so a
|
|
4205
|
+
continuation line can never be read as a child
|
|
4206
|
+
No requirement falls on the other Items at the same indent
|
|
4201
4207
|
[?] Type
|
|
4202
4208
|
OR:
|
|
4203
4209
|
State = "S:" or "|"
|
|
@@ -4251,6 +4257,10 @@ class HyperListApp
|
|
|
4251
4257
|
Do Item 1 or more times while "Bob is polite" = "[1+, Bob is polite]"
|
|
4252
4258
|
Do Item up to 4 times only while "zoo=0" = "[<4, zoo=0]"
|
|
4253
4259
|
Optional Item = "[?]"
|
|
4260
|
+
Fallback Item = "[?!]"
|
|
4261
|
+
Read as "otherwise"
|
|
4262
|
+
Applies when no preceding sibling Qualifier applied
|
|
4263
|
+
Valid only as the last Item of such a group
|
|
4254
4264
|
Timestamp Qualifier = "[YYYY-MM-DD hh.mm.ss]"
|
|
4255
4265
|
Shorten the format to the appropriate granularity
|
|
4256
4266
|
Time relations
|
|
@@ -6190,6 +6200,11 @@ class HyperListApp
|
|
|
6190
6200
|
case qualifier
|
|
6191
6201
|
when "?"
|
|
6192
6202
|
attributes << "shape=diamond" # Optional items as diamonds
|
|
6203
|
+
when "?!"
|
|
6204
|
+
# Fallback ("otherwise"): the branch taken when no preceding
|
|
6205
|
+
# sibling Qualifier applied. Not a condition, so no tooltip.
|
|
6206
|
+
attributes << "shape=diamond"
|
|
6207
|
+
attributes << "style=dashed"
|
|
6193
6208
|
when "_"
|
|
6194
6209
|
label = "☐ #{label}"
|
|
6195
6210
|
attributes[0] = "label=\"#{label}\""
|
data/hyperlist.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hyperlist
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Geir Isene
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: "."
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: rcurses
|
|
@@ -82,7 +81,6 @@ metadata:
|
|
|
82
81
|
source_code_uri: https://github.com/isene/HyperList
|
|
83
82
|
documentation_uri: https://isene.org/hyperlist/
|
|
84
83
|
changelog_uri: https://github.com/isene/HyperList/blob/main/CHANGELOG.md
|
|
85
|
-
post_install_message:
|
|
86
84
|
rdoc_options: []
|
|
87
85
|
require_paths:
|
|
88
86
|
- "."
|
|
@@ -97,8 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
97
95
|
- !ruby/object:Gem::Version
|
|
98
96
|
version: '0'
|
|
99
97
|
requirements: []
|
|
100
|
-
rubygems_version: 3.
|
|
101
|
-
signing_key:
|
|
98
|
+
rubygems_version: 3.6.7
|
|
102
99
|
specification_version: 4
|
|
103
100
|
summary: A powerful Terminal User Interface for HyperList management
|
|
104
101
|
test_files: []
|