Commit c7a48955 authored by David Byers's avatar David Byers
Browse files

Added sanity checks to def-kom-command and friends.

Bind lyskom-executing-command in evaluated interactive forms used as
arguments to def-kom-command and friends
parent 9be8f76d
2000-05-26 David Byers <davby@ida.liu.se>
* command.el (lyskom-fix-interactive-decl): New function puts a
let around evaluated arguments to interactive that binds
lyskom-executing-command to the current command.
(def-kom-command): Use it.
(def-kom-emacs-command): Use it.
(def-kom-command): Sanity check and attempt repair when missing
docstring or interactive declaration.
(def-kom-emacs-command): Same here.
2000-05-24 David Byers <davby@ida.liu.se>
* utilities.el (lyskom-default-collate-table): Removed \201s added
......
......@@ -5,6 +5,53 @@ Att g
* INTRESSANTA SAKER
Använd lyskom-read-text-no-prefix arg i alla funktioner där det är
meningsfullt. Följande är relevanta:
Radera inlägg
Återse inlägg
Återse omodifierat
Återse urinlägget
Återse det kommenterade
Återse det föregående kommenterade
Kommentera inlägget
Kommentera föregående inlägg
Fotnot till inlägg
Personligt svar
Personligt svar på föregående inlägg
Markera (inlägg)
Avmarkera (inlägg)
Addera mottagare
Addera extra kopiemottagare
Addera för kännedom
Subtrahera mottagare
Flytta inlägg
Addera kommentar
Subtrahera kommentar
Arkivera inlägg (till fil)
Spara inläggstext (på fil)
Sätt loginmeddelande
Kort replik
Hålla med
Addera FAQ
Addera fotnot
Subtrahera fotnot
Förhindra kommentarer
Begär personligt svar
Begär läsbekräftelse
Återse brevhuvud
Bestäm vettig default och om kommandot skall fråga efter nummer eller
bara anta default om man inte ger prefixargument.
Gör så att lyskom-read-text-no-prefix-arg vet vilket kommando som
håller på köras. Ge det ett extra argument för kommandot och fixa
def-kom-command så att den patchar interactive-specen om den
innehåller ett anrop till lyskom-read-text-no-arg.
Det vore trevligt om "Arkivera inlägg (till fil)" fanns i kontextmenyn
för inläggsnummer också, samt om man kunde ställa in en defaultpath
till funktionen, helst också per KOM.
......@@ -30,15 +77,10 @@ till funktionen, helst ocks
* SHOWSTOPPERS
** I startup.el så görs en get-collate-table. Skydda anropet från
servrar som inte har get-collate-table.
** Defaultcollatetabellen verkar vara trasig. Den mappar inte om ø och
vänner rätt.
** I XEmacs (minst) blir historielistan i addera mottagare
uppercasead. Någonstans verkar det göras en destruktiv
lyskom-unicasing eller upcase av strängen.
** Radbrytningen gör lite fel. Om man har en rad med :/ i så stoppar
den radbrytningen. Egentligen så borde kanske en rad som bara
består av icke-bokstäver avsluta aktuellt stycke och kanske vara
sitt eget stycke också.
** Martin, hade vissa problem med inställningarna. User-arean såg OK
ut och han säger att problemen försvann när han skrev en
......
......@@ -62,26 +62,41 @@
;;; (interactive "...")
;;; ...)
(eval-and-compile
(defun lyskom-fix-interactive-decl (decl command)
(cond ((stringp (car (cdr decl))) decl)
(t `(interactive (let ((lyskom-executing-command ',command))
,@(cdr decl)))))))
(defmacro def-kom-command (cmd args doc interactive-decl &rest forms)
(if (not (stringp doc))
(progn (message "!! No docstring for command %S" cmd)
(setq forms (cons interactive-decl forms))
(setq interactive-decl doc)
(setq doc "")))
(if (not (eq (car interactive-decl) 'interactive))
(progn (message "!! Missing interactive declaration for %S; assuming \(interactive\)" cmd)
(setq forms (cons interactive-decl forms))
(setq interactive-decl '(interactive))))
(let ((bufsym (intern (format "%S-start-buffer" cmd))))
(`
(defun (, cmd) (, args)
(, doc)
(, interactive-decl)
(lyskom-start-of-command (quote (, cmd)))
(let (((, bufsym) (current-buffer)))
`(defun ,cmd ,args
,doc
,(lyskom-fix-interactive-decl interactive-decl cmd)
(lyskom-start-of-command ',cmd)
(let ((,bufsym (current-buffer)))
(unwind-protect
(condition-case nil
(progn (,@ forms))
(progn ,@forms)
(quit (ding)
(lyskom-insert-before-prompt
(lyskom-get-string 'interrupted))))
(lyskom-save-excursion
(when (buffer-live-p (, bufsym))
(set-buffer (, bufsym)))
(lyskom-end-of-command))))))))
(when (buffer-live-p ,bufsym)
(set-buffer ,bufsym))
(lyskom-end-of-command)))))))
;;
;; def-kom-emacs-command works like def-kom-command, but the template
......@@ -113,30 +128,38 @@
;;
(defmacro def-kom-emacs-command (cmd args doc interactive-decl &rest forms)
(let ((rsym (intern (concat (format "%S-running-as-kom-command"
cmd))))
(if (not (stringp doc))
(progn (message "!! No docstring for command %S" cmd)
(setq forms (cons interactive-decl forms))
(setq interactive-decl doc)
(setq doc "")))
(if (not (eq (car interactive-decl) 'interactive))
(progn (message "!! Missing interactive declaration for %S; assuming \(interactive\)" cmd)
(setq forms (cons interactive-decl forms))
(setq interactive-decl '(interactive))))
(let ((rsym (intern (concat (format "%S-running-as-kom-command" cmd))))
(bufsym (intern (format "%S-start-buffer" cmd))))
(`
(defun (, cmd) (, args)
(, doc)
(, interactive-decl)
(let (((, rsym) nil))
`(defun ,cmd ,args
,doc
,(lyskom-fix-interactive-decl interactive-decl cmd)
(let ((,rsym nil))
(condition-case nil
(progn (lyskom-start-of-command (quote (, cmd)))
(setq (, rsym) t))
(progn (lyskom-start-of-command ',cmd)
(setq ,rsym) t)
(error nil))
(let (((, bufsym) (current-buffer)))
(let ((,bufsym (current-buffer)))
(unwind-protect
(condition-case nil
(progn (,@ forms))
(progn ,@forms)
(quit (ding)
(lyskom-insert-before-prompt
(lyskom-get-string 'interrupted))))
(and (, rsym)
(and ,rsym
(lyskom-save-excursion
(when (buffer-live-p (, bufsym))
(set-buffer (, bufsym)))
(lyskom-end-of-command))))))))))
(when (buffer-live-p ,bufsym)
(set-buffer ,bufsym))
(lyskom-end-of-command)))))))))
......
......@@ -955,6 +955,7 @@ Format is 23:29 if the text is written today. Otherwise 04-01."
;;; Author: David Byers
(def-kom-command kom-list-marks (&optional which-mark)
"List texts marked with a particular mark number."
(interactive "P")
(when (not (numberp which-mark))
(setq which-mark (lyskom-read-num-range
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment