summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ccwl/ccwl.scm13
1 files changed, 12 insertions, 1 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm
index 27012ec..9b0c049 100644
--- a/ccwl/ccwl.scm
+++ b/ccwl/ccwl.scm
@@ -255,7 +255,7 @@ command is not defined, return #f."
 output keys and a list of steps. INPUT-KEYS is a list of supplied
 input keys. Keys are represented by <key> objects, and steps are
 represented by <step> objects."
-  (syntax-case x (pipe tee)
+  (syntax-case x (pipe tee rename)
     ;; pipe
     ((pipe expressions ...)
      (foldn (lambda (expression input-keys steps)
@@ -268,6 +268,17 @@ represented by <step> objects."
     ((tee expressions ...)
      (append-mapn (cut collect-steps <> input-keys)
                   #'(expressions ...)))
+    ;; rename keys
+    ((rename mapping ...)
+     (values (map (lambda (key)
+                    (or (any (match-lambda
+                               ((new . old)
+                                (and (eq? old (key-name key))
+                                     (set-key-name key (keyword->symbol new)))))
+                             (syntax->datum (pairify #'(mapping ...))))
+                        key))
+                  input-keys)
+             (list)))
     ;; commands with only a single input when only a single key is
     ;; available at this step and when no inputs are passed to it
     ((command (step-id))