From b6840926be225a4414a2881fb3c5f84cba3efe93 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Sat, 27 Jul 2024 17:12:04 +0200 Subject: [PATCH] (kubed-define-resource): New keyword argument :plural --- lisp/net/kubed.el | 109 ++++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 51 deletions(-) diff --git a/lisp/net/kubed.el b/lisp/net/kubed.el index 6e75be640cf..08f23ac3658 100644 --- a/lisp/net/kubed.el +++ b/lisp/net/kubed.el @@ -175,45 +175,27 @@ Other keyword arguments that go between PROPERTIES and COMMANDS are: resource creation command, `kubed-create-RESROURCE'. ARGLIST, DOCSTRING, INTERACTIVE and BODY have the same meaning as in `defun'. - `:prefix (KEY DEFINITION...)': additional keybinding for the prefix - keymap `kubed-RESOURCE-prefix-map'." + keymap `kubed-RESOURCE-prefix-map'. +- `:plural PLURAL': specify plural form of RESOURCE, as a symbol. If + you omit this keyword argument, the plural form defaults to RESOURCE + followed by \"s\"." (declare (indent 2)) - (let ((hist-var (intern (format "kubed-%S-history" resource))) - (list-var (intern (format "kubed-%Ss" resource))) - (ents-var (intern (format "kubed--%Ss-entries" resource))) - (hook-var (intern (format "kubed-update-%Ss-hook" resource))) - (proc-var (intern (format "kubed-%Ss-process" resource))) - (frmt-var (intern (format "kubed-%Ss-columns" resource))) - (plrl-var (intern (format "%Ss" resource))) - (read-fun (intern (format "kubed-read-%S" resource))) - (read-crm (intern (format "kubed-read-%Ss" resource))) - (read-nms (intern (format "kubed-read-namespaced-%S" resource))) - (sure-fun (intern (format "kubed-ensure-%Ss" resource))) - (ents-fun (intern (format "kubed-%Ss-entries" resource))) - (buff-fun (intern (format "kubed-%Ss-buffer" resource))) - (frmt-fun (intern (format "kubed-%Ss-format" resource))) + (let ((hist-var (intern (format "kubed-%S-history" resource))) + (plrl-var (intern (format "%Ss" resource))) + (read-fun (intern (format "kubed-read-%S" resource))) + (read-nms (intern (format "kubed-read-namespaced-%S" resource))) (desc-fun (intern (format "kubed-%S-description-buffer" resource))) - (affx-fun (intern (format "kubed-%Ss-affixation" resource))) - (updt-cmd (intern (format "kubed-update-%Ss" resource))) - (list-cmd (intern (format "kubed-list-%Ss" resource))) - (expl-cmd (intern (format "kubed-explain-%Ss" resource))) - (mark-cmd (intern (format "kubed-%Ss-mark-for-deletion" resource))) - (umrk-cmd (intern (format "kubed-%Ss-unmark" resource))) - (exec-cmd (intern (format "kubed-%Ss-execute" resource))) - (list-buf (format "*kubed-%Ss*" resource)) - (buf-name (format "*kubed-%S*" resource)) - (out-name (format " *kubed-get-%Ss*" resource)) - (err-name (format " *kubed-get-%Ss-stderr*" resource)) - (dlt-errb (format " *kubed-%Ss-execute-stderr*" resource)) - (dsp-name (intern (format "kubed-display-%S" resource))) - (edt-name (intern (format "kubed-edit-%S" resource))) - (dlt-name (intern (format "kubed-delete-%Ss" resource))) - (mod-name (intern (format "kubed-%Ss-mode" resource))) - (crt-name (intern (format "kubed-create-%S" resource))) - (map-name (intern (format "kubed-%S-prefix-map" resource))) - (crt-spec nil) - (prf-keys nil) + (buf-name (format "*kubed-%S*" resource)) + (dsp-name (intern (format "kubed-display-%S" resource))) + (edt-name (intern (format "kubed-edit-%S" resource))) + (crt-name (intern (format "kubed-create-%S" resource))) + (map-name (intern (format "kubed-%S-prefix-map" resource))) (namespaced t) - (keyword nil)) + (keyword nil) + list-var ents-var hook-var proc-var frmt-var read-crm sure-fun + ents-fun buff-fun frmt-fun affx-fun updt-cmd list-cmd expl-cmd + mark-cmd umrk-cmd exec-cmd list-buf out-name err-name dlt-errb + dlt-name mod-name crt-spec prf-keys) ;; Process keyword arguments. (while (keywordp (car commands)) @@ -222,9 +204,34 @@ Other keyword arguments that go between PROPERTIES and COMMANDS are: ((eq keyword :namespaced) (setq namespaced (pop commands))) ((eq keyword :create) (setq crt-spec (pop commands))) ((eq keyword :prefix) (setq prf-keys (pop commands))) + ((eq keyword :plural) (setq plrl-var (pop commands))) ;; FIXME: Add error for unknown keywords. (t (pop commands)))) + (setq list-var (intern (format "kubed-%S" plrl-var)) + ents-var (intern (format "kubed--%S-entries" plrl-var)) + hook-var (intern (format "kubed-update-%S-hook" plrl-var)) + proc-var (intern (format "kubed-%S-process" plrl-var)) + frmt-var (intern (format "kubed-%S-columns" plrl-var)) + read-crm (intern (format "kubed-read-%S" plrl-var)) + sure-fun (intern (format "kubed-ensure-%S" plrl-var)) + ents-fun (intern (format "kubed-%S-entries" plrl-var)) + buff-fun (intern (format "kubed-%S-buffer" plrl-var)) + frmt-fun (intern (format "kubed-%S-format" plrl-var)) + affx-fun (intern (format "kubed-%S-affixation" plrl-var)) + updt-cmd (intern (format "kubed-update-%S" plrl-var)) + list-cmd (intern (format "kubed-list-%S" plrl-var)) + expl-cmd (intern (format "kubed-explain-%S" plrl-var)) + mark-cmd (intern (format "kubed-%S-mark-for-deletion" plrl-var)) + umrk-cmd (intern (format "kubed-%S-unmark" plrl-var)) + exec-cmd (intern (format "kubed-%S-execute" plrl-var)) + list-buf (format "*kubed-%S*" plrl-var) + out-name (format " *kubed-get-%S*" plrl-var) + err-name (format " *kubed-get-%S-stderr*" plrl-var) + dlt-errb (format " *kubed-%S-execute-stderr*" plrl-var) + dlt-name (intern (format "kubed-delete-%S" plrl-var)) + mod-name (intern (format "kubed-%S-mode" plrl-var))) + ;; Extend `commands' with standard commands. (dolist (c `((get "RET" "Switch to buffer showing description of" (switch-to-buffer @@ -292,12 +299,12 @@ Other keyword arguments that go between PROPERTIES and COMMANDS are: (erase-buffer)) (setq ,proc-var (make-process - :name ,(format "*kubed-get-%Ss*" resource) + :name ,(format "*kubed-get-%S*" plrl-var) :buffer ,out-name :stderr ,err-name :command (list kubed-kubectl-program - "get" ,(format "%Ss" resource) + "get" ,(format "%S" plrl-var) ,@(when namespaced `((concat "--all-namespaces=" (if kubed-all-namespaces-mode "true" "false")))) @@ -367,13 +374,13 @@ Other keyword arguments that go between PROPERTIES and COMMANDS are: (setq ,list-var new ,proc-var nil) (run-hooks ',hook-var) - (message ,(format "Updated Kubernetes %Ss." resource)))) + (message ,(format "Updated Kubernetes %S." plrl-var)))) ((string= status "exited abnormally with code 1\n") (with-current-buffer ,err-name (goto-char (point-max)) (insert "\n" status)) (display-buffer ,err-name)))))) - (minibuffer-message ,(format "Updating Kubernetes %Ss..." resource))) + (minibuffer-message ,(format "Updating Kubernetes %S..." plrl-var))) (defun ,affx-fun (,plrl-var) ,(format "Return Kubernetes %s with completion affixations." @@ -394,7 +401,7 @@ Optional argument DEFAULT is the minibuffer default argument. Non-nil optional argument MULTI says to read and return a list of %S, instead of just one." resource plrl-var) (minibuffer-with-setup-hook - #',(intern (format "kubed-ensure-%Ss" resource)) + #',sure-fun (funcall (if multi #'completing-read-multiple #'completing-read) (format-prompt prompt default) @@ -614,7 +621,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) (tabulated-list-put-tag " " t)) (defun ,exec-cmd () - ,(format "Delete marked Kubernetes %Ss." resource) + ,(format "Delete marked Kubernetes %S." plrl-var) (interactive "" ,mod-name) (let (delete-list) (save-excursion @@ -639,7 +646,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) (name (aref k8sent 0)) (space (aref k8sent 1))) (make-process - :name ,(format "*kubed-%Ss-execute*" resource) + :name ,(format "*kubed-%S-execute*" plrl-var) :stderr ,dlt-errb :command (list kubed-kubectl-program "delete" @@ -668,7 +675,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) (propertize "K" 'help-echo "Deletion in progress"))) (forward-line))) (make-process - :name ,(format "*kubed-%Ss-execute*" resource) + :name ,(format "*kubed-%S-execute*" plrl-var) :stderr ,dlt-errb :command (append (list kubed-kubectl-program @@ -694,7 +701,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) (propertize "K" 'help-echo "Deletion in progress"))) (forward-line))) (make-process - :name ,(format "*kubed-%Ss-execute*" resource) + :name ,(format "*kubed-%S-execute*" plrl-var) :stderr ,dlt-errb :command (append (list kubed-kubectl-program @@ -724,7 +731,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) ,@(mapcar (pcase-lambda (`(,suffix ,_key ,desc . ,body)) - `(defun ,(intern (format "kubed-%Ss-%S" resource suffix)) () + `(defun ,(intern (format "kubed-%S-%S" plrl-var suffix)) () ,(format "%s Kubernetes %S at point." desc resource) (interactive "" ,mod-name) (if-let ,(if namespaced @@ -739,7 +746,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) (user-error ,(format "No Kubernetes %S at point" resource))))) commands) - (defvar-keymap ,(intern (format "kubed-%Ss-mode-map" resource)) + (defvar-keymap ,(intern (format "kubed-%S-mode-map" plrl-var)) :doc ,(format "Keymap for `%S" mod-name) "A" #'kubed-all-namespaces-mode "G" #',updt-cmd @@ -750,7 +757,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) ,@(mapcan (pcase-lambda (`(,suffix ,key ,_desc . ,_body)) (when key - (list key `#',(intern (format "kubed-%Ss-%S" resource suffix))))) + (list key `#',(intern (format "kubed-%S-%S" plrl-var suffix))))) commands)) (defvar ,frmt-var @@ -788,7 +795,7 @@ Optional argument DEFAULT is the minibuffer default argument." resource) (list ,(format "Kubernetes %ss" (capitalize (symbol-name resource))) (list ',proc-var (list :propertize "[...]" 'help-echo "Updating..."))) - ,(format "Major mode for listing Kubernetes %Ss." resource) + ,(format "Major mode for listing Kubernetes %S." plrl-var) :interactive nil (add-hook 'revert-buffer-restore-functions (lambda () @@ -838,13 +845,13 @@ Optional argument DEFAULT is the minibuffer default argument." resource) (current-buffer))) (defun ,list-cmd () - ,(format "List Kubernetes %Ss." resource) + ,(format "List Kubernetes %S." plrl-var) (interactive) (,sure-fun) (pop-to-buffer (,buff-fun ,list-var))) (defun ,expl-cmd () - ,(format "Show help buffer with explanation about Kubernetes %Ss." resource) + ,(format "Show help buffer with explanation about Kubernetes %S." plrl-var) (interactive) (kubed-explain ,(symbol-name plrl-var))) -- 2.39.5