emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/bash-completion b281e1e181 008/313: bash-complete-add-to-a


From: ELPA Syncer
Subject: [nongnu] elpa/bash-completion b281e1e181 008/313: bash-complete-add-to-alist
Date: Sat, 3 Dec 2022 10:59:03 -0500 (EST)

branch: elpa/bash-completion
commit b281e1e18111cb8b28dcf46e1bf00aaeea06f044
Author: Stephane Zermatten <szermatt@gmx.net>
Commit: Stephane Zermatten <szermatt@gmx.net>

    bash-complete-add-to-alist
---
 bash-complete.el      | 32 ++++++++++++++++++++++++++++++++
 bash-complete_test.el | 25 +++++++++++++++++++++++++
 2 files changed, 57 insertions(+)

diff --git a/bash-complete.el b/bash-complete.el
index f769d14afa..83c22ccd49 100644
--- a/bash-complete.el
+++ b/bash-complete.el
@@ -1,6 +1,19 @@
 
 (require 'comint)
 
+(defvar bash-complete-process nil
+  "Bash process object")
+(defvar bash-complete-alist nil
+  "Maps from command name to the 'complete' arguments.
+
+For example if the following completion is defined in bash:
+  complete -F _cdargs_aliases cdb
+the following entry is added to `bash-complete-alist':
+ (\"cdb\" . (\"-F\" \"_cdargs\"))
+
+See `bash-complete-add-to-alist'.
+")
+
 (defun bash-complete-dynamic-complete ()
   "Bash completion function for `comint-complete-dynamic-functions'.
 
@@ -106,4 +119,23 @@ The result is a list of candidates, which might be empty."
 
   )
 
+(defun bash-complete-add-to-alist (words)
+  "Add split 'complete' line WORDS to `bash-complete-add-to-alist'.
+
+This parses the complete command-line arguments as output by
+  complete -p
+
+This does not work on arbitrary 'complete' calls.
+
+Lines that do not start with the word complete are skipped.
+
+Return `bash-complete-alist'."
+  (when (string= "complete" (car words))
+    (let* ( (reverse-wordsrest (nreverse (cdr words)))
+           (command (car reverse-wordsrest))
+           (options (nreverse (cdr reverse-wordsrest))) )
+      (when (and command options)
+       (push (cons command options) bash-complete-alist))))
+  bash-complete-alist)
+
 (provide 'bash-complete)
\ No newline at end of file
diff --git a/bash-complete_test.el b/bash-complete_test.el
index 7f7efe2f71..ec4844c732 100644
--- a/bash-complete_test.el
+++ b/bash-complete_test.el
@@ -108,6 +108,31 @@
        (bash-complete-split 1 (line-end-position) (point)))
       '(1 . ("a" "hello" "world" "b" "c")))
 
+     ("bash-complete-add-to-alist garbage"
+      (let ((bash-complete-alist nil))
+       (bash-complete-add-to-alist '("just" "some" "garbage")))
+      nil)
+
+     ("bash-complete-add-to-alist empty"
+      (let ((bash-complete-alist nil))
+       (bash-complete-add-to-alist '()))
+      nil)
+
+     ("bash-complete-add-to-alist empty string"
+      (let ((bash-complete-alist nil))
+       (bash-complete-add-to-alist '("")))
+      nil)
+
+     ("bash-complete-add-to-alist empty complete"
+      (let ((bash-complete-alist nil))
+       (bash-complete-add-to-alist '("complete")))
+      nil)
+
+     ("bash-complete-add-to-alist one command"
+      (let ((bash-complete-alist nil))
+       (bash-complete-add-to-alist '("complete" "-e" "-F" "_cdargs_aliases" 
"cdb")))
+      '(("cdb" . ("-e" "-F" "_cdargs_aliases"))))
+
       )))
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]