cmdline-sub 0.1.2 → 0.1.3
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/README +3 -3
- data/bin/sub +27 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c389766a40ec1f0894ff39ae9156d8ab1f737e32da5e6a83ac82e758fd420e06
|
4
|
+
data.tar.gz: cbe56894e3d43b63ec14da75db54b820c9347a197e32c9ae6a5cc649ddabdb1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71806a610d4b0a4e3e14e6ed75ab31f0dc4d1c34ac72767b3b8e063ed139322685f1c0585929f58f447a25e07f717171892d7ed35ace82f4a8d67ad9dd00b394
|
7
|
+
data.tar.gz: d08f7dd174f7546d4b451a5ee6a0639eea308ca894db10c861dbd3556efbe6965770c2529a822da2a64821de52a68444d3771fa253a9e6f46ba17923e65b77fb
|
data/README
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Sub
|
2
2
|
===
|
3
3
|
|
4
|
-
sub v0.1.
|
4
|
+
sub v0.1.3
|
5
5
|
Usage: sub COMMANDLINE -- (PATTERN/SUBSTITUTION[/SUB_FLAGS])+ (/GLOBAL_FLAGS)?
|
6
6
|
|
7
7
|
sub substitutes the matching pattern in every word in the command line with the
|
@@ -53,8 +53,8 @@ Substitution flags:
|
|
53
53
|
ex: sub cp here.txt there.txt -- CP/mv/i #=> mv here.txt there.txt
|
54
54
|
-g: General substitution: substitute all matches in the word, not just the first
|
55
55
|
ex: sub cp here.txt there.txt -- ./_/g #=> __ ________ _________
|
56
|
-
-
|
57
|
-
ex: sub ls mydir -- mydir/*/
|
56
|
+
-r: Don't escape substituted value, allow shell to expand and split it
|
57
|
+
ex: sub ls mydir -- 'mydir/*/r' #=> ls bin README
|
58
58
|
Global flags:
|
59
59
|
-p: Print the command instead of executing it (adds newline)
|
60
60
|
-P: Print the command instead of executing it (doesn't add newline)
|
data/bin/sub
CHANGED
@@ -5,8 +5,9 @@
|
|
5
5
|
if ENV["TESTING_SUB_CMD"] == "1" && ENV["DEBUGGING_SUB_CMD"] == "1"
|
6
6
|
require "debug"
|
7
7
|
end
|
8
|
+
require "shellwords"
|
8
9
|
|
9
|
-
VERSION = "0.1.
|
10
|
+
VERSION = "0.1.3"
|
10
11
|
|
11
12
|
USAGE = <<EOF
|
12
13
|
Usage: sub COMMANDLINE -- (PATTERN/SUBSTITUTION[/SUB_FLAGS])+ (/GLOBAL_FLAGS)?
|
@@ -89,8 +90,8 @@ SUB_FLAGS = [
|
|
89
90
|
{ flag: 'g', name: :general, desc: "General substitution: substitute all matches in the word, not just the first",
|
90
91
|
example: "sub cp here.txt there.txt -- ./_/g #=> __ ________ _________",
|
91
92
|
},
|
92
|
-
{ flag: '
|
93
|
-
example: [ "sub ls mydir -- mydir/*/
|
93
|
+
{ flag: 'r', name: :raw_mode, desc: "Don't escape substituted value, allow shell to expand and split it",
|
94
|
+
example: [ "sub ls mydir -- 'mydir/*/r' #=> ls bin README" ]
|
94
95
|
},
|
95
96
|
]
|
96
97
|
GLOBAL_FLAGS = [
|
@@ -234,11 +235,14 @@ def parse_sub_strs(sub_strs)
|
|
234
235
|
flags_hash = {
|
235
236
|
first_match: parse_simple_flag!(flags, flag_by_name(:first_match)),
|
236
237
|
last_match: parse_simple_flag!(flags, flag_by_name(:last_match)),
|
237
|
-
|
238
|
+
raw_mode: parse_simple_flag!(flags, flag_by_name(:raw_mode)),
|
238
239
|
literal: parse_simple_flag!(flags, flag_by_name(:literal)),
|
239
240
|
ignorecase: parse_simple_flag!(flags, flag_by_name(:ignorecase)),
|
240
241
|
general: parse_simple_flag!(flags, flag_by_name(:general)),
|
241
242
|
}
|
243
|
+
if flags_hash[:raw_mode]
|
244
|
+
flags_hash[:raw_mode] = 0 # bitfield
|
245
|
+
end
|
242
246
|
pats << pat
|
243
247
|
subs << sub
|
244
248
|
match_flags << flags_hash
|
@@ -303,6 +307,9 @@ def argv_replace!(argv, regexps, subs, flags)
|
|
303
307
|
scan_size = arg.scan(regexp).size
|
304
308
|
scan_size = 1 if scan_size > 1
|
305
309
|
end
|
310
|
+
if flags[i].fetch(:raw_mode)
|
311
|
+
flags[i][:raw_mode] |= i+1
|
312
|
+
end
|
306
313
|
if new_arg != arg || new_arg == subs[i]
|
307
314
|
num_replacements += scan_size
|
308
315
|
end
|
@@ -359,7 +366,7 @@ def copy!(cmd_line, global_flags)
|
|
359
366
|
end
|
360
367
|
end
|
361
368
|
|
362
|
-
def exec_cmd(argv, regexps, subs, raw_flags,
|
369
|
+
def exec_cmd(argv, regexps, subs, flags_hashes, raw_flags, global_flags, num_replacements)
|
363
370
|
if global_flags.fetch(:debug)
|
364
371
|
puts "Patterns: #{regexps.inspect}"
|
365
372
|
puts "Substitutions: #{subs.inspect}"
|
@@ -382,7 +389,19 @@ def exec_cmd(argv, regexps, subs, raw_flags, num_replacements, global_flags)
|
|
382
389
|
end
|
383
390
|
|
384
391
|
cmd = argv.shift
|
385
|
-
|
392
|
+
argv_string = String.new
|
393
|
+
argv.each_with_index do |arg, i|
|
394
|
+
raw_mode = flags_hashes.any? { |flags_hash| flags_hash[:raw_mode] && (flags_hash[:raw_mode] & i+1) != 0 }
|
395
|
+
if raw_mode
|
396
|
+
argv_string << arg
|
397
|
+
else
|
398
|
+
argv_string << Shellwords.escape(arg)
|
399
|
+
end
|
400
|
+
unless argv[i+1].nil?
|
401
|
+
argv_string << " "
|
402
|
+
end
|
403
|
+
end
|
404
|
+
cmd_line = "#{cmd} #{argv_string}"
|
386
405
|
action = global_flags.fetch(:copy_to_clipboard) ? "copy" : "execute"
|
387
406
|
if global_flags.fetch(:interactive) && !global_flags.fetch(:print_only)
|
388
407
|
$stdout.puts "Would you like to #{action} the following command? [y(es),n(o)]"
|
@@ -401,7 +420,7 @@ def exec_cmd(argv, regexps, subs, raw_flags, num_replacements, global_flags)
|
|
401
420
|
copy!(cmd_line, global_flags) if global_flags.fetch(:copy_to_clipboard)
|
402
421
|
exit 0 if global_flags.fetch(:print_only) || global_flags.fetch(:print_only_no_newline) || global_flags.fetch(:copy_to_clipboard)
|
403
422
|
begin
|
404
|
-
exec
|
423
|
+
exec cmd_line
|
405
424
|
rescue SystemCallError => e
|
406
425
|
if e.class == Errno::ENOENT
|
407
426
|
# act like a shell
|
@@ -413,4 +432,4 @@ def exec_cmd(argv, regexps, subs, raw_flags, num_replacements, global_flags)
|
|
413
432
|
end
|
414
433
|
end
|
415
434
|
|
416
|
-
exec_cmd(argv, regexps, subs, raw_flags,
|
435
|
+
exec_cmd(argv, regexps, subs, flags_hashes, raw_flags, global_flags, num_replacements)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cmdline-sub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Gruber
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: debug
|