Function: hui:gbut-edit
hui:gbut-edit is an interactive and byte-compiled function defined in
hui.el.
Signature
(hui:gbut-edit LBL-KEY)
Documentation
Edit a global Hyperbole button given by LBL-KEY.
The button may be explicit or a labeled implicit button. When called interactively, save the global button buffer after the modification. Signal an error when no such button is found.
Key Bindings
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hui.el
(defun hui:gbut-edit (lbl-key)
"Edit a global Hyperbole button given by LBL-KEY.
The button may be explicit or a labeled implicit button.
When called interactively, save the global button buffer after the
modification. Signal an error when no such button is found."
(interactive (list (save-excursion
(hui:buf-writable-err
(find-file-noselect (gbut:file)) "gbut-edit")
(hbut:label-to-key
(hargs:read-match "Global button to edit: "
(mapcar #'list (gbut:label-list))
nil t (gbut:label-p t) 'gbut)))))
(unless (stringp lbl-key)
(if (called-interactively-p 'interactive)
(error "(hui:gbut-edit): No global button to edit")
(error "(hui:gbut-edit): 'lbl-key' argument must be a string, not '%s'" lbl-key)))
(hypb:assert-same-start-and-end-buffer
(let ((lbl (hbut:key-to-label lbl-key))
(interactive-flag (called-interactively-p 'interactive))
(but-buf (find-file-noselect (gbut:file)))
(src-dir (file-name-directory (gbut:file)))
actype but new-lbl)
(save-excursion
(unless interactive-flag
(hui:buf-writable-err but-buf "gbut-edit"))
(unless (setq but (gbut:get lbl-key))
(pop-to-buffer but-buf)
(hypb:error "(gbut-edit): Invalid button, no data for '%s'" lbl))
(setq new-lbl
(hargs:read
"Change global button label to: "
(lambda (lbl)
(and (not (string-match-p "\\`\\s-*\\'" lbl))
(<= (length lbl) (hbut:max-len))))
lbl
(format "(gbut-edit): Enter a non-blank string of at most %s chars."
(hbut:max-len))
'string))
(if (eq (hattr:get but 'categ) 'explicit)
(progn
;; Explicit buttons
(hattr:set 'hbut:current 'loc (hui:key-src but-buf))
(hattr:set 'hbut:current 'dir src-dir)
(setq actype (hui:actype (hattr:get but 'actype)))
(hattr:set 'hbut:current 'actype actype)
(hattr:set 'hbut:current 'args (hargs:actype-get actype t))
(hattr:set 'hbut:current 'action
(and hui:ebut-prompt-for-action (hui:action actype)))
;; Ensure ebut:operate is given but-buf as the current buffer
(set-buffer but-buf)
(save-excursion
(ebut:operate lbl new-lbl))
(when interactive-flag
(save-buffer)))
;; Implicit buttons
(with-current-buffer but-buf
(save-excursion
(ibut:to lbl-key)
(if (and interactive-flag (ibut:at-p))
(progn
;; lbl-start and lbl-end mark the text of the ibut, not
;; its name.
(when (hattr:get 'hbut:current 'lbl-end)
(let* ((start (hattr:get 'hbut:current 'lbl-start))
(end (hattr:get 'hbut:current 'lbl-end))
(old-text (buffer-substring-no-properties start end))
(new-text (read-string "Edit ibut text: " old-text)))
(save-excursion
(goto-char start)
(delete-region start end)
(insert new-text))
(hattr:set 'hbut:current 'lbl-key (ibut:label-to-key new-lbl))))
;; Have to do name change after lbl-start/lbl-end are
;; used so buffer positions do not change.
(ibut:rename lbl new-lbl)
(save-buffer)
(hui:ibut-message t))
(when (and interactive-flag
(ibut:rename lbl new-lbl))
(save-buffer)
(message "Button renamed to %s%s%s"
ibut:label-start
new-lbl
ibut:label-end))))))))))