markdown_exec 1.5 → 1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +6 -1
- data/bin/tab_completion.sh +2 -2
- data/examples/opts.md +4 -7
- data/lib/markdown_exec/version.rb +1 -1
- data/lib/markdown_exec.rb +38 -36
- data/lib/menu.src.yml +8 -4
- data/lib/menu.yml +6 -5
- data/lib/pty1.rb +26 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97323ce7d6c677603ca89432c9ca64e45ff205a5b6cc03a71f4be1210bf8104a
|
4
|
+
data.tar.gz: ccce852fe96571b00c4443012371ea5ad29caec29dfdc9649cec7da2c091defe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc08d47d135d9a078240c6e3001322ec8b35b8fb4f7febeabec02729240d7524a40464d9d563aeb15e5c8d09695bd0b512251d970dfede46cf07bd377af72181
|
7
|
+
data.tar.gz: ec61f969d204b0216c02e2e13d270363aef35ecf3ad6ff5a26d653e2d5c8f1608ff3e70a24ab65ab3bd48d8c546e1a6c627734c8e03e08a2440c18b1d9db7fed
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [1.6] - 2023-11-13
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- Options to remember a block's indentation in the source document and to display with same indentation in the menu.
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- Note option matches the remaining lines in the document and they are displayed in the menu.
|
12
|
+
|
3
13
|
## [1.5] - 2023-11-08
|
4
14
|
|
5
15
|
### Added
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
markdown_exec (1.
|
4
|
+
markdown_exec (1.6)
|
5
5
|
clipboard (~> 1.3.6)
|
6
6
|
open3 (~> 0.1.1)
|
7
7
|
optparse (~> 0.1.1)
|
@@ -139,6 +139,8 @@ GEM
|
|
139
139
|
rubocop (~> 1.33)
|
140
140
|
rubocop-capybara (~> 2.17)
|
141
141
|
rubocop-factory_bot (~> 2.22)
|
142
|
+
ruby-graphviz (1.2.5)
|
143
|
+
rexml
|
142
144
|
ruby-progressbar (1.13.0)
|
143
145
|
ruby2_keywords (0.0.5)
|
144
146
|
shellwords (0.1.0)
|
@@ -157,6 +159,8 @@ GEM
|
|
157
159
|
concurrent-ruby (~> 1.0)
|
158
160
|
unicode-display_width (2.5.0)
|
159
161
|
uri (0.12.2)
|
162
|
+
visual_call_graph (0.4.0)
|
163
|
+
ruby-graphviz (~> 1.2, >= 1.2.0)
|
160
164
|
wisper (2.0.1)
|
161
165
|
yaml (0.2.1)
|
162
166
|
zeitwerk (2.6.12)
|
@@ -182,6 +186,7 @@ DEPENDENCIES
|
|
182
186
|
rubocop-rspec
|
183
187
|
shellwords
|
184
188
|
uri
|
189
|
+
visual_call_graph
|
185
190
|
yaml (~> 0.2.1)
|
186
191
|
|
187
192
|
BUNDLED WITH
|
data/bin/tab_completion.sh
CHANGED
@@ -13,7 +13,7 @@ __filedirs_all()
|
|
13
13
|
}
|
14
14
|
|
15
15
|
_mde_echo_version() {
|
16
|
-
echo "1.
|
16
|
+
echo "1.6"
|
17
17
|
}
|
18
18
|
|
19
19
|
_mde() {
|
@@ -138,4 +138,4 @@ _mde() {
|
|
138
138
|
|
139
139
|
complete -o filenames -o nospace -F _mde mde
|
140
140
|
# _mde_echo_version
|
141
|
-
# echo "Updated: 2023-11-
|
141
|
+
# echo "Updated: 2023-11-13 16:19:21 UTC"
|
data/examples/opts.md
CHANGED
@@ -1,23 +1,20 @@
|
|
1
1
|
# Demo configuring options
|
2
|
-
|
3
|
-
a
|
2
|
+
|
4
3
|
::: These Opts blocks set the color of a couple of menu options to demonstrate the live update of options.
|
5
|
-
|
6
|
-
+ note2
|
7
|
-
c
|
4
|
+
|
8
5
|
```opts :opts1
|
9
6
|
menu_divider_color: yellow
|
10
7
|
menu_note_match:
|
11
8
|
menu_task_color: fg_rgb_255_63_255
|
12
9
|
```
|
13
|
-
|
10
|
+
|
14
11
|
```opts :opts2
|
15
12
|
menu_divider_color: red
|
16
13
|
menu_note_color: yellow
|
17
14
|
menu_note_match: "^\\+ +(?<line>.+?) *$"
|
18
15
|
menu_task_color: fg_rgb_127_127_255
|
19
16
|
```
|
20
|
-
|
17
|
+
|
21
18
|
```opts :(document_options)
|
22
19
|
menu_divider_color: green
|
23
20
|
menu_link_color: fg_rgbh_88_cc_66
|
data/lib/markdown_exec.rb
CHANGED
@@ -538,15 +538,24 @@ module MarkdownExec
|
|
538
538
|
def create_and_add_chrome_blocks(blocks, fcb, opts, use_chrome)
|
539
539
|
return unless use_chrome
|
540
540
|
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
541
|
+
match_criteria = [
|
542
|
+
{ match: :menu_task_match, format: :menu_task_format,
|
543
|
+
color: :menu_task_color },
|
544
|
+
{ match: :menu_divider_match, format: :menu_divider_format,
|
545
|
+
color: :menu_divider_color },
|
546
|
+
{ match: :menu_note_match, format: :menu_note_format,
|
547
|
+
color: :menu_note_color }
|
548
|
+
]
|
549
|
+
|
550
|
+
match_criteria.each do |criteria|
|
551
|
+
unless opts[criteria[:match]].present? &&
|
552
|
+
(mbody = fcb.body[0].match opts[criteria[:match]])
|
553
|
+
next
|
554
|
+
end
|
555
|
+
|
556
|
+
create_and_add_chrome_block(blocks, fcb, mbody, opts[criteria[:format]],
|
557
|
+
opts[criteria[:color]].to_sym)
|
558
|
+
break
|
550
559
|
end
|
551
560
|
end
|
552
561
|
|
@@ -730,6 +739,7 @@ module MarkdownExec
|
|
730
739
|
end
|
731
740
|
|
732
741
|
# Formats multiline body content as a title string.
|
742
|
+
# indents all but first line with two spaces so it displays correctly in menu
|
733
743
|
# @param body_lines [Array<String>] The lines of body content.
|
734
744
|
# @return [String] Formatted title.
|
735
745
|
def format_multiline_body_as_title(body_lines)
|
@@ -893,6 +903,16 @@ module MarkdownExec
|
|
893
903
|
ENV[MDE_HISTORY_ENV_NAME] = new_history
|
894
904
|
end
|
895
905
|
|
906
|
+
# Indents all lines in a given string with a specified indentation string.
|
907
|
+
# @param body [String] A multi-line string to be indented.
|
908
|
+
# @param indent [String] The string used for indentation (default is an empty string).
|
909
|
+
# @return [String] A single string with each line indented as specified.
|
910
|
+
def indent_all_lines(body, indent = nil)
|
911
|
+
return body if !indent.present?
|
912
|
+
|
913
|
+
body.lines.map { |line| indent + line.chomp }.join("\n")
|
914
|
+
end
|
915
|
+
|
896
916
|
## Sets up the options and returns the parsed arguments
|
897
917
|
#
|
898
918
|
def initialize_and_parse_cli_options
|
@@ -1132,31 +1152,6 @@ module MarkdownExec
|
|
1132
1152
|
end.to_yaml
|
1133
1153
|
end
|
1134
1154
|
|
1135
|
-
def menu_for_blocks(menu_options)
|
1136
|
-
options = calculated_options.merge menu_options
|
1137
|
-
menu = []
|
1138
|
-
iter_blocks_in_file(options) do |btype, fcb|
|
1139
|
-
case btype
|
1140
|
-
when :filter
|
1141
|
-
%i[blocks line]
|
1142
|
-
when :line
|
1143
|
-
if options[:menu_divider_match] &&
|
1144
|
-
(mbody = fcb.body[0].match(options[:menu_divider_match]))
|
1145
|
-
menu.push FCB.new({ dname: mbody[:name], oname: mbody[:name],
|
1146
|
-
disabled: '' })
|
1147
|
-
end
|
1148
|
-
if options[:menu_note_match] &&
|
1149
|
-
(mbody = fcb.body[0].match(options[:menu_note_match]))
|
1150
|
-
menu.push FCB.new({ dname: mbody[:name], oname: mbody[:name],
|
1151
|
-
disabled: '' })
|
1152
|
-
end
|
1153
|
-
when :blocks
|
1154
|
-
menu += [fcb.oname]
|
1155
|
-
end
|
1156
|
-
end
|
1157
|
-
menu
|
1158
|
-
end
|
1159
|
-
|
1160
1155
|
##
|
1161
1156
|
# Generates a menu suitable for OptionParser from the menu items defined in YAML format.
|
1162
1157
|
# @return [Array<Hash>] The array of option hashes for OptionParser.
|
@@ -1321,7 +1316,7 @@ module MarkdownExec
|
|
1321
1316
|
next if Filter.prepared_not_in_menu?(opts, fcb)
|
1322
1317
|
|
1323
1318
|
fcb.merge!(
|
1324
|
-
name: fcb.dname,
|
1319
|
+
name: indent_all_lines(fcb.dname, fcb.fetch(:indent, nil)),
|
1325
1320
|
label: BlockLabel.make(
|
1326
1321
|
body: fcb[:body],
|
1327
1322
|
filename: opts[:filename],
|
@@ -1653,6 +1648,7 @@ module MarkdownExec
|
|
1653
1648
|
fcb = FCB.new
|
1654
1649
|
fcb.headings = headings
|
1655
1650
|
fcb.oname = fcb.dname = fcb_title_groups.fetch(:name, '')
|
1651
|
+
fcb.indent = fcb_title_groups.fetch(:indent, '')
|
1656
1652
|
fcb.shell = fcb_title_groups.fetch(:shell, '')
|
1657
1653
|
fcb.title = fcb_title_groups.fetch(:name, '')
|
1658
1654
|
fcb.body = []
|
@@ -1749,7 +1745,13 @@ module MarkdownExec
|
|
1749
1745
|
state[:in_fenced_block] = true
|
1750
1746
|
end
|
1751
1747
|
elsif state[:in_fenced_block] && state[:fcb].body
|
1752
|
-
|
1748
|
+
## add line to fenced code block
|
1749
|
+
# remove fcb indent if possible
|
1750
|
+
#
|
1751
|
+
state[:fcb].body += [
|
1752
|
+
line.chomp.sub(/^#{state[:fcb].indent}/, '')
|
1753
|
+
]
|
1754
|
+
|
1753
1755
|
else
|
1754
1756
|
process_line(line, opts, selected_messages, &block)
|
1755
1757
|
end
|
data/lib/menu.src.yml
CHANGED
@@ -118,12 +118,14 @@
|
|
118
118
|
:procname: exit
|
119
119
|
:short_name: x
|
120
120
|
|
121
|
-
|
121
|
+
## match fenced code indented by spaces
|
122
|
+
#
|
123
|
+
- :default: "^(?<indent> *)`{3,}"
|
122
124
|
:env_var: MDE_FENCED_START_AND_END_REGEX
|
123
125
|
:opt_name: fenced_start_and_end_regex
|
124
126
|
:procname: val_as_str
|
125
127
|
|
126
|
-
- :default: "
|
128
|
+
- :default: "^(?<indent> *)`{3,}(?<shell>[^`\\s]*) *:?(?<name>[^\\s]*) *(?<rest>.*) *$"
|
127
129
|
:env_var: MDE_FENCED_START_EXTENDED_REGEX
|
128
130
|
:opt_name: fenced_start_extended_regex
|
129
131
|
:procname: val_as_str
|
@@ -330,7 +332,7 @@
|
|
330
332
|
:opt_name: menu_link_format
|
331
333
|
:procname: val_as_str
|
332
334
|
|
333
|
-
- :default:
|
335
|
+
- :default: fg_rgbh_88_88_88
|
334
336
|
:description: Color of menu note
|
335
337
|
:env_var: MDE_MENU_NOTE_COLOR
|
336
338
|
:opt_name: menu_note_color
|
@@ -342,7 +344,9 @@
|
|
342
344
|
:opt_name: menu_note_format
|
343
345
|
:procname: val_as_str
|
344
346
|
|
345
|
-
-
|
347
|
+
## all non-blank lines are notes
|
348
|
+
#
|
349
|
+
- :default: "^(?<line>.*?) *$"
|
346
350
|
:description: Pattern for notes in block selection menu
|
347
351
|
:env_var: MDE_MENU_NOTE_MATCH
|
348
352
|
:opt_name: menu_note_match
|
data/lib/menu.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# MDE - Markdown Executor (1.
|
1
|
+
# MDE - Markdown Executor (1.6)
|
2
2
|
---
|
3
3
|
- :description: Show current configuration values
|
4
4
|
:procname: show_config
|
@@ -99,11 +99,12 @@
|
|
99
99
|
:long_name: exit
|
100
100
|
:procname: exit
|
101
101
|
:short_name: x
|
102
|
-
- :default: "
|
102
|
+
- :default: "^(?<indent> *)`{3,}"
|
103
103
|
:env_var: MDE_FENCED_START_AND_END_REGEX
|
104
104
|
:opt_name: fenced_start_and_end_regex
|
105
105
|
:procname: val_as_str
|
106
|
-
- :default: "
|
106
|
+
- :default: "^(?<indent> *)`{3,}(?<shell>[^`\\s]*) *:?(?<name>[^\\s]*) *(?<rest>.*)
|
107
|
+
*$"
|
107
108
|
:env_var: MDE_FENCED_START_EXTENDED_REGEX
|
108
109
|
:opt_name: fenced_start_extended_regex
|
109
110
|
:procname: val_as_str
|
@@ -275,7 +276,7 @@
|
|
275
276
|
:env_var: MDE_MENU_LINK_FORMAT
|
276
277
|
:opt_name: menu_link_format
|
277
278
|
:procname: val_as_str
|
278
|
-
- :default:
|
279
|
+
- :default: fg_rgbh_88_88_88
|
279
280
|
:description: Color of menu note
|
280
281
|
:env_var: MDE_MENU_NOTE_COLOR
|
281
282
|
:opt_name: menu_note_color
|
@@ -285,7 +286,7 @@
|
|
285
286
|
:env_var: MDE_MENU_NOTE_FORMAT
|
286
287
|
:opt_name: menu_note_format
|
287
288
|
:procname: val_as_str
|
288
|
-
- :default: "
|
289
|
+
- :default: "^(?<line>.*?) *$"
|
289
290
|
:description: Pattern for notes in block selection menu
|
290
291
|
:env_var: MDE_MENU_NOTE_MATCH
|
291
292
|
:opt_name: menu_note_match
|
data/lib/pty1.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'pty'
|
2
|
+
|
3
|
+
def launch_and_interact_with_terminal
|
4
|
+
begin
|
5
|
+
PTY.spawn("bash") do |stdout, stdin, pid|
|
6
|
+
# Send a command to the terminal
|
7
|
+
stdin.puts "echo 'Hello from Ruby!'"
|
8
|
+
|
9
|
+
# Read the output of the command
|
10
|
+
stdout.each do |line|
|
11
|
+
puts line
|
12
|
+
break if line.include?("Hello from Ruby!")
|
13
|
+
end
|
14
|
+
|
15
|
+
# You can continue to interact with the terminal here
|
16
|
+
# ...
|
17
|
+
|
18
|
+
# Ensure to exit the spawned shell
|
19
|
+
stdin.puts "exit"
|
20
|
+
end
|
21
|
+
rescue PTY::ChildExited => e
|
22
|
+
puts "The child process exited!"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
launch_and_interact_with_terminal
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdown_exec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.6'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fareed Stevenson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clipboard
|
@@ -144,6 +144,7 @@ files:
|
|
144
144
|
- lib/method_sorter.rb
|
145
145
|
- lib/object_present.rb
|
146
146
|
- lib/option_value.rb
|
147
|
+
- lib/pty1.rb
|
147
148
|
- lib/regexp.rb
|
148
149
|
- lib/rspec_helpers.rb
|
149
150
|
- lib/saved_assets.rb
|