mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-05 19:31:02 -08:00
New generic function oclosure-interactive-form
It's used by `interactive-form` when it encounters an OClosure. This lets one compute the `interactive-form` of OClosures dynamically by adding appropriate methods. This does not include support for `command-modes` for Oclosures. * lisp/simple.el (oclosure-interactive-form): New generic function. * src/data.c (Finteractive_form): Delegate to `oclosure-interactive-form` if the arg is an OClosure. (syms_of_data): New symbol `Qoclosure_interactive_form`. * src/eval.c (Fcommandp): Delegate to `interactive-form` if the arg is an OClosure. * src/lisp.h (VALID_DOCSTRING_P): New function, extracted from `store_function_docstring`. * src/doc.c (store_function_docstring): Use it. * lisp/kmacro.el (kmacro): Don't carry any interactive form. (oclosure-interactive-form) <kmacro>: New method, instead. * test/lisp/emacs-lisp/oclosure-tests.el (oclosure-interactive-form) <oclosure-test>: New method. (oclosure-test-interactive-form): New test. * doc/lispref/commands.texi (Using Interactive): Document `oclosure-interactive-form`.
This commit is contained in:
parent
756b7cf5d9
commit
bffc4cb39d
10 changed files with 166 additions and 53 deletions
|
|
@ -106,6 +106,27 @@
|
|||
(and (eq 'error (car err))
|
||||
(string-match "Duplicate slot: fst$" (cadr err)))))))
|
||||
|
||||
(cl-defmethod oclosure-interactive-form ((ot oclosure-test))
|
||||
(let ((snd (oclosure-test--snd ot)))
|
||||
(if (stringp snd) (list 'interactive snd))))
|
||||
|
||||
(ert-deftest oclosure-test-interactive-form ()
|
||||
(should (equal (interactive-form
|
||||
(oclosure-lambda (oclosure-test (fst 1) (snd 2)) () fst))
|
||||
nil))
|
||||
(should (equal (interactive-form
|
||||
(oclosure-lambda (oclosure-test (fst 1) (snd 2)) ()
|
||||
(interactive "r")
|
||||
fst))
|
||||
'(interactive "r")))
|
||||
(should (equal (interactive-form
|
||||
(oclosure-lambda (oclosure-test (fst 1) (snd "P")) () fst))
|
||||
'(interactive "P")))
|
||||
(should (not (commandp
|
||||
(oclosure-lambda (oclosure-test (fst 1) (snd 2)) () fst))))
|
||||
(should (commandp
|
||||
(oclosure-lambda (oclosure-test (fst 1) (snd "P")) () fst))))
|
||||
|
||||
(oclosure-define (oclosure-test-mut
|
||||
(:parent oclosure-test)
|
||||
(:copier oclosure-test-mut-copy))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue