markdown_exec 1.8.9 → 2.0.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/.rubocop.yml +5 -1
- data/CHANGELOG.md +12 -0
- data/Gemfile +3 -2
- data/Gemfile.lock +2 -8
- data/bin/tab_completion.sh +11 -3
- data/examples/colors.md +41 -19
- data/examples/document_options.md +8 -0
- data/examples/duplicate_block.md +5 -8
- data/examples/import0.md +3 -5
- data/examples/import1.md +1 -1
- data/examples/include.md +16 -10
- data/examples/indent.md +2 -0
- data/examples/index.md +68 -0
- data/examples/linked.md +31 -0
- data/examples/llm.md +54 -0
- data/lib/find_files.rb +1 -2
- data/lib/hash_delegator.rb +483 -207
- data/lib/input_sequencer.rb +229 -0
- data/lib/link_history.rb +11 -5
- data/lib/markdown_exec/version.rb +1 -1
- data/lib/markdown_exec.rb +4 -6
- data/lib/mdoc.rb +7 -7
- data/lib/menu.src.yml +59 -9
- data/lib/menu.yml +52 -10
- metadata +6 -3
- data/examples/infile_config.md +0 -10
@@ -0,0 +1,229 @@
|
|
1
|
+
#!/usr/bin/env bundle exec ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# encoding=utf-8
|
5
|
+
|
6
|
+
require_relative 'dev/instance_method_wrapper' # for ImwUx
|
7
|
+
require_relative 'env'
|
8
|
+
require_relative 'link_history'
|
9
|
+
|
10
|
+
# InputSequencer manages the sequence of menu interactions and block executions based on user input.
|
11
|
+
class InputSequencer
|
12
|
+
# extend ImwUx # This makes imw_indent available as a class method
|
13
|
+
# include ImwUx # This makes imw_indent available as a class method
|
14
|
+
|
15
|
+
# self.prepend InstanceMethodWrapper # traps initialize as well
|
16
|
+
attr_reader :document_filename, :current_block, :block_queue
|
17
|
+
|
18
|
+
def initialize(document_filename, initial_blocks = nil)
|
19
|
+
@document_filename = document_filename
|
20
|
+
@current_block = nil
|
21
|
+
@block_queue = initial_blocks
|
22
|
+
@debug = Env::env_bool('INPUT_SEQUENCER_DEBUG', default: false) ### false e
|
23
|
+
end
|
24
|
+
|
25
|
+
# Merges the current menu state with the next, prioritizing the next state's values.
|
26
|
+
def self.merge_link_state(current, next_state)
|
27
|
+
MarkdownExec::LinkState.new(
|
28
|
+
block_name: next_state.block_name,
|
29
|
+
display_menu: next_state.display_menu.nil? ? current.display_menu : next_state.display_menu,
|
30
|
+
document_filename: next_state.document_filename || current.document_filename,
|
31
|
+
inherited_block_names: next_state.inherited_block_names,
|
32
|
+
inherited_dependencies: next_state.inherited_dependencies,
|
33
|
+
inherited_lines: next_state.inherited_lines,
|
34
|
+
prior_block_was_link: next_state.prior_block_was_link.nil? ? current.prior_block_was_link : next_state.prior_block_was_link
|
35
|
+
)
|
36
|
+
rescue
|
37
|
+
binding.irb
|
38
|
+
end
|
39
|
+
|
40
|
+
# Generates the next menu state based on provided attributes.
|
41
|
+
|
42
|
+
def self.next_link_state(block_name: nil, display_menu: nil, document_filename: nil, prior_block_was_link: false)
|
43
|
+
MarkdownExec::LinkState.new(
|
44
|
+
block_name: block_name,
|
45
|
+
display_menu: display_menu,
|
46
|
+
document_filename: document_filename,
|
47
|
+
prior_block_was_link: prior_block_was_link
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Orchestrates the flow of menu states and user interactions.
|
52
|
+
def run_yield(sym, *args, &block)
|
53
|
+
block.call sym, *args
|
54
|
+
end
|
55
|
+
|
56
|
+
def bq_is_empty?
|
57
|
+
!@block_queue || @block_queue.empty?
|
58
|
+
end
|
59
|
+
|
60
|
+
# Orchestrates the flow of menu states and user interactions.
|
61
|
+
def run(&block)
|
62
|
+
now_menu = InputSequencer.next_link_state(
|
63
|
+
display_menu: bq_is_empty?,
|
64
|
+
document_filename: @document_filename,
|
65
|
+
prior_block_was_link: false # true bypass_exit when last block was a link (from cli)
|
66
|
+
)
|
67
|
+
exit_when_bq_empty = !bq_is_empty? # true when running blocks from cli; unless "stay" is used
|
68
|
+
loop do
|
69
|
+
break if run_yield(:parse_document, now_menu.document_filename, &block) == :break
|
70
|
+
|
71
|
+
pp [__LINE__, 'exit_when_bq_empty', exit_when_bq_empty, '@block_queue', @block_queue, 'now_menu', now_menu] if @debug
|
72
|
+
# self.imw_ins now_menu, 'now_menu'
|
73
|
+
|
74
|
+
break if exit_when_bq_empty && bq_is_empty? && !now_menu.prior_block_was_link
|
75
|
+
|
76
|
+
if now_menu.display_menu
|
77
|
+
exit_when_bq_empty = false
|
78
|
+
|
79
|
+
run_yield :display_menu, &block
|
80
|
+
|
81
|
+
choice = run_yield :user_choice, &block
|
82
|
+
|
83
|
+
break if run_yield(:exit?, choice&.downcase, &block) # Exit loop and method to terminate the app
|
84
|
+
|
85
|
+
next_state = run_yield :execute_block, choice, &block
|
86
|
+
# imw_ins next_state, 'next_state'
|
87
|
+
pp [__LINE__, 'next_state', next_state] if @debug
|
88
|
+
return :break if next_state == :break
|
89
|
+
|
90
|
+
next_menu = next_state
|
91
|
+
|
92
|
+
else
|
93
|
+
if now_menu.block_name && !now_menu.block_name.empty?
|
94
|
+
block_name = now_menu.block_name
|
95
|
+
else
|
96
|
+
break if bq_is_empty? # Exit loop if no more blocks to process
|
97
|
+
|
98
|
+
block_name = @block_queue.shift
|
99
|
+
end
|
100
|
+
# self.imw_ins block_name, 'block_name'
|
101
|
+
pp [__LINE__, 'block_name', block_name] if @debug
|
102
|
+
|
103
|
+
next_menu = if block_name == '.'
|
104
|
+
exit_when_bq_empty = false
|
105
|
+
InputSequencer.next_link_state(display_menu: true)
|
106
|
+
else
|
107
|
+
state = run_yield :execute_block, block_name, &block
|
108
|
+
state.display_menu = bq_is_empty?
|
109
|
+
state
|
110
|
+
end
|
111
|
+
pp [__LINE__, 'next_menu', next_menu] if @debug
|
112
|
+
next_menu
|
113
|
+
# imw_ins next_menu, 'next_menu'
|
114
|
+
end
|
115
|
+
now_menu = InputSequencer.merge_link_state(now_menu, next_menu)
|
116
|
+
end
|
117
|
+
rescue
|
118
|
+
binding.irb
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
return if __FILE__ != $PROGRAM_NAME
|
123
|
+
|
124
|
+
$doc1 = {
|
125
|
+
'b1' => 'Content of bash1',
|
126
|
+
'b2' => 'Content of bash2',
|
127
|
+
'b3' => 'Content of bash3',
|
128
|
+
'l1' => { 'block_name' => 'b1', 'document_filename' => 'd1' },
|
129
|
+
'l2' => { 'block_name' => 'b2', 'document_filename' => 'd2' },
|
130
|
+
'l3' => { 'block_name' => 'b3' }
|
131
|
+
}.freeze
|
132
|
+
$stay = '.' # keep menu open (from command line)
|
133
|
+
$texit = 'x'
|
134
|
+
|
135
|
+
class MDE
|
136
|
+
# extend ImwUx # This makes imw_indent available as a class method
|
137
|
+
# include ImwUx # This makes imw_indent available as a class method
|
138
|
+
|
139
|
+
def initialize(document_filename, initial_blocks = [])
|
140
|
+
@inpseq = InputSequencer.new(document_filename, initial_blocks)
|
141
|
+
end
|
142
|
+
|
143
|
+
def do_run
|
144
|
+
@inpseq.run do |msg, data|
|
145
|
+
case msg
|
146
|
+
when :parse_document # once for each menu
|
147
|
+
# self.imw_ins data, '@ - parse document'
|
148
|
+
parse_document(data)
|
149
|
+
when :display_menu
|
150
|
+
puts "? - Select a block to execute (or type #{$texit} to exit):"
|
151
|
+
puts "doc: #{@document_filename}"
|
152
|
+
display_menu
|
153
|
+
when :user_choice
|
154
|
+
$stdin.gets.chomp
|
155
|
+
when :execute_block
|
156
|
+
# self.imw_ins data, "! - Executing block"
|
157
|
+
execute_block(data)
|
158
|
+
when :exit?
|
159
|
+
data == $texit
|
160
|
+
when :stay?
|
161
|
+
data == $stay
|
162
|
+
else
|
163
|
+
raise "Invalid message: #{msg}"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
private
|
169
|
+
|
170
|
+
def display_menu
|
171
|
+
@blocks.each_key { |block| puts block }
|
172
|
+
puts $texit
|
173
|
+
end
|
174
|
+
|
175
|
+
def execute_block(block_name)
|
176
|
+
content = @blocks[block_name]
|
177
|
+
if content
|
178
|
+
puts content
|
179
|
+
if block_name.start_with?('l')
|
180
|
+
interpret_link_block(content)
|
181
|
+
else
|
182
|
+
InputSequencer.next_link_state
|
183
|
+
end
|
184
|
+
else
|
185
|
+
puts "! - Block not found: #{block_name}"
|
186
|
+
InputSequencer.next_link_state
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def interpret_link_block(content)
|
191
|
+
# Stub: Interpret a "Link" block, extracting directives for the next action
|
192
|
+
# In a real implementation, this would parse the content for next block or document
|
193
|
+
puts "! - Interpreting Link block: #{content}"
|
194
|
+
InputSequencer.next_link_state(
|
195
|
+
block_name: content.fetch('block_name', nil),
|
196
|
+
document_filename: content.fetch('document_filename', nil),
|
197
|
+
prior_block_was_link: true
|
198
|
+
)
|
199
|
+
end
|
200
|
+
|
201
|
+
def load_document(_name)
|
202
|
+
# Stub: Load and return the content of the document
|
203
|
+
# In a real implementation, this would read the file and return its content
|
204
|
+
# "Block 1: Content of block 1\nBlock 2: Content of block 2\nLink: block_name 3, document_filename doc2"
|
205
|
+
$doc1.map { |key, value| "#{key}: #{value}" }.join("\n")
|
206
|
+
end
|
207
|
+
|
208
|
+
def parse_document(data)
|
209
|
+
load_document(data)
|
210
|
+
# Stub: Parse document content into blocks
|
211
|
+
# In a real implementation, this would split the document into named blocks
|
212
|
+
@blocks = $doc1
|
213
|
+
end
|
214
|
+
end
|
215
|
+
# MDE.singleton_class.prepend(ImwUx)
|
216
|
+
# MDE.prepend(ImwUx)
|
217
|
+
|
218
|
+
def main
|
219
|
+
if ARGV.empty?
|
220
|
+
puts "Usage: #{__FILE__} document_filename [block_name...]"
|
221
|
+
exit(1)
|
222
|
+
end
|
223
|
+
document_filename = ARGV.shift
|
224
|
+
initial_blocks = ARGV
|
225
|
+
mde = MDE.new(document_filename, initial_blocks)
|
226
|
+
mde.do_run
|
227
|
+
end
|
228
|
+
|
229
|
+
main
|
data/lib/link_history.rb
CHANGED
@@ -4,8 +4,9 @@
|
|
4
4
|
# encoding=utf-8
|
5
5
|
module MarkdownExec
|
6
6
|
class LinkState
|
7
|
-
attr_accessor :block_name, :document_filename,
|
8
|
-
:inherited_block_names, :inherited_dependencies, :inherited_lines
|
7
|
+
attr_accessor :block_name, :display_menu, :document_filename,
|
8
|
+
:inherited_block_names, :inherited_dependencies, :inherited_lines,
|
9
|
+
:prior_block_was_link
|
9
10
|
|
10
11
|
# Initialize the LinkState with keyword arguments for each attribute.
|
11
12
|
# @param block_name [String, nil] the name of the block.
|
@@ -13,13 +14,16 @@ module MarkdownExec
|
|
13
14
|
# @param inherited_block_names [Array<String>, nil] the names of the inherited blocks.
|
14
15
|
# @param inherited_dependencies [?, nil] the dependecy hierarcy.
|
15
16
|
# @param inherited_lines [Array<String>, nil] the inherited lines of code.
|
16
|
-
def initialize(block_name: nil, document_filename: nil,
|
17
|
-
inherited_block_names: [], inherited_dependencies: nil, inherited_lines: nil
|
17
|
+
def initialize(block_name: nil, display_menu: nil, document_filename: nil,
|
18
|
+
inherited_block_names: [], inherited_dependencies: nil, inherited_lines: nil,
|
19
|
+
prior_block_was_link: nil)
|
18
20
|
@block_name = block_name
|
21
|
+
@display_menu = display_menu
|
19
22
|
@document_filename = document_filename
|
20
23
|
@inherited_block_names = inherited_block_names
|
21
24
|
@inherited_dependencies = inherited_dependencies
|
22
25
|
@inherited_lines = inherited_lines
|
26
|
+
@prior_block_was_link = prior_block_was_link
|
23
27
|
end
|
24
28
|
|
25
29
|
# Creates an empty LinkState instance.
|
@@ -34,10 +38,12 @@ module MarkdownExec
|
|
34
38
|
def ==(other)
|
35
39
|
other.class == self.class &&
|
36
40
|
other.block_name == block_name &&
|
41
|
+
other.display_menu == display_menu &&
|
37
42
|
other.document_filename == document_filename &&
|
38
43
|
other.inherited_block_names == inherited_block_names &&
|
39
44
|
other.inherited_dependencies == inherited_dependencies &&
|
40
|
-
other.inherited_lines == inherited_lines
|
45
|
+
other.inherited_lines == inherited_lines &&
|
46
|
+
other.prior_block_was_link == prior_block_was_link
|
41
47
|
end
|
42
48
|
end
|
43
49
|
|
data/lib/markdown_exec.rb
CHANGED
@@ -10,6 +10,7 @@ require 'open3'
|
|
10
10
|
require 'optparse'
|
11
11
|
require 'shellwords'
|
12
12
|
require 'tmpdir'
|
13
|
+
# require 'tty-file'
|
13
14
|
require 'tty-prompt'
|
14
15
|
require 'yaml'
|
15
16
|
|
@@ -25,6 +26,7 @@ require_relative 'fcb'
|
|
25
26
|
require_relative 'filter'
|
26
27
|
require_relative 'fout'
|
27
28
|
require_relative 'hash_delegator'
|
29
|
+
require_relative 'input_sequencer'
|
28
30
|
require_relative 'markdown_exec/version'
|
29
31
|
require_relative 'mdoc'
|
30
32
|
require_relative 'option_value'
|
@@ -103,7 +105,6 @@ module MarkdownExec
|
|
103
105
|
|
104
106
|
##
|
105
107
|
#
|
106
|
-
# rubocop:disable Layout/LineLength
|
107
108
|
# :reek:DuplicateMethodCall { allow_calls: ['block', 'item', 'lm', 'opts', 'option', '@options', 'required_blocks'] }
|
108
109
|
# rubocop:enable Layout/LineLength
|
109
110
|
# :reek:MissingSafeMethod { exclude: [ read_configuration_file! ] }
|
@@ -293,15 +294,12 @@ module MarkdownExec
|
|
293
294
|
|
294
295
|
## position 1: block name (optional)
|
295
296
|
#
|
296
|
-
block_name =
|
297
|
-
@options[:block_name] = block_name if block_name.present?
|
297
|
+
@options[:block_name] = nil
|
298
298
|
@options[:input_cli_rest] = @rest
|
299
299
|
rescue FileMissingError
|
300
300
|
warn_format('finalize_cli_argument_processing',
|
301
301
|
"File missing -- #{$!}", { abort: true })
|
302
|
-
|
303
|
-
# @options[:filename] = ''
|
304
|
-
# exit 1
|
302
|
+
exit 1
|
305
303
|
rescue StandardError
|
306
304
|
error_handler('finalize_cli_argument_processing')
|
307
305
|
end
|
data/lib/mdoc.rb
CHANGED
@@ -70,10 +70,10 @@ module MarkdownExec
|
|
70
70
|
# @param name [String] The name of the code block to start the retrieval from.
|
71
71
|
# @return [Array<Hash>] An array of code blocks required by the specified code block.
|
72
72
|
#
|
73
|
-
def collect_block_dependencies(
|
74
|
-
name_block = get_block_by_anyname(
|
73
|
+
def collect_block_dependencies(anyname:)
|
74
|
+
name_block = get_block_by_anyname(anyname)
|
75
75
|
if name_block.nil? || name_block.keys.empty?
|
76
|
-
raise "Named code block `#{
|
76
|
+
raise "Named code block `#{anyname}` not found. (@#{__LINE__})"
|
77
77
|
end
|
78
78
|
|
79
79
|
nickname = name_block[:nickname] || name_block[:oname]
|
@@ -116,9 +116,9 @@ module MarkdownExec
|
|
116
116
|
# @param name [String] The name of the code block to start the collection from.
|
117
117
|
# @return [Array<String>] An array of strings containing the collected code blocks.
|
118
118
|
#
|
119
|
-
def collect_recursively_required_code(
|
119
|
+
def collect_recursively_required_code(anyname:, block_source:, label_body: true, label_format_above: nil,
|
120
120
|
label_format_below: nil)
|
121
|
-
block_search = collect_block_dependencies(
|
121
|
+
block_search = collect_block_dependencies(anyname: anyname)
|
122
122
|
if block_search[:blocks]
|
123
123
|
blocks = collect_wrapped_blocks(block_search[:blocks])
|
124
124
|
# &bc 'blocks.count:',blocks.count
|
@@ -453,12 +453,12 @@ if $PROGRAM_NAME == __FILE__
|
|
453
453
|
|
454
454
|
### broken test
|
455
455
|
def test_collect_block_dependencies
|
456
|
-
result = @doc.collect_block_dependencies('block3')[:blocks]
|
456
|
+
result = @doc.collect_block_dependencies(anyname: 'block3')[:blocks]
|
457
457
|
expected_result = [@table[0], @table[1], @table[2]]
|
458
458
|
assert_equal expected_result, result
|
459
459
|
|
460
460
|
assert_raises(RuntimeError) do
|
461
|
-
@doc.collect_block_dependencies('missing_block')
|
461
|
+
@doc.collect_block_dependencies(anyname: 'missing_block')
|
462
462
|
end
|
463
463
|
end
|
464
464
|
|
data/lib/menu.src.yml
CHANGED
@@ -121,6 +121,22 @@
|
|
121
121
|
:opt_name: dump_blocks_in_file
|
122
122
|
:procname: val_as_bool
|
123
123
|
|
124
|
+
- :arg_name: BOOL
|
125
|
+
:default: false
|
126
|
+
:description: Dump inherited block_names
|
127
|
+
:env_var: MDE_DUMP_INHERITED_BLOCK_NAMES
|
128
|
+
:long_name: dump-dump-inherited-block_names
|
129
|
+
:opt_name: dump_inherited_block_names
|
130
|
+
:procname: val_as_bool
|
131
|
+
|
132
|
+
- :arg_name: BOOL
|
133
|
+
:default: false
|
134
|
+
:description: Dump inherited dependencies
|
135
|
+
:env_var: MDE_DUMP_INHERITED_DEPENDENCIES
|
136
|
+
:long_name: dump-dump-inherited-dependencies
|
137
|
+
:opt_name: dump_inherited_dependencies
|
138
|
+
:procname: val_as_bool
|
139
|
+
|
124
140
|
- :arg_name: BOOL
|
125
141
|
:default: false
|
126
142
|
:description: Dump inherited lines
|
@@ -211,11 +227,12 @@
|
|
211
227
|
tell the first window
|
212
228
|
set bounds to {xoff, yoff, xoff + winWidth, yoff + winHeight}
|
213
229
|
tell the current session
|
214
|
-
write text "
|
215
|
-
write text "
|
230
|
+
write text "s=\"%{script_filespec}\""
|
231
|
+
write text "o=\"%{output_filespec}\""
|
216
232
|
write text "echo -ne \"\\033]; %{started_at} - %{document_filename} - %{block_name} \\007\""
|
217
233
|
write text "cd \"%{home}\""
|
218
|
-
write text "\"%{script_filename}\" | tee \"%{output_filespec}\""
|
234
|
+
write text "# \"%{script_filename}\" | tee -a \"%{output_filespec}\""
|
235
|
+
write text "\"$s\" | tee -a \"$o\""
|
219
236
|
end tell
|
220
237
|
end tell
|
221
238
|
end tell'
|
@@ -591,9 +608,8 @@
|
|
591
608
|
:opt_name: menu_note_format
|
592
609
|
:procname: val_as_str
|
593
610
|
|
594
|
-
## all
|
595
|
-
|
596
|
-
- :default: "^(?<line>.*?) *$"
|
611
|
+
## all lines that do not start with "/ " are notes
|
612
|
+
- :default: "^(?<line>(?!/ ).*)?$"
|
597
613
|
:description: Pattern for notes in block selection menu
|
598
614
|
:env_var: MDE_MENU_NOTE_MATCH
|
599
615
|
:opt_name: menu_note_match
|
@@ -712,21 +728,25 @@
|
|
712
728
|
:env_var: MDE_OUTPUT_ASSIGNMENT_BEGIN
|
713
729
|
:opt_name: output_assignment_begin
|
714
730
|
:procname: val_as_str
|
731
|
+
|
715
732
|
- :default:
|
716
733
|
:description: Expression to match to stop collecting lines
|
717
734
|
:env_var: MDE_OUTPUT_ASSIGNMENT_END
|
718
|
-
:opt_name:
|
735
|
+
:opt_name: output_assignment_end
|
719
736
|
:procname: val_as_str
|
720
|
-
|
737
|
+
|
738
|
+
- :default: "%{line}"
|
721
739
|
:description: Format for assignments from output
|
722
740
|
:env_var: MDE_OUTPUT_ASSIGNMENT_FORMAT
|
723
741
|
:opt_name: output_assignment_format
|
724
742
|
:procname: val_as_str
|
743
|
+
|
725
744
|
- :default: "^ *(?<line>\\w+=.*?) *$"
|
726
745
|
:description: Pattern for assignments from output
|
727
746
|
:env_var: MDE_OUTPUT_ASSIGNMENT_MATCH
|
728
747
|
:opt_name: output_assignment_match
|
729
748
|
:procname: val_as_str
|
749
|
+
|
730
750
|
- :arg_name: BOOL
|
731
751
|
:default: false
|
732
752
|
:description: Display summary for execution
|
@@ -821,12 +841,24 @@
|
|
821
841
|
:opt_name: prompt_debounce
|
822
842
|
:procname: val_as_str
|
823
843
|
|
844
|
+
- :default: 'Name? '
|
845
|
+
:description: Prompt to enter a filespec
|
846
|
+
:env_var: MDE_PROMPT_ENTER_FILESPEC
|
847
|
+
:opt_name: prompt_enter_filespec
|
848
|
+
:procname: val_as_str
|
849
|
+
|
824
850
|
- :default: Exit
|
825
851
|
:description: Prompt to exit app
|
826
852
|
:env_var: MDE_PROMPT_EXIT
|
827
853
|
:opt_name: prompt_exit
|
828
854
|
:procname: val_as_str
|
829
855
|
|
856
|
+
- :default: Other
|
857
|
+
:description: Prompt for a custom file name
|
858
|
+
:env_var: MDE_PROMPT_FILESPEC_OTHER
|
859
|
+
:opt_name: prompt_filespec_other
|
860
|
+
:procname: val_as_str
|
861
|
+
|
830
862
|
- :default: 'No'
|
831
863
|
:description: Prompt for no
|
832
864
|
:env_var: MDE_PROMPT_NO
|
@@ -851,6 +883,12 @@
|
|
851
883
|
:opt_name: prompt_select_block
|
852
884
|
:procname: val_as_str
|
853
885
|
|
886
|
+
- :default: "\nChoose a file:"
|
887
|
+
:description: Prompt to select a file with inherited lines
|
888
|
+
:env_var: MDE_PROMPT_SELECT_CODE_FILE
|
889
|
+
:opt_name: prompt_select_code_file
|
890
|
+
:procname: val_as_str
|
891
|
+
|
854
892
|
- :default: "\nChoose a file:"
|
855
893
|
:description: Prompt to select a markdown document
|
856
894
|
:env_var: MDE_PROMPT_SELECT_MD
|
@@ -863,6 +901,12 @@
|
|
863
901
|
:opt_name: prompt_select_output
|
864
902
|
:procname: val_as_str
|
865
903
|
|
904
|
+
- :default: 'Expr: %{expr}'
|
905
|
+
:description: prompt_show_expr_format
|
906
|
+
:env_var: MDE_PROMPT_SHOW_EXPR_FORMAT
|
907
|
+
:opt_name: prompt_show_expr_format
|
908
|
+
:procname: val_as_str
|
909
|
+
|
866
910
|
- :default: Uninterrupted
|
867
911
|
:description: Uninterrupted execution
|
868
912
|
:env_var: MDE_PROMPT_UNINTERRUPTED
|
@@ -1047,12 +1091,18 @@
|
|
1047
1091
|
:opt_name: shell_code_label_format_above
|
1048
1092
|
:procname: val_as_str
|
1049
1093
|
|
1050
|
-
- :default: "# -v- +%{block_name} -o- %{document_filename} -v-"
|
1094
|
+
- :default: "# -v- +%{block_name} -o- %{document_filename} -o- %{time_now_date} -v-"
|
1051
1095
|
:description: shell_code_label_format_below
|
1052
1096
|
:env_var: MDE_SHELL_CODE_LABEL_FORMAT_BELOW
|
1053
1097
|
:opt_name: shell_code_label_format_below
|
1054
1098
|
:procname: val_as_str
|
1055
1099
|
|
1100
|
+
- :default: "%FT%TZ"
|
1101
|
+
:description: Format for time in code lael
|
1102
|
+
:env_var: MDE_SHELL_CODE_LABEL_TIME_FORMAT
|
1103
|
+
:opt_name: shell_code_label_time_format
|
1104
|
+
:procname: val_as_str
|
1105
|
+
|
1056
1106
|
- :description: List tab completions
|
1057
1107
|
:long_name: tab-completions
|
1058
1108
|
:opt_name: tab_completions
|
data/lib/menu.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# MDE - Markdown Executor (
|
1
|
+
# MDE - Markdown Executor (2.0.0)
|
2
2
|
---
|
3
3
|
- :description: Show current configuration values
|
4
4
|
:procname: show_config
|
@@ -102,6 +102,20 @@
|
|
102
102
|
:long_name: dump-blocks-in-file
|
103
103
|
:opt_name: dump_blocks_in_file
|
104
104
|
:procname: val_as_bool
|
105
|
+
- :arg_name: BOOL
|
106
|
+
:default: false
|
107
|
+
:description: Dump inherited block_names
|
108
|
+
:env_var: MDE_DUMP_INHERITED_BLOCK_NAMES
|
109
|
+
:long_name: dump-dump-inherited-block_names
|
110
|
+
:opt_name: dump_inherited_block_names
|
111
|
+
:procname: val_as_bool
|
112
|
+
- :arg_name: BOOL
|
113
|
+
:default: false
|
114
|
+
:description: Dump inherited dependencies
|
115
|
+
:env_var: MDE_DUMP_INHERITED_DEPENDENCIES
|
116
|
+
:long_name: dump-dump-inherited-dependencies
|
117
|
+
:opt_name: dump_inherited_dependencies
|
118
|
+
:procname: val_as_bool
|
105
119
|
- :arg_name: BOOL
|
106
120
|
:default: false
|
107
121
|
:description: Dump inherited lines
|
@@ -173,12 +187,12 @@
|
|
173
187
|
yoff to xoff mod (screenHeight - winHeight)\n \n create window with
|
174
188
|
default profile\n tell the first window\n set bounds to {xoff,
|
175
189
|
yoff, xoff + winWidth, yoff + winHeight}\n tell the current session\n
|
176
|
-
\ write text \"
|
177
|
-
\"
|
190
|
+
\ write text \"s=\\\"%{script_filespec}\\\"\"\n write
|
191
|
+
text \"o=\\\"%{output_filespec}\\\"\"\n write text \"echo -ne \\\"\\\\033];
|
178
192
|
%{started_at} - %{document_filename} - %{block_name} \\\\007\\\"\"\n write
|
179
|
-
text \"cd \\\"%{home}\\\"\"\n write text \"\\\"%{script_filename}\\\"
|
180
|
-
| tee \\\"%{output_filespec}\\\"\"\n
|
181
|
-
tell'\n"
|
193
|
+
text \"cd \\\"%{home}\\\"\"\n write text \"# \\\"%{script_filename}\\\"
|
194
|
+
| tee -a \\\"%{output_filespec}\\\"\"\n write text \"\\\"$s\\\"
|
195
|
+
| tee -a \\\"$o\\\"\"\n end tell\n end tell\n end tell'\n"
|
182
196
|
:description: execute_command_format
|
183
197
|
:env_var: MDE_EXECUTE_COMMAND_FORMAT
|
184
198
|
:opt_name: execute_command_format
|
@@ -491,7 +505,7 @@
|
|
491
505
|
:env_var: MDE_MENU_NOTE_FORMAT
|
492
506
|
:opt_name: menu_note_format
|
493
507
|
:procname: val_as_str
|
494
|
-
- :default: "^(?<line
|
508
|
+
- :default: "^(?<line>(?!/ ).*)?$"
|
495
509
|
:description: Pattern for notes in block selection menu
|
496
510
|
:env_var: MDE_MENU_NOTE_MATCH
|
497
511
|
:opt_name: menu_note_match
|
@@ -595,9 +609,9 @@
|
|
595
609
|
- :default:
|
596
610
|
:description: Expression to match to stop collecting lines
|
597
611
|
:env_var: MDE_OUTPUT_ASSIGNMENT_END
|
598
|
-
:opt_name:
|
612
|
+
:opt_name: output_assignment_end
|
599
613
|
:procname: val_as_str
|
600
|
-
- :default: "%{line}
|
614
|
+
- :default: "%{line}"
|
601
615
|
:description: Format for assignments from output
|
602
616
|
:env_var: MDE_OUTPUT_ASSIGNMENT_FORMAT
|
603
617
|
:opt_name: output_assignment_format
|
@@ -693,11 +707,21 @@
|
|
693
707
|
:env_var: MDE_PROMPT_DEBOUNCE
|
694
708
|
:opt_name: prompt_debounce
|
695
709
|
:procname: val_as_str
|
710
|
+
- :default: 'Name? '
|
711
|
+
:description: Prompt to enter a filespec
|
712
|
+
:env_var: MDE_PROMPT_ENTER_FILESPEC
|
713
|
+
:opt_name: prompt_enter_filespec
|
714
|
+
:procname: val_as_str
|
696
715
|
- :default: Exit
|
697
716
|
:description: Prompt to exit app
|
698
717
|
:env_var: MDE_PROMPT_EXIT
|
699
718
|
:opt_name: prompt_exit
|
700
719
|
:procname: val_as_str
|
720
|
+
- :default: Other
|
721
|
+
:description: Prompt for a custom file name
|
722
|
+
:env_var: MDE_PROMPT_FILESPEC_OTHER
|
723
|
+
:opt_name: prompt_filespec_other
|
724
|
+
:procname: val_as_str
|
701
725
|
- :default: 'No'
|
702
726
|
:description: Prompt for no
|
703
727
|
:env_var: MDE_PROMPT_NO
|
@@ -722,6 +746,13 @@
|
|
722
746
|
:procname: val_as_str
|
723
747
|
- :default: |2-
|
724
748
|
|
749
|
+
Choose a file:
|
750
|
+
:description: Prompt to select a file with inherited lines
|
751
|
+
:env_var: MDE_PROMPT_SELECT_CODE_FILE
|
752
|
+
:opt_name: prompt_select_code_file
|
753
|
+
:procname: val_as_str
|
754
|
+
- :default: |2-
|
755
|
+
|
725
756
|
Choose a file:
|
726
757
|
:description: Prompt to select a markdown document
|
727
758
|
:env_var: MDE_PROMPT_SELECT_MD
|
@@ -734,6 +765,11 @@
|
|
734
765
|
:env_var: MDE_PROMPT_SELECT_OUTPUT
|
735
766
|
:opt_name: prompt_select_output
|
736
767
|
:procname: val_as_str
|
768
|
+
- :default: 'Expr: %{expr}'
|
769
|
+
:description: prompt_show_expr_format
|
770
|
+
:env_var: MDE_PROMPT_SHOW_EXPR_FORMAT
|
771
|
+
:opt_name: prompt_show_expr_format
|
772
|
+
:procname: val_as_str
|
737
773
|
- :default: Uninterrupted
|
738
774
|
:description: Uninterrupted execution
|
739
775
|
:env_var: MDE_PROMPT_UNINTERRUPTED
|
@@ -894,11 +930,17 @@
|
|
894
930
|
:env_var: MDE_SHELL_CODE_LABEL_FORMAT_ABOVE
|
895
931
|
:opt_name: shell_code_label_format_above
|
896
932
|
:procname: val_as_str
|
897
|
-
- :default: "# -v- +%{block_name} -o- %{document_filename} -
|
933
|
+
- :default: "# -v- +%{block_name} -o- %{document_filename} -o- %{time_now_date}
|
934
|
+
\ -v-"
|
898
935
|
:description: shell_code_label_format_below
|
899
936
|
:env_var: MDE_SHELL_CODE_LABEL_FORMAT_BELOW
|
900
937
|
:opt_name: shell_code_label_format_below
|
901
938
|
:procname: val_as_str
|
939
|
+
- :default: "%FT%TZ"
|
940
|
+
:description: Format for time in code lael
|
941
|
+
:env_var: MDE_SHELL_CODE_LABEL_TIME_FORMAT
|
942
|
+
:opt_name: shell_code_label_time_format
|
943
|
+
:procname: val_as_str
|
902
944
|
- :description: List tab completions
|
903
945
|
:long_name: tab-completions
|
904
946
|
:opt_name: tab_completions
|
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fareed Stevenson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clipboard
|
@@ -114,16 +114,18 @@ files:
|
|
114
114
|
- bin/tab_completion.sh
|
115
115
|
- bin/tab_completion.sh.erb
|
116
116
|
- examples/colors.md
|
117
|
+
- examples/document_options.md
|
117
118
|
- examples/duplicate_block.md
|
118
119
|
- examples/import0.md
|
119
120
|
- examples/import1.md
|
120
121
|
- examples/include.md
|
121
122
|
- examples/indent.md
|
122
|
-
- examples/
|
123
|
+
- examples/index.md
|
123
124
|
- examples/linked.md
|
124
125
|
- examples/linked1.md
|
125
126
|
- examples/linked2.md
|
126
127
|
- examples/linked3.md
|
128
|
+
- examples/llm.md
|
127
129
|
- examples/load1.sh
|
128
130
|
- examples/load2.sh
|
129
131
|
- examples/nickname.md
|
@@ -152,6 +154,7 @@ files:
|
|
152
154
|
- lib/fout.rb
|
153
155
|
- lib/hash.rb
|
154
156
|
- lib/hash_delegator.rb
|
157
|
+
- lib/input_sequencer.rb
|
155
158
|
- lib/link_history.rb
|
156
159
|
- lib/markdown_exec.rb
|
157
160
|
- lib/markdown_exec/version.rb
|