Commit 5e7afa7c authored by David Byers's avatar David Byers
Browse files

Full support for FAQs on the server.

New commands: kom-change-server-faq, kom-add-server-faq, kom-del-server-faq
              kom-review-server-faq
Stricter format-string checking in check-strings
parent b8b094dc
2002-04-13 David Byers <david.byers@swipnet.se>
More stringent format-string check (each arg needs to appear the
same number of times in all strings):
* check-strings.el (lcs-delete-format-arg): New function.
(lcs-check-format-string): Use it.
Full server FAQ support:
* commands1.el (kom-change-server-faq): New command.
(kom-change-conf-faq): Broke out main logic.
(lyskom-change-faq): Inlined logic from kom-change-conf-faq.
Support server FAQs.
(lyskom-change-faq-2): Broke out callback for modify-x-info to
lykom-change-faq-3. Renamed from lyskom-change-conf-faq-2. Handle
server FAQs.
(lyskom-change-faq-3): New function.
* commands2.el (kom-add-faq): Break out logic to a separate
function.
(lyskom-add-text-no): New function. Generic for conferences and
the server.
(kom-add-server-faq): New command.
(kom-del-faq): Removed args from this function. Broke out main
logic to lyskom-del-faq.
(kom-review-server-faq): New Command.
(kom-review-faq): Entering an empty conf gives the server FAQ.
Broke out main logic.
(lyskom-review-faq): New function.
2002-04-13 Joel Rosdahl <joel@lysator.liu.se>
* Makefile (verbose-el): Made target "verbose" work again.
......
......@@ -193,6 +193,12 @@ STRING is the string."
(cond ((memq nil result) nil)
(t t))))))
(defun lcs-delete-format-arg (el flist)
(let ((result nil))
(while (and flist (not (equal el (car flist))))
(setq result (cons (car flist) result)
flist (cdr flist)))
(setq result (nconc (nreverse result) (cdr flist)))))
(defun lcs-check-format-string (template flist)
"Match the formatters in TEMPLATE to those in FLIST."
......@@ -201,8 +207,8 @@ STRING is the string."
(while flist
(if (not (member (car flist) template))
(setq result nil flist nil)
(setq template (delete (car flist) template))
(setq flist (delete (car flist) flist))))
(setq template (lcs-delete-format-arg (car flist) template))
(setq flist (lcs-delete-format-arg (car flist) flist))))
(and result (null template))))
(defun lcs-check-customize-variables ()
......
......@@ -1232,8 +1232,15 @@ Don't ask for confirmation."
(blocking-do 'get-conf-stat no))
'pres))
(def-kom-command kom-change-server-faq ()
"Change a FAQ for the server."
(interactive)
(lyskom-change-faq nil (lyskom-get-aux-item (server-info->aux-item-list
(blocking-do 'get-server-info))
14)))
(def-kom-command kom-change-conf-faq ()
"Change a FAQ for a conference."
"Change a FAQ fo a conference."
(interactive)
(let* ((conf-no (lyskom-read-conf-no
(lyskom-get-string 'what-to-change-faq-you)
......@@ -1246,86 +1253,121 @@ Don't ask for confirmation."
t))
(conf-stat (when conf-no ; Need this to make sure the conf-stat is up-to-date!
(cache-del-conf-stat conf-no)
(blocking-do 'get-conf-stat conf-no)))
(faq-list (when conf-stat
(let ((tmp nil))
(lyskom-traverse-aux item
(conf-stat->aux-items conf-stat)
(progn
(when (eq (aux-item->tag item) 14)
(setq tmp (cons (cons (aux-item->data item) (aux-item->aux-no item)) tmp)))))
tmp)))
(text-no-aux (cond ((eq (length faq-list) 1)
(car faq-list))
((> (length faq-list) 1)
(lyskom-string-assoc
(lyskom-completing-read
(lyskom-get-string 'text-to-change-as-faq)
(lyskom-maybe-frob-completion-table
faq-list)
nil t)
faq-list)))))
(cond ((null conf-stat)
(lyskom-insert (lyskom-get-string 'conf-does-not-exist)))
; ((null text-no)
; (lyskom-format-insert 'conf-has-no-faq conf-stat))
(t (lyskom-change-conf-faq conf-stat
(if text-no-aux (string-to-int (car text-no-aux)))
(if text-no-aux (cdr text-no-aux)))))))
(defun lyskom-change-conf-faq (conf-stat text-no aux-no)
"Interactively edit the FAQ for CONF-STAT in TEXT-NO."
(cond ((null conf-stat)
(lyskom-insert-string 'cant-get-conf-stat))
((or lyskom-is-administrator
(lyskom-is-supervisor (conf-stat->conf-no conf-stat) lyskom-pers-no))
(blocking-do-multiple ((text-stat (get-text-stat text-no))
(text-mass (get-text text-no)))
(let* ((str (and text-mass (text->decoded-text-mass text-mass text-stat)))
(subject (if (and str (string-match "\n" str))
(substring str 0 (match-beginning 0))
""
))
(body (if (and str (string-match "\n" str))
(substring str (match-end 0))
(or str ""))))
(lyskom-dispatch-edit-text
lyskom-proc
(apply 'lyskom-create-misc-list
(if (and text-stat text-mass)
(append (lyskom-get-recipients-from-misc-list
(text-stat->misc-info-list text-stat))
(list 'comm-to (text-stat->text-no text-stat)))
(list 'recpt (conf-stat->conf-no conf-stat))))
subject
body
'lyskom-change-conf-faq-2
conf-stat
(text-stat->text-no text-stat)
aux-no))))
(t (lyskom-format-insert 'not-supervisor-for conf-stat))))
(defun lyskom-change-conf-faq-2 (text-no conf-stat old-text-no old-aux-no)
(cache-del-conf-stat (conf-stat->conf-no conf-stat))
(initiate-modify-conf-info
'background
(lambda (retval conf-stat old-text-no text-no)
(if retval
(lyskom-format-insert-before-prompt 'changed-faq-for-conf-done conf-stat old-text-no text-no)
(lyskom-format-insert-before-prompt 'changed-faq-for-conf-failed conf-stat
old-text-no text-no
(lyskom-current-error))))
(conf-stat->conf-no conf-stat)
(when old-aux-no (list old-aux-no))
(list (lyskom-create-aux-item
0 14 0 0
(lyskom-create-aux-item-flags nil nil nil nil
nil nil nil nil)
0
(int-to-string text-no)))
conf-stat
old-text-no
text-no))
(blocking-do 'get-conf-stat conf-no))))
(if conf-stat
(lyskom-change-faq conf-stat (lyskom-get-aux-item
(conf-stat->aux-items conf-stat)
14))
(lyskom-insert (lyskom-get-string 'conf-does-not-exist)))))
(defun lyskom-change-faq (conf-stat aux-list)
"Change a FAQ for a conference."
(if (null aux-list)
(lyskom-format-insert 'conf-has-no-faq conf-stat)
;; Get a list of FAQ texts and corresponding aux-item-numbers
;; Get the FAQ to change
(let* ((faq-list (mapcar (lambda (x)
(cons (aux-item->data x)
(aux-item->aux-no x)))
aux-list))
(text-no-aux (cond ((= (length faq-list) 1) (car faq-list))
(t (lyskom-string-assoc
(lyskom-completing-read
(lyskom-get-string 'text-to-change-as-faq)
(lyskom-maybe-frob-completion-table
faq-list)
nil t)
faq-list))))
(text-no (string-to-int (car text-no-aux)))
(aux-no (cdr text-no-aux)))
(cond
;; If conf-stat is null we are changing the FAQ for the server.
;; Don't do this unless we are running enabled and have the right
;; privileges.
((and (null conf-stat)
(or (not lyskom-is-administrator)
(not (privs->admin (pers-stat->privileges
(blocking-do 'get-pers-stat
lyskom-pers-no))))))
(lyskom-format-insert 'not-supervisor-for-server))
;; If we have a conf-stat and are not administrator and not
;; supervisor for the conf, then we are not allowed to change
;; the FAQ.
((and conf-stat
(not lyskom-is-administrator)
(not (lyskom-is-supervisor (conf-stat->conf-no conf-stat)
lyskom-pers-no)))
(lyskom-format-insert 'not-supervisor-for conf-stat))
;; OK, it looks like we are allowed to change the FAQ.
(t
(blocking-do-multiple ((text-stat (get-text-stat text-no))
(text-mass (get-text text-no)))
(let* ((str (and text-mass (text->decoded-text-mass text-mass
text-stat)))
(subject (if (and str (string-match "\n" str))
(substring str 0 (match-beginning 0))
""
))
(body (if (and str (string-match "\n" str))
(substring str (match-end 0))
(or str ""))))
(lyskom-dispatch-edit-text
lyskom-proc
(apply 'lyskom-create-misc-list
(if (and text-stat text-mass)
(append (lyskom-get-recipients-from-misc-list
(text-stat->misc-info-list text-stat))
(list 'comm-to (text-stat->text-no text-stat)))
(list 'recpt (conf-stat->conf-no conf-stat))))
subject
body
'lyskom-change-faq-2
conf-stat
(text-stat->text-no text-stat)
aux-no))))))))
(defun lyskom-change-faq-2 (text-no conf-stat old-text-no old-aux-no)
(let ((aux-item (lyskom-create-aux-item
0 14 0 0
(lyskom-create-aux-item-flags nil nil nil nil
nil nil nil nil)
0
(int-to-string text-no))))
(if conf-stat
(progn
(cache-del-conf-stat (conf-stat->conf-no conf-stat))
(initiate-modify-conf-info 'background
'lyskom-change-faq-3
(conf-stat->conf-no conf-stat)
(when old-aux-no (list old-aux-no))
(list aux-item)
conf-stat
old-text-no
text-no))
(initiate-modify-server-info 'background
'lyskom-change-faq-3
(when old-aux-no (list old-aux-no))
(list aux-item)
conf-stat
old-text-no
text-no))))
(defun lyskom-change-faq-3 (retval conf-stat old-text-no text-no)
(if retval
(lyskom-format-insert-before-prompt 'changed-faq-for-conf-done conf-stat
old-text-no
text-no)
(lyskom-format-insert-before-prompt 'changed-faq-for-conf-failed conf-stat
old-text-no text-no
(lyskom-current-error))))
(def-kom-command kom-change-conf-motd ()
......
......@@ -2208,41 +2208,68 @@ Return-value: 'no-session if there is no suitable session to switch to
"Add a FAQ to a conference"
(interactive (list (lyskom-read-conf-no 'conf-to-add-faq '(conf pers) nil nil t)
(lyskom-read-text-no-prefix-arg 'text-to-add-as-faq nil 'last-seen-written)))
(lyskom-add-faq conf-no text-no))
(def-kom-command kom-add-server-faq (&optional text-no)
"Add a FAQ to the server"
(interactive (list (lyskom-read-text-no-prefix-arg 'text-to-add-as-faq nil 'last-seen-written)))
(lyskom-add-faq nil text-no))
(defun lyskom-add-faq (conf-no text-no)
"Add a FAQ to a conference or the server.
Add to the server if CONF-NO is nil, otherwise add to conference CONF-NO.
The text to add is passed in TEXT-NO"
(let ((text (blocking-do 'get-text-stat text-no)))
(if (null text)
(lyskom-format-insert 'no-such-text-no text-no)
(lyskom-format-insert 'adding-faq text-no conf-no)
(cache-del-text-stat text-no)
(cache-del-conf-stat conf-no)
(lyskom-report-command-answer
(blocking-do 'modify-conf-info
conf-no
nil
(list (lyskom-create-aux-item
0 14 0 0
(lyskom-create-aux-item-flags nil nil nil nil
nil nil nil nil)
0
(int-to-string text-no))))))))
(def-kom-command kom-del-faq (&optional conf-no text-no)
(when conf-no
(cache-del-conf-stat conf-no))
(let ((aux-item (lyskom-create-aux-item
0 14 0 0
(lyskom-create-aux-item-flags nil nil nil nil
nil nil nil nil)
0
(int-to-string text-no))))
(lyskom-report-command-answer
(if conf-no
(blocking-do 'modify-conf-info
conf-no
nil
(list aux-item))
(blocking-do 'modify-server-info
nil
(list aux-item))))))))
(def-kom-command kom-del-server-faq ()
"Remove a FAQ from the server"
(interactive)
(lyskom-del-faq nil))
(def-kom-command kom-del-faq ()
"Remove a FAQ from a conference"
(interactive)
(let* ((conf-stat (if conf-no
(blocking-do 'get-conf-stat conf-no)
(lyskom-read-conf-stat 'conf-to-del-faq '(conf pers) nil nil t)))
(faq-list (when conf-stat
(let ((tmp nil))
(lyskom-traverse-aux item
(conf-stat->aux-items conf-stat)
(progn
(when (eq (aux-item->tag item) 14)
(setq tmp (cons (cons (aux-item->data item) (aux-item->aux-no item)) tmp)))))
tmp)))
(text-no nil))
(let* ((conf-stat (lyskom-read-conf-stat 'conf-to-del-faq
'(conf pers) nil nil t)))
(lyskom-del-faq conf-stat)))
(defun lyskom-del-faq (conf-stat)
(let ((faq-list
(mapcar (lambda (aux)
(cons (aux-item->data aux)
(aux-item->aux-no aux)))
(lyskom-get-aux-item
(if (null conf-stat)
(server-info->aux-item-list
(blocking-do 'get-server-info))
(conf-stat->aux-items conf-stat))
14)))
(text-no nil))
(cond
((null conf-stat)
(lyskom-format-insert 'conf-no-does-not-exist-r conf-no))
((null faq-list)
(lyskom-format-insert 'conf-has-no-faq conf-stat))
(t (setq text-no
......@@ -2257,30 +2284,41 @@ Return-value: 'no-session if there is no suitable session to switch to
(string-to-int text-no)
conf-stat)
(cache-del-text-stat (string-to-int text-no))
(cache-del-conf-stat (conf-stat->conf-no conf-no))
(when conf-stat
(cache-del-conf-stat (conf-stat->conf-no conf-stat)))
(lyskom-report-command-answer
(blocking-do 'modify-conf-info
(conf-stat->conf-no conf-stat)
(list (cdr (lyskom-string-assoc text-no faq-list)))
nil)))))))
(if conf-stat
(blocking-do 'modify-conf-info
(conf-stat->conf-no conf-stat)
(list (cdr (lyskom-string-assoc text-no faq-list)))
nil)
(blocking-do 'modify-server-info
(list (cdr (lyskom-string-assoc text-no faq-list)))
nil))))))))
(def-kom-command kom-review-server-faq ()
"View the FAQs for the server"
(interactive)
(lyskom-review-faq nil (server-info->aux-item-list
(blocking-do 'get-server-info))))
(def-kom-command kom-review-faq (&optional conf-no)
"View the FAQs for a conference"
(interactive (list (lyskom-read-conf-no 'view-which-faq '(conf pers) nil nil t)))
(let* ((conf-stat (blocking-do 'get-conf-stat conf-no))
(faq-list (when conf-stat
(let ((tmp nil))
(lyskom-traverse-aux item
(conf-stat->aux-items conf-stat)
(progn
(when (eq (aux-item->tag item) 14)
(setq tmp (cons
(string-to-int (aux-item->data item))
tmp)))))
tmp))))
(interactive (list (lyskom-read-conf-no 'view-which-faq '(conf pers) t nil t)))
(if (zerop conf-no)
(lyskom-review-faq nil (server-info->aux-item-list
(blocking-do 'get-server-info)))
(let ((conf-stat (blocking-do 'get-conf-stat conf-no)))
(if conf-stat
(lyskom-review-faq conf-stat (conf-stat->aux-items conf-stat))
(lyskom-format-insert 'conf-no-does-not-exist-r conf-no)))))
(defun lyskom-review-faq (conf-stat aux-list)
(let ((faq-list (mapcar (lambda (aux)
(string-to-int (aux-item->data aux)))
(lyskom-get-aux-item aux-list 14))))
(cond
((null conf-stat)
(lyskom-format-insert 'conf-no-does-not-exist-r conf-no))
((null faq-list)
(lyskom-format-insert 'conf-has-no-faq conf-stat))
((eq 1 (length faq-list))
......
......@@ -228,18 +228,19 @@ language-force A language-variable whose value is to be forced."
(car arglist))))
(setq arglist (cdr arglist)))
(when doc-string
(when (or local-var-doc local-hook-doc)
(setq doc-string (concat doc-string "\n")))
(when local-var-doc
(setq doc-string (concat doc-string "\nThis variable is buffer-local.")))
(when local-hook-doc
(setq doc-string (concat doc-string "\nThis variable is a buffer-local hook.")))
(setq doc-string (concat doc-string "\n\n\
(if doc-string
(if
(if (or local-var-doc local-hook-doc)
(setq doc-string (concat doc-string "\n")))
(if local-var-doc
(setq doc-string (concat doc-string "\nThis variable is buffer-local.")))
(if local-hook-doc
(setq doc-string (concat doc-string "\nThis variable is a buffer-local hook.")))
(setq doc-string (concat doc-string "\n\n\
Setting this variable in .emacs may not yield the results you expect
since that will affect all LysKOM sessions.")))
since that will affect all LysKOM sessions."))))
(when (and doc-string server-doc)
(if (and doc-string server-doc)
(setq doc-string (concat doc-string "
This variable is normally stored on a per-session basis in the
......
......@@ -449,6 +449,7 @@ Leave the conference again to unsubscribe completely.\n")
(cant-read-textno . "You are not allowed to read text %#1:n.\n")
(not-supervisor-for . "You are not the supervisor of %#1M.\n")
(not-supervisor-for-server . "You do not have administrative rights on this LysKOM-server.\n")
(go-to-conf . "Go to conference %#1M.\n")
(cant-go-to-his-mailbox . "You are not allowed to go to %#1M's mailbox.\n")
(not-member-of-conf . "You are not a member of %#1M.\n")
......@@ -484,7 +485,7 @@ Read all about it at http://www.lysator.liu.se/history/")
(total-visible-users . " A total of %#1d visible user%#1?d%[%]%[s%] (%#2s).\n")
(total-active-users . " A total of %#1d active user%#1?d%[%]%[s%] (%#2s).\n")
(total-visible-active-users
. " A total of %#1d visible active user%#1?d%[%]%[s%] (%#2s).\n")
. " A total of %#1d visible%#1?d%[%]%[%] active user%#1?d%[%]%[s%] (%#2s).\n")
(client-statistics . " Distribution of clients:\n")
(client-statistics-line . " %4#2d %#1s")
(who-to-add-q . "Add whom/what as a recipient? ")
......@@ -1387,15 +1388,15 @@ On since %#8s%#9s")
(conf-to-add-faq . "Which conference do you want to add an FAQ for? ")
(text-to-add-as-faq . "Which text is the new FAQ? ")
(text-to-change-as-faq . "Which FAQ do you want to change? ")
(adding-faq . "Adding text %#1n as an FAQ for %#2M...")
(adding-faq . "Adding text %#1n as an FAQ for %#2?b%[%#2M%]%[the server%]...")
(conf-to-del-faq . "Which conference do you want to remove an FAQ from? ")
(text-to-del-as-faq . "Which text do you want to remove as FAQ? ")
(deleting-faq . "Removing text %#1n as FAQ for %#2M...")
(conf-has-no-faq . "%#1M has no FAQ\n")
(deleting-faq . "Removing text %#1n as FAQ for %#2?b%[%#2M%]%[the server%]...")
(conf-has-no-faq . "%#1?b%[%#1M%]%[The server%] has no FAQ\n")
(view-which-faq . "View FAQ for which conference? ")
(review-faq-for-r . "View FAQ for %#1M.\n")
(changed-faq-for-conf-done . "FAQ for %#1M changed to text %#3n.\n")
(changed-faq-for-conf-failed . "Unable to change FAQ for %#1M to text %#3n.
(review-faq-for-r . "View FAQ for %#1?b%[%#1M%]%[the server%].\n")
(changed-faq-for-conf-done . "FAQ in text %#2n for %#1?b%[%#1M%]%[the server%] changed to text %#3n.\n")
(changed-faq-for-conf-failed . "Unable to change FAQ for %#1?b%[%#1M%]%[the server%] to text %#3n.
%#2?b%[Text %#2n is still the FAQ.
%]%[%]%#4s")
(faq-in-text . "FAQ in text %#1n %#3s%#4s")
......@@ -1860,6 +1861,10 @@ Number of sessions: %21#1d (total)
(kom-set-motd-text . "Add notice")
(kom-create-aux-item . "Create auxiliary information")
(kom-status-server . "Status (of) server")
(kom-add-server-faq . "Add server FAQ")
(kom-del-server-faq . "Remove server FAQ")
(kom-review-server-faq . "Review server FAQ")
(kom-change-server-faq . "Change server FAQ")
))
(lyskom-language-var lyskom-language-codes en
......@@ -2185,6 +2190,7 @@ Number of sessions: %21#1d (total)
(define-key lyskom-en-mode-map (kbd "r M") 'kom-review-more)
(define-key lyskom-en-mode-map (kbd "r g") 'kom-review-last-normally-read)
(define-key lyskom-en-mode-map (kbd "r q") 'kom-review-faq)
(define-key lyskom-en-mode-map (kbd "r Q") 'kom-review-server-faq)
(define-key lyskom-en-mode-map (kbd "B") 'kom-review-backward)
(define-key lyskom-en-mode-map (kbd "r s") 'kom-review-stack)
(define-key lyskom-en-mode-map (kbd "r p") 'kom-review-presentation)
......
......@@ -416,6 +416,7 @@ Uttr
(cant-read-textno . "Du fr inte lsa text %#1:n.\n")
(not-supervisor-for . "Du r inte organisatr fr %#1M.\n")
(not-supervisor-for-server . "Du r inte administratr fr LysKOM-servern.\n")
(go-to-conf . "G till %#1M.\n")
(cant-go-to-his-mailbox . "Du fr inte g till %#1Ms brevlda.\n")
(not-member-of-conf . "Du r inte medlem i %#1M.\n")
......@@ -1386,15 +1387,15 @@ Uppkopplad sedan %#8s%#9s")
(conf-to-add-faq . "Vilket mte vill du lgga till en FAQ fr? ")
(text-to-add-as-faq . "Vilken text vill du lgga till som FAQ? ")
(text-to-change-as-faq . "Vilken FAQ vill du ndra? ")
(adding-faq . "Lgger till inlgg %#1n som FAQ fr %#2M...")
(adding-faq . "Lgger till inlgg %#1n som FAQ fr %#2?b%[%#2M%]%[servern%]...")
(conf-to-del-faq . "Vilket mte vill du ta bort en FAQ frn? ")
(text-to-del-as-faq . "Vilken text vill du ta bort som FAQ? ")
(deleting-faq . "Tar bort inlgg %#1n som FAQ fr %#2M...")
(conf-has-no-faq . "%#1M har ingen FAQ\n")
(deleting-faq . "Tar bort inlgg %#1n som FAQ fr %#2?b%[%#2M%]%[servern%]...")
(conf-has-no-faq . "%#1?b%[%%#1M%]%[Servern%] har ingen FAQ\n")
(view-which-faq . "terse FAQ fr vilket mte? ")
(review-faq-for-r . "terse FAQ fr %#1M.\n")
(changed-faq-for-conf-done . "FAQ fr %#1M ndrad till text %#3n.\n")
(changed-faq-for-conf-failed . "Kunde inte ndra FAQ fr %#1M till text %#3n.
(review-faq-for-r . "terse FAQ fr %#1?b%[%#1M%]%[servern%].\n")
(changed-faq-for-conf-done . "FAQ i text %#2n fr %#1?b%[%#1M%]%[servern%] ndrad till text %#3n.\n")
(changed-faq-for-conf-failed . "Kunde inte ndra FAQ fr %#1?b%[%#1M%]%[servern%] till text %#3n.
%#2?b%[Text %#2n r fortfarande FAQ.
%]%[%]%#4s")
(faq-in-text . "FAQ i text %#1n %#3s%#4s")
......@@ -1860,6 +1861,10 @@ Antal sessioner: %21#1d (totalt)
(kom-set-motd-text . "Addera lapp p drren")
(kom-create-aux-item . "Skapa tillggsinformation")
(kom-status-server . "Status (fr) servern")
(kom-add-server-faq . "Addera server-FAQ")
(kom-del-server-faq . "Ta bort server-FAQ")
(kom-review-server-faq . "terse server-FAQ")
(kom-change-server-faq . "ndra server-FAQ")
))
(lyskom-language-strings lyskom-help-strings sv
......@@ -2633,6 +2638,7 @@ Visar vilka som f
(define-key lyskom-sv-mode-map (kbd "} t") 'kom-find-root-review)
(define-key lyskom-sv-mode-map (kbd "} m") 'kom-review-marked-texts)
(define-key lyskom-sv-mode-map (kbd "} q") 'kom-review-faq)
(define-key lyskom-sv-mode-map (kbd "} Q") 'kom-review-server-faq)
(define-key lyskom-sv-mode-map (kbd "} a m") 'kom-review-all-marked-texts)
(define-key lyskom-sv-mode-map (kbd "} a SPC") 'kom-review-all)
(define-key lyskom-sv-mode-map (kbd "} b") 'kom-review-mail-headers)
......
......@@ -1803,6 +1803,10 @@ is a list of vectors, where each vector specifies an item.
kom-remove-presentation
kom-create-aux-item
kom-status-server
kom-add-server-faq
kom-del-server-faq
kom-change-server-faq
kom-review-server-faq
))
;;; ================================================================
......@@ -2321,7 +2325,9 @@ set to that text."
kom-add-faq
kom-add-no-comments
kom-add-private-answer
kom-add-request-confirm)
kom-add-request-confirm
kom-add-server-faq
)
"Commands that prompt for a text number rather than assume a default."
inherited)
......@@ -2641,8 +2647,14 @@ the value of kom-tell-phrases for fun.")
(defconst lyskom-admin-removed-commands
'(kom-enable-adm-caps))
(defconst lyskom-noadmin-removed-commands
'(kom-disable-adm-caps kom-remove-motd kom-set-motd kom-shutdown-server
kom-sync-database))
'(kom-disable-adm-caps
kom-remove-motd
kom-set-motd
kom-shutdown-server
kom-sync-database
kom-add-server-faq
kom-del-server-faq
kom-change-server-faq))
;;; ================================================================
......