fatty 0.99.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 +7 -0
- data/.envrc +2 -0
- data/.simplecov +23 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +34 -0
- data/CHANGELOG.org +38 -0
- data/LICENSE.txt +21 -0
- data/README.md +31 -0
- data/README.org +166 -0
- data/Rakefile +15 -0
- data/TODO.org +163 -0
- data/examples/markdown/native-markdown.md +370 -0
- data/examples/markdown/ox-gfm-markdown.md +373 -0
- data/examples/markdown/ox-gfm-markdown.org +376 -0
- data/exe/fatty +275 -0
- data/fatty.gemspec +42 -0
- data/lib/fatty/accept_env.rb +32 -0
- data/lib/fatty/action.rb +103 -0
- data/lib/fatty/action_environment.rb +42 -0
- data/lib/fatty/actionable.rb +73 -0
- data/lib/fatty/alert.rb +93 -0
- data/lib/fatty/ansi/renderer.rb +168 -0
- data/lib/fatty/ansi.rb +352 -0
- data/lib/fatty/colors/color.rb +379 -0
- data/lib/fatty/colors/pairs.rb +73 -0
- data/lib/fatty/colors/palette.rb +73 -0
- data/lib/fatty/colors/rgb.txt +788 -0
- data/lib/fatty/colors.rb +5 -0
- data/lib/fatty/config.rb +86 -0
- data/lib/fatty/config_files/config.yml +50 -0
- data/lib/fatty/config_files/help.md +120 -0
- data/lib/fatty/config_files/help.org +124 -0
- data/lib/fatty/config_files/keybindings.yml +49 -0
- data/lib/fatty/config_files/keydefs.yml +23 -0
- data/lib/fatty/config_files/themes/mono.yml +76 -0
- data/lib/fatty/config_files/themes/nordic.yml +77 -0
- data/lib/fatty/config_files/themes/solarized_dark.yml +77 -0
- data/lib/fatty/config_files/themes/terminal.yml +90 -0
- data/lib/fatty/config_files/themes/wordperfect.yml +77 -0
- data/lib/fatty/config_files/themes/wordperfect_light.yml +77 -0
- data/lib/fatty/core_ext/string.rb +21 -0
- data/lib/fatty/core_ext.rb +3 -0
- data/lib/fatty/counter.rb +81 -0
- data/lib/fatty/curses/context.rb +279 -0
- data/lib/fatty/curses/curses_coder.rb +684 -0
- data/lib/fatty/curses/event_source.rb +230 -0
- data/lib/fatty/curses/key_decoder.rb +183 -0
- data/lib/fatty/curses/patch.rb +116 -0
- data/lib/fatty/curses/window_styling.rb +32 -0
- data/lib/fatty/curses.rb +16 -0
- data/lib/fatty/env.rb +100 -0
- data/lib/fatty/help.rb +41 -0
- data/lib/fatty/history/entry.rb +71 -0
- data/lib/fatty/history.rb +289 -0
- data/lib/fatty/input_buffer.rb +998 -0
- data/lib/fatty/input_field.rb +507 -0
- data/lib/fatty/key_event.rb +342 -0
- data/lib/fatty/key_map.rb +392 -0
- data/lib/fatty/keymaps/emacs.rb +189 -0
- data/lib/fatty/log_formats/json.rb +47 -0
- data/lib/fatty/log_formats/text.rb +67 -0
- data/lib/fatty/logger.rb +142 -0
- data/lib/fatty/markdown/ansi_renderer.rb +373 -0
- data/lib/fatty/markdown/render.rb +22 -0
- data/lib/fatty/markdown.rb +4 -0
- data/lib/fatty/menu_env.rb +22 -0
- data/lib/fatty/mouse_event.rb +32 -0
- data/lib/fatty/output_buffer.rb +78 -0
- data/lib/fatty/pager.rb +801 -0
- data/lib/fatty/prompt.rb +40 -0
- data/lib/fatty/renderer/curses.rb +697 -0
- data/lib/fatty/renderer/truecolor.rb +607 -0
- data/lib/fatty/renderer.rb +419 -0
- data/lib/fatty/screen.rb +96 -0
- data/lib/fatty/search.rb +43 -0
- data/lib/fatty/session/alert_session.rb +52 -0
- data/lib/fatty/session/input_session.rb +99 -0
- data/lib/fatty/session/isearch_session.rb +172 -0
- data/lib/fatty/session/keytest_session.rb +236 -0
- data/lib/fatty/session/modal_session.rb +61 -0
- data/lib/fatty/session/output_session.rb +105 -0
- data/lib/fatty/session/popup_session.rb +540 -0
- data/lib/fatty/session/prompt_session.rb +157 -0
- data/lib/fatty/session/search_session.rb +136 -0
- data/lib/fatty/session/shell_session.rb +566 -0
- data/lib/fatty/session.rb +173 -0
- data/lib/fatty/sessions.rb +14 -0
- data/lib/fatty/terminal/popup_owner.rb +26 -0
- data/lib/fatty/terminal/progress.rb +374 -0
- data/lib/fatty/terminal.rb +1067 -0
- data/lib/fatty/themes/loader.rb +136 -0
- data/lib/fatty/themes/manager.rb +71 -0
- data/lib/fatty/themes/registry.rb +64 -0
- data/lib/fatty/themes/resolver.rb +224 -0
- data/lib/fatty/themes/themes.rb +131 -0
- data/lib/fatty/themes.rb +6 -0
- data/lib/fatty/version.rb +5 -0
- data/lib/fatty/view/alert_view.rb +14 -0
- data/lib/fatty/view/cursor_view.rb +18 -0
- data/lib/fatty/view/input_view.rb +9 -0
- data/lib/fatty/view/output_view.rb +9 -0
- data/lib/fatty/view/status_view.rb +14 -0
- data/lib/fatty/view.rb +33 -0
- data/lib/fatty/viewport.rb +90 -0
- data/lib/fatty/views.rb +9 -0
- data/lib/fatty.rb +55 -0
- data/sig/fatty.rbs +4 -0
- metadata +250 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fatty
|
|
4
|
+
module Colors
|
|
5
|
+
# Stable Curses color-pair IDs. These are intentionally constant so the
|
|
6
|
+
# renderer can refer to them without dynamic allocation.
|
|
7
|
+
#
|
|
8
|
+
# Pair 0 is reserved in ncurses; start at 1.
|
|
9
|
+
module Pairs
|
|
10
|
+
OUTPUT = 1
|
|
11
|
+
INPUT = 2
|
|
12
|
+
INPUT_SUGGESTION = 3
|
|
13
|
+
CURSOR = 4
|
|
14
|
+
REGION = 5
|
|
15
|
+
|
|
16
|
+
STATUS_INFO = 6
|
|
17
|
+
STATUS_WARN = 7
|
|
18
|
+
STATUS_ERROR = 8
|
|
19
|
+
STATUS_GOOD = 9
|
|
20
|
+
STATUS = 10
|
|
21
|
+
|
|
22
|
+
ALERT_INFO = 11
|
|
23
|
+
ALERT_WARN = 12
|
|
24
|
+
ALERT_ERROR = 13
|
|
25
|
+
ALERT_GOOD = 14
|
|
26
|
+
ALERT = 15
|
|
27
|
+
|
|
28
|
+
SEARCH = 20
|
|
29
|
+
SEARCH_HIGHLIGHT = 21
|
|
30
|
+
SEARCH_HIGHLIGHT_SECONDARY = 22
|
|
31
|
+
PAGER_STATUS = 23
|
|
32
|
+
|
|
33
|
+
POPUP = 30
|
|
34
|
+
POPUP_SELECTION = 31
|
|
35
|
+
POPUP_INPUT = 32
|
|
36
|
+
POPUP_FRAME = 33
|
|
37
|
+
POPUP_COUNTS = 34
|
|
38
|
+
|
|
39
|
+
# Role -> pair id mapping for iteration.
|
|
40
|
+
ROLE_TO_PAIR = {
|
|
41
|
+
output: OUTPUT,
|
|
42
|
+
input: INPUT,
|
|
43
|
+
input_suggestion: INPUT_SUGGESTION,
|
|
44
|
+
cursor: CURSOR,
|
|
45
|
+
region: REGION,
|
|
46
|
+
|
|
47
|
+
good: STATUS_GOOD,
|
|
48
|
+
info: STATUS_INFO,
|
|
49
|
+
warn: STATUS_WARN,
|
|
50
|
+
error: STATUS_ERROR,
|
|
51
|
+
status: STATUS,
|
|
52
|
+
|
|
53
|
+
alert_info: ALERT_INFO,
|
|
54
|
+
alert_warn: ALERT_WARN,
|
|
55
|
+
alert_error: ALERT_ERROR,
|
|
56
|
+
alert_good: ALERT_GOOD,
|
|
57
|
+
alert: ALERT,
|
|
58
|
+
|
|
59
|
+
match_current: SEARCH_HIGHLIGHT,
|
|
60
|
+
match_other: SEARCH_HIGHLIGHT_SECONDARY,
|
|
61
|
+
search_input: SEARCH,
|
|
62
|
+
|
|
63
|
+
pager_status: PAGER_STATUS,
|
|
64
|
+
|
|
65
|
+
popup: POPUP,
|
|
66
|
+
popup_selection: POPUP_SELECTION,
|
|
67
|
+
popup_input: POPUP_INPUT,
|
|
68
|
+
popup_frame: POPUP_FRAME,
|
|
69
|
+
popup_counts: POPUP_COUNTS,
|
|
70
|
+
}.freeze
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fatty
|
|
4
|
+
module Colors
|
|
5
|
+
# Palette compiles a resolved symbolic theme_spec into a renderer-ready
|
|
6
|
+
# palette.
|
|
7
|
+
#
|
|
8
|
+
# A theme_spec is produced by Fatty::Themes::Resolver. It maps role names
|
|
9
|
+
# to symbolic color specifications, usually color names and attributes:
|
|
10
|
+
#
|
|
11
|
+
# #+begin_src ruby
|
|
12
|
+
# {
|
|
13
|
+
# output: { fg: "white", bg: "navy" },
|
|
14
|
+
# alert_warn: { fg: "yellow", bg: "pink", attrs: [:bold] },
|
|
15
|
+
# }
|
|
16
|
+
# #+end_src
|
|
17
|
+
#
|
|
18
|
+
# A palette maps those same role names to concrete rendering data:
|
|
19
|
+
#
|
|
20
|
+
# #+begin_src ruby
|
|
21
|
+
# {
|
|
22
|
+
# output: {
|
|
23
|
+
# fg: 7,
|
|
24
|
+
# bg: 4,
|
|
25
|
+
# fg_rgb: [255, 255, 255],
|
|
26
|
+
# bg_rgb: [0, 0, 128],
|
|
27
|
+
# pair: 1,
|
|
28
|
+
# attrs: [],
|
|
29
|
+
# },
|
|
30
|
+
# }
|
|
31
|
+
# #+end_src
|
|
32
|
+
#
|
|
33
|
+
# Curses renderers use :pair and :attrs. Truecolor renderers use
|
|
34
|
+
# :fg_rgb, :bg_rgb, and :attrs.
|
|
35
|
+
#
|
|
36
|
+
# - .build :: returns the compiled palette without touching curses.
|
|
37
|
+
# - .apply! :: also initializes curses color pairs.
|
|
38
|
+
#
|
|
39
|
+
module Palette
|
|
40
|
+
DEFAULT_ROLE = { fg: "default", bg: "default" }.freeze
|
|
41
|
+
|
|
42
|
+
# Compile a theme_spec into a renderer-ready palette without initializing
|
|
43
|
+
# curses color pairs.
|
|
44
|
+
def self.compile(theme_spec, available_colors:)
|
|
45
|
+
palette = {}
|
|
46
|
+
roles = (theme_spec.keys + Pairs::ROLE_TO_PAIR.keys).compact.uniq
|
|
47
|
+
|
|
48
|
+
roles.each do |role|
|
|
49
|
+
role_spec = theme_spec.fetch(role, DEFAULT_ROLE)
|
|
50
|
+
|
|
51
|
+
fg_spec = role_spec[:fg] || DEFAULT_ROLE[:fg]
|
|
52
|
+
bg_spec = role_spec[:bg] || DEFAULT_ROLE[:bg]
|
|
53
|
+
|
|
54
|
+
fg = Fatty::Color.resolve(fg_spec, available_colors: available_colors)
|
|
55
|
+
bg = Fatty::Color.resolve(bg_spec, available_colors: available_colors)
|
|
56
|
+
attrs = Array(role_spec[:attrs] || role_spec["attrs"]).map(&:to_sym)
|
|
57
|
+
fg_rgb = Fatty::Color.rgb(fg_spec)
|
|
58
|
+
bg_rgb = Fatty::Color.rgb(bg_spec)
|
|
59
|
+
|
|
60
|
+
palette[role] = {
|
|
61
|
+
fg: fg,
|
|
62
|
+
bg: bg,
|
|
63
|
+
fg_rgb: fg_rgb,
|
|
64
|
+
bg_rgb: bg_rgb,
|
|
65
|
+
pair: Pairs::ROLE_TO_PAIR[role],
|
|
66
|
+
attrs: attrs,
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
palette
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|