]> git.eshelyaron.com Git - emacs.git/commitdiff
(kubed-define-resource): New keyword argument :plural
authorEshel Yaron <me@eshelyaron.com>
Sat, 27 Jul 2024 15:12:04 +0000 (17:12 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sat, 27 Jul 2024 15:12:04 +0000 (17:12 +0200)
lisp/net/kubed.el

index 6e75be640cf2ba8f88aa7fec9b8fab20ffa1dc1e..08f23ac3658378b94f9bbfcd5ff3e98927d2c05a 100644 (file)
@@ -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)))