瀏覽代碼

refactor awk usage into methods

Daniel Sheffield 3 月之前
父節點
當前提交
82d9a6524b
共有 1 個文件被更改,包括 33 次插入2 次删除
  1. 33 2
      recall.sh

+ 33 - 2
recall.sh

@@ -105,6 +105,37 @@ fzf_rw0_inplace_preview () {
 	&& :
 }
 
+awk_strip_first_path_part_script () {
+	cat <<'EOF'
+{
+    for (i=2; i<=NF; i++)
+        printf "%s%s", $(i), (i<NF ? OFS : ORS)
+}
+EOF
+}
+
+
+awk_rw0_strip_first_path_part () {
+	# NOTE: ./a/b/c -> a/b/c (null delimited)
+	awk \
+		-v FS='/' -v RS='\0' \
+		-v OFS='/' -v ORS='\0' \
+		"$(awk_strip_first_path_part_script)" \
+	&& :
+
+}
+
+awk_rw0_add_prefix () {
+	# NOTE: some-string -> <prefix>some-string (null delimited)
+	: "${1?awk_rw0_add_prefix requires exactly one positional arg}"
+	[ "${1+DefinedMaybeEmpty}" == "DefinedMaybeEmpty" ]
+	awk \
+		-v prefix="$1/" \
+		-v RS='\0' \
+		-v ORS='\n' '{print prefix $0}' \
+	&& :
+}
+
 if "$LIST_MODE"
 then
 	fzf_query=()
@@ -127,8 +158,8 @@ then
 		| sort -zV \
 		| head -zn "${NUM:--0}" \
 		| fzf_rw0_inplace_preview \
-		| awk -v RS='\0' -v FS='/' -v OFS='/' -v ORS='\0' '{for (i=2; i<=NF; i++) printf "%s%s", $(i), (i<NF ? OFS : ORS)}' \
-		| awk -v prefix="$LOG_ROOT/" -v RS='\0' -v ORS='\n' '{print prefix $0}' \
+		| awk_rw0_strip_first_path_part \
+		| awk_rw0_add_prefix "$LOG_ROOT" \
 		&& : "TODO: allow configuring null terminated output"
 	)
 else