Function: hui:action
hui:action is a byte-compiled function defined in hui.el.
Signature
(hui:action ACTYPE &optional PROMPT)
Documentation
PROMPT for and return an action to override action from ACTYPE.
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hui.el
;;; ************************************************************************
;;; Private functions - used only within Hyperbole
;;; ************************************************************************
(defun hui:action (actype &optional prompt)
"PROMPT for and return an action to override action from ACTYPE."
(and actype
(let* ((act) (act-str)
(params (actype:params actype))
(params-no-keywords (actype:param-list actype))
(params-str (and params (concat " " (prin1-to-string params)))))
(while (progn
(while (and (setq act-str
(hargs:read (or prompt (concat "Action" params-str ": "))
nil nil nil 'string))
(not (string-equal act-str ""))
(condition-case ()
(progn (setq act (read act-str)) nil)
(error
(beep) (message "Invalid action syntax.")
(sit-for 3) t))))
(and (not (symbolp act))
params-no-keywords
;; Use the weak condition that action must
;; involve at least one of actype's parameters
;; or else we assume the action is invalid, tell
;; the user and provide another chance for entry.
(not (memq t
(mapcar
(lambda (param)
(setq param (symbol-name param))
(and (string-match
(concat "[\( \t\n\r,']"
(regexp-quote param)
"[() \t\n\r\"]")
act-str)
t))
params-no-keywords)))))
(beep) (message "Action must use at least one parameter.")
(sit-for 3))
(let (head)
(while (cond ((listp act)
(and act (setq head (car act))
(not (memq head '(lambda defun defmacro defsubst defin)))
(setq act (list 'lambda params act))
nil ;; terminate loop
))
((symbolp act)
(setq act (cons act params-no-keywords)))
((stringp act)
(setq act (action:kbd-macro act 1)))
;; Unrecognized form
(t (setq act nil)))))
act)))