mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
*** empty log message ***
This commit is contained in:
parent
cc213f24d7
commit
47ccb99329
1 changed files with 39 additions and 4 deletions
43
lisp/subr.el
43
lisp/subr.el
|
|
@ -510,6 +510,7 @@ Don't call this function; it is for internal use only."
|
|||
(if (integerp b) (< a b)
|
||||
t)
|
||||
(if (integerp b) t
|
||||
;; string< also accepts symbols.
|
||||
(string< a b))))))
|
||||
(dolist (p list)
|
||||
(funcall function (car p) (cdr p))))
|
||||
|
|
@ -2485,6 +2486,29 @@ If BODY finishes, `while-no-input' returns whatever value BODY produced."
|
|||
(or (input-pending-p)
|
||||
,@body))))))
|
||||
|
||||
(defmacro condition-case-no-debug (var bodyform &rest handlers)
|
||||
"Like `condition-case' except that it does not catch anything when debugging.
|
||||
More specifically if `debug-on-error' is set, then it does not catch any signal."
|
||||
(declare (debug condition-case) (indent 2))
|
||||
(let ((bodysym (make-symbol "body")))
|
||||
`(let ((,bodysym (lambda () ,bodyform)))
|
||||
(if debug-on-error
|
||||
(funcall ,bodysym)
|
||||
(condition-case ,var
|
||||
(funcall ,bodysym)
|
||||
,@handlers)))))
|
||||
|
||||
(defmacro with-demoted-errors (&rest body)
|
||||
"Run BODY and demote any errors to simple messages.
|
||||
If `debug-on-error' is non-nil, run BODY without catching its errors.
|
||||
This is to be used around code which is not expected to signal an error
|
||||
but which should be robust in the unexpected case that an error is signalled."
|
||||
(declare (debug t) (indent 0))
|
||||
(let ((err (make-symbol "err")))
|
||||
`(condition-case-no-debug ,err
|
||||
(progn ,@body)
|
||||
(error (message "Error: %s" ,err) nil))))
|
||||
|
||||
(defmacro combine-after-change-calls (&rest body)
|
||||
"Execute BODY, but don't call the after-change functions till the end.
|
||||
If BODY makes changes in the buffer, they are recorded
|
||||
|
|
@ -2519,6 +2543,20 @@ The value returned is the value of the last form in BODY."
|
|||
|
||||
;;;; Constructing completion tables.
|
||||
|
||||
(defun complete-with-action (action table string pred)
|
||||
"Perform completion ACTION.
|
||||
STRING is the string to complete.
|
||||
TABLE is the completion table, which should not be a function.
|
||||
PRED is a completion predicate.
|
||||
ACTION can be one of nil, t or `lambda'."
|
||||
;; (assert (not (functionp table)))
|
||||
(funcall
|
||||
(cond
|
||||
((null action) 'try-completion)
|
||||
((eq action t) 'all-completions)
|
||||
(t 'test-completion))
|
||||
string table pred))
|
||||
|
||||
(defmacro dynamic-completion-table (fun)
|
||||
"Use function FUN as a dynamic completion table.
|
||||
FUN is called with one argument, the string for which completion is required,
|
||||
|
|
@ -2540,10 +2578,7 @@ that can be used as the ALIST argument to `try-completion' and
|
|||
(with-current-buffer (let ((,win (minibuffer-selected-window)))
|
||||
(if (window-live-p ,win) (window-buffer ,win)
|
||||
(current-buffer)))
|
||||
(cond
|
||||
((eq ,mode t) (all-completions ,string (,fun ,string) ,predicate))
|
||||
((not ,mode) (try-completion ,string (,fun ,string) ,predicate))
|
||||
(t (test-completion ,string (,fun ,string) ,predicate)))))))
|
||||
(complete-with-action ,mode (,fun ,string) ,string ,predicate)))))
|
||||
|
||||
(defmacro lazy-completion-table (var fun)
|
||||
;; We used to have `&rest args' where `args' were evaluated late (at the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue