markdown_exec 1.8.9 → 2.0.1
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 +18 -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 +60 -11
- data/lib/menu.yml +56 -15
- 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
|
@@ -203,7 +219,7 @@
|
|
203
219
|
end tell
|
204
220
|
|
205
221
|
set winHeight to (screenHeight * 2 / 3)
|
206
|
-
set winWidth to (screenWidth /
|
222
|
+
set winWidth to (screenWidth * 2 / 3)
|
207
223
|
set xoff to menubarHeight * %{batch_index}
|
208
224
|
set yoff to xoff mod (screenHeight - winHeight)
|
209
225
|
|
@@ -211,11 +227,11 @@
|
|
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 "
|
216
|
-
write text "echo -ne \"\\033]; %{started_at} - %{document_filename} - %{block_name} \\007\""
|
230
|
+
write text "s=\"%{script_filespec}\""
|
231
|
+
write text "o=\"%{output_filespec}\""
|
217
232
|
write text "cd \"%{home}\""
|
218
|
-
write text "\"%{
|
233
|
+
write text "echo -ne \"\\033]; %{started_at} - %{document_filename} - %{block_name} \\007\""
|
234
|
+
write text "\"$s\" | tee -a \"$o\""
|
219
235
|
end tell
|
220
236
|
end tell
|
221
237
|
end tell'
|
@@ -591,9 +607,8 @@
|
|
591
607
|
:opt_name: menu_note_format
|
592
608
|
:procname: val_as_str
|
593
609
|
|
594
|
-
## all
|
595
|
-
|
596
|
-
- :default: "^(?<line>.*?) *$"
|
610
|
+
## all lines that do not start with "/ " are notes
|
611
|
+
- :default: "^(?<line>(?!/ ).*)?$"
|
597
612
|
:description: Pattern for notes in block selection menu
|
598
613
|
:env_var: MDE_MENU_NOTE_MATCH
|
599
614
|
:opt_name: menu_note_match
|
@@ -712,21 +727,25 @@
|
|
712
727
|
:env_var: MDE_OUTPUT_ASSIGNMENT_BEGIN
|
713
728
|
:opt_name: output_assignment_begin
|
714
729
|
:procname: val_as_str
|
730
|
+
|
715
731
|
- :default:
|
716
732
|
:description: Expression to match to stop collecting lines
|
717
733
|
:env_var: MDE_OUTPUT_ASSIGNMENT_END
|
718
|
-
:opt_name:
|
734
|
+
:opt_name: output_assignment_end
|
719
735
|
:procname: val_as_str
|
720
|
-
|
736
|
+
|
737
|
+
- :default: "%{line}"
|
721
738
|
:description: Format for assignments from output
|
722
739
|
:env_var: MDE_OUTPUT_ASSIGNMENT_FORMAT
|
723
740
|
:opt_name: output_assignment_format
|
724
741
|
:procname: val_as_str
|
742
|
+
|
725
743
|
- :default: "^ *(?<line>\\w+=.*?) *$"
|
726
744
|
:description: Pattern for assignments from output
|
727
745
|
:env_var: MDE_OUTPUT_ASSIGNMENT_MATCH
|
728
746
|
:opt_name: output_assignment_match
|
729
747
|
:procname: val_as_str
|
748
|
+
|
730
749
|
- :arg_name: BOOL
|
731
750
|
:default: false
|
732
751
|
:description: Display summary for execution
|
@@ -821,12 +840,24 @@
|
|
821
840
|
:opt_name: prompt_debounce
|
822
841
|
:procname: val_as_str
|
823
842
|
|
843
|
+
- :default: 'Name? '
|
844
|
+
:description: Prompt to enter a filespec
|
845
|
+
:env_var: MDE_PROMPT_ENTER_FILESPEC
|
846
|
+
:opt_name: prompt_enter_filespec
|
847
|
+
:procname: val_as_str
|
848
|
+
|
824
849
|
- :default: Exit
|
825
850
|
:description: Prompt to exit app
|
826
851
|
:env_var: MDE_PROMPT_EXIT
|
827
852
|
:opt_name: prompt_exit
|
828
853
|
:procname: val_as_str
|
829
854
|
|
855
|
+
- :default: Other
|
856
|
+
:description: Prompt for a custom file name
|
857
|
+
:env_var: MDE_PROMPT_FILESPEC_OTHER
|
858
|
+
:opt_name: prompt_filespec_other
|
859
|
+
:procname: val_as_str
|
860
|
+
|
830
861
|
- :default: 'No'
|
831
862
|
:description: Prompt for no
|
832
863
|
:env_var: MDE_PROMPT_NO
|
@@ -851,6 +882,12 @@
|
|
851
882
|
:opt_name: prompt_select_block
|
852
883
|
:procname: val_as_str
|
853
884
|
|
885
|
+
- :default: "\nChoose a file:"
|
886
|
+
:description: Prompt to select a file with inherited lines
|
887
|
+
:env_var: MDE_PROMPT_SELECT_CODE_FILE
|
888
|
+
:opt_name: prompt_select_code_file
|
889
|
+
:procname: val_as_str
|
890
|
+
|
854
891
|
- :default: "\nChoose a file:"
|
855
892
|
:description: Prompt to select a markdown document
|
856
893
|
:env_var: MDE_PROMPT_SELECT_MD
|
@@ -863,6 +900,12 @@
|
|
863
900
|
:opt_name: prompt_select_output
|
864
901
|
:procname: val_as_str
|
865
902
|
|
903
|
+
- :default: 'Expr: %{expr}'
|
904
|
+
:description: prompt_show_expr_format
|
905
|
+
:env_var: MDE_PROMPT_SHOW_EXPR_FORMAT
|
906
|
+
:opt_name: prompt_show_expr_format
|
907
|
+
:procname: val_as_str
|
908
|
+
|
866
909
|
- :default: Uninterrupted
|
867
910
|
:description: Uninterrupted execution
|
868
911
|
:env_var: MDE_PROMPT_UNINTERRUPTED
|
@@ -1047,12 +1090,18 @@
|
|
1047
1090
|
:opt_name: shell_code_label_format_above
|
1048
1091
|
:procname: val_as_str
|
1049
1092
|
|
1050
|
-
- :default: "# -v- +%{block_name} -o- %{document_filename} -v-"
|
1093
|
+
- :default: "# -v- +%{block_name} -o- %{document_filename} -o- %{time_now_date} -v-"
|
1051
1094
|
:description: shell_code_label_format_below
|
1052
1095
|
:env_var: MDE_SHELL_CODE_LABEL_FORMAT_BELOW
|
1053
1096
|
:opt_name: shell_code_label_format_below
|
1054
1097
|
:procname: val_as_str
|
1055
1098
|
|
1099
|
+
- :default: "%FT%TZ"
|
1100
|
+
:description: Format for time in code lael
|
1101
|
+
:env_var: MDE_SHELL_CODE_LABEL_TIME_FORMAT
|
1102
|
+
:opt_name: shell_code_label_time_format
|
1103
|
+
:procname: val_as_str
|
1104
|
+
|
1056
1105
|
- :description: List tab completions
|
1057
1106
|
:long_name: tab-completions
|
1058
1107
|
:opt_name: tab_completions
|
data/lib/menu.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# MDE - Markdown Executor (
|
1
|
+
# MDE - Markdown Executor (2.0.1)
|
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
|
@@ -169,16 +183,15 @@
|
|
169
183
|
tell\n tell application process \"Finder\"\n set {missing
|
170
184
|
value, menubarHeight} to the size of menu bar 1\n end tell\n end
|
171
185
|
tell\n\n set winHeight to (screenHeight * 2 / 3)\n set winWidth
|
172
|
-
to (screenWidth /
|
173
|
-
yoff to xoff mod (screenHeight - winHeight)\n \n create
|
174
|
-
default profile\n tell the first window\n set bounds
|
175
|
-
yoff, xoff + winWidth, yoff + winHeight}\n tell the current
|
176
|
-
\
|
177
|
-
\"
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
tell'\n"
|
186
|
+
to (screenWidth * 2 / 3)\n set xoff to menubarHeight * %{batch_index}\n
|
187
|
+
\ set yoff to xoff mod (screenHeight - winHeight)\n \n create
|
188
|
+
window with default profile\n tell the first window\n set bounds
|
189
|
+
to {xoff, yoff, xoff + winWidth, yoff + winHeight}\n tell the current
|
190
|
+
session\n write text \"s=\\\"%{script_filespec}\\\"\"\n write
|
191
|
+
text \"o=\\\"%{output_filespec}\\\"\"\n write text \"cd \\\"%{home}\\\"\"\n
|
192
|
+
\ write text \"echo -ne \\\"\\\\033]; %{started_at} - %{document_filename}
|
193
|
+
- %{block_name} \\\\007\\\"\"\n write text \"\\\"$s\\\" | tee -a
|
194
|
+
\\\"$o\\\"\"\n end tell\n end tell\n end tell'\n"
|
182
195
|
:description: execute_command_format
|
183
196
|
:env_var: MDE_EXECUTE_COMMAND_FORMAT
|
184
197
|
:opt_name: execute_command_format
|
@@ -491,7 +504,7 @@
|
|
491
504
|
:env_var: MDE_MENU_NOTE_FORMAT
|
492
505
|
:opt_name: menu_note_format
|
493
506
|
:procname: val_as_str
|
494
|
-
- :default: "^(?<line
|
507
|
+
- :default: "^(?<line>(?!/ ).*)?$"
|
495
508
|
:description: Pattern for notes in block selection menu
|
496
509
|
:env_var: MDE_MENU_NOTE_MATCH
|
497
510
|
:opt_name: menu_note_match
|
@@ -595,9 +608,9 @@
|
|
595
608
|
- :default:
|
596
609
|
:description: Expression to match to stop collecting lines
|
597
610
|
:env_var: MDE_OUTPUT_ASSIGNMENT_END
|
598
|
-
:opt_name:
|
611
|
+
:opt_name: output_assignment_end
|
599
612
|
:procname: val_as_str
|
600
|
-
- :default: "%{line}
|
613
|
+
- :default: "%{line}"
|
601
614
|
:description: Format for assignments from output
|
602
615
|
:env_var: MDE_OUTPUT_ASSIGNMENT_FORMAT
|
603
616
|
:opt_name: output_assignment_format
|
@@ -693,11 +706,21 @@
|
|
693
706
|
:env_var: MDE_PROMPT_DEBOUNCE
|
694
707
|
:opt_name: prompt_debounce
|
695
708
|
:procname: val_as_str
|
709
|
+
- :default: 'Name? '
|
710
|
+
:description: Prompt to enter a filespec
|
711
|
+
:env_var: MDE_PROMPT_ENTER_FILESPEC
|
712
|
+
:opt_name: prompt_enter_filespec
|
713
|
+
:procname: val_as_str
|
696
714
|
- :default: Exit
|
697
715
|
:description: Prompt to exit app
|
698
716
|
:env_var: MDE_PROMPT_EXIT
|
699
717
|
:opt_name: prompt_exit
|
700
718
|
:procname: val_as_str
|
719
|
+
- :default: Other
|
720
|
+
:description: Prompt for a custom file name
|
721
|
+
:env_var: MDE_PROMPT_FILESPEC_OTHER
|
722
|
+
:opt_name: prompt_filespec_other
|
723
|
+
:procname: val_as_str
|
701
724
|
- :default: 'No'
|
702
725
|
:description: Prompt for no
|
703
726
|
:env_var: MDE_PROMPT_NO
|
@@ -722,6 +745,13 @@
|
|
722
745
|
:procname: val_as_str
|
723
746
|
- :default: |2-
|
724
747
|
|
748
|
+
Choose a file:
|
749
|
+
:description: Prompt to select a file with inherited lines
|
750
|
+
:env_var: MDE_PROMPT_SELECT_CODE_FILE
|
751
|
+
:opt_name: prompt_select_code_file
|
752
|
+
:procname: val_as_str
|
753
|
+
- :default: |2-
|
754
|
+
|
725
755
|
Choose a file:
|
726
756
|
:description: Prompt to select a markdown document
|
727
757
|
:env_var: MDE_PROMPT_SELECT_MD
|
@@ -734,6 +764,11 @@
|
|
734
764
|
:env_var: MDE_PROMPT_SELECT_OUTPUT
|
735
765
|
:opt_name: prompt_select_output
|
736
766
|
:procname: val_as_str
|
767
|
+
- :default: 'Expr: %{expr}'
|
768
|
+
:description: prompt_show_expr_format
|
769
|
+
:env_var: MDE_PROMPT_SHOW_EXPR_FORMAT
|
770
|
+
:opt_name: prompt_show_expr_format
|
771
|
+
:procname: val_as_str
|
737
772
|
- :default: Uninterrupted
|
738
773
|
:description: Uninterrupted execution
|
739
774
|
:env_var: MDE_PROMPT_UNINTERRUPTED
|
@@ -894,11 +929,17 @@
|
|
894
929
|
:env_var: MDE_SHELL_CODE_LABEL_FORMAT_ABOVE
|
895
930
|
:opt_name: shell_code_label_format_above
|
896
931
|
:procname: val_as_str
|
897
|
-
- :default: "# -v- +%{block_name} -o- %{document_filename} -
|
932
|
+
- :default: "# -v- +%{block_name} -o- %{document_filename} -o- %{time_now_date}
|
933
|
+
\ -v-"
|
898
934
|
:description: shell_code_label_format_below
|
899
935
|
:env_var: MDE_SHELL_CODE_LABEL_FORMAT_BELOW
|
900
936
|
:opt_name: shell_code_label_format_below
|
901
937
|
:procname: val_as_str
|
938
|
+
- :default: "%FT%TZ"
|
939
|
+
:description: Format for time in code lael
|
940
|
+
:env_var: MDE_SHELL_CODE_LABEL_TIME_FORMAT
|
941
|
+
:opt_name: shell_code_label_time_format
|
942
|
+
:procname: val_as_str
|
902
943
|
- :description: List tab completions
|
903
944
|
:long_name: tab-completions
|
904
945
|
:opt_name: tab_completions
|