diff --git a/src/ChangeLog b/src/ChangeLog index 312e1ae47a69bffdf6533b1bacf3fbeacdc004bf..94beb7f487c203a9b6e8774da874c8b585af0914 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,81 @@ +Wed Sep 10 11:23:33 1997 David Byers <davby@ida.liu.se> + + * edit-text.el (lyskom-edit-replace-miscs): Ny funktion. + (lyskom-edit-translate-miscs): Ny funktion. + (lyskom-edit-move-recipients): Ny funktion. + (kom-edit-move-recipients): Ny funktion. + (lyskom-edit-add-recipient/copy): Tar ett extra argument + what-to-do. + + * compatibility.el (lyskom-xemacs-keysym): Lade till C-� och C-� + (lyskom-gnu-keysym): Dito. + (characerp): Lade till definition f�r icke-MULEiserade Emacsen. + + * english-strings.el,swedish-strings.el (lyskom-sv-edit-mode-map): + Bytte ut alla C-c <bokstav> mot C-c C-<bokstav> + + * edit-text.el (kom-edit-add-comment): Ny funktion. + + * swedish-strings.el (lyskom-message): Lade till text-to-comment-q + + * edit-text.el (kom-edit-insert-text): Lade till window-argumented + till kom-edit-insert-text. + +Tue Sep 9 12:05:32 1997 David Byers <davby@ida.liu.se> + + * commands2.el (lyskom-help): Fixade buggen. + +Mon Sep 8 15:49:30 1997 David Byers <davby@ida.liu.se> + + * english-strings.el,swedish-strings.el (lyskom-sv-edit-mode-map): + Bind f�rhelvete inte C-c k! + +Thu Sep 4 18:07:14 1997 David Byers <davby@ida.liu.se> + + * commands1.el (kom-add-bcc): Nytt kommando + + * services.el (initiate-add-recipient): St�d f�r bcc-recpt. + + * lyskom-rest.el (lyskom-format-misc-item): St�d f�r bcc-recpt. + + * vars.el.in (lyskom-bcc-flag): Ny variabel. + + * edit-text.el (kom-edit-add-bcc): Ny funktion. + + * vars.el.in (lyskom-last-added-bccrcpt): Ny variabel. + + * commands1.el (lyskom-comment-recipients): Lade till st�d f�r + bcc-recpt. + (lyskom-add-sub-recipient): Dito. + + * english-strings.el, swedish-strings.el (lyskom-message): Lade + till BCC-RECPT relaterade str�ngar. + + * view-text.el (lyskom-view-text): Hantera BCC-RECPT + (lyskom-text-read-p): Dito. + (lyskom-text-read-at-least-once-p): Dito. + (lyskom-mark-as-read): Dito. + (lyskom-print-header-recpt): Dito. + + * prefetch.el (lyskom-prefetch-text-all-handler): Hantera BCC-RECPT + (lyskom-prefetch-texttree-handler): Dito. + (lyskom-prefetch-texts-handler): Dito. + + * lyskom-rest.el (lyskom-is-read-handler): Hantera BCC-RECPT. + + * komtypes.el (lyskom-create-misc-info): Uppdaterade doc-str�ngen. + + * filter.el (kom-super-jump): Hantera BCC-RECPT + + * commands1.el (lyskom-get-recipients-from-misc-list): Hantera + BCC-RECPT + + * async.el (lyskom-async-new-text): St�d f�r BCC-RECPT + + * filter.el (lyskom-filter-text-p-2): St�d f�r BCC-RECPT + + * parse.el (lyskom-parse-misc-info-list-sub): Parsea bcc-recpt. + Mon Aug 18 10:15:45 1997 David Byers <davby@ida.liu.se> * lyskom-rest.el (find-face): Deklarerade extern. diff --git a/src/TODO b/src/TODO index a0db11da40fe77494dd8d8d791aef8007ac80851..34d8307dfe79499c03da0510db733dea2ad76000 100644 --- a/src/TODO +++ b/src/TODO @@ -4,10 +4,6 @@ Att g -------- Buggar - Radera inl�gg borde gn�lla lite om det finns markeringar. - - �terse alla markerade borde g� att avbryta med n�sta m�te. - lyskom-replace-deferred verkar inte anv�nda lyskom-last-viewed i alla fall. Och den beter sig fel n�r man st�r vid prompten och vill bl�ddra bak�t. @@ -65,6 +61,12 @@ Att g -------- Allm�nna f�rb�ttringar + Filtrera asynkrona meddelanden (Pontus Lidman) + + Radera inl�gg borde gn�lla lite om det finns markeringar. + + �terse alla markerade borde g� att avbryta med n�sta m�te. + F�rgl�ggning av meddelanden baserat p� varifr�n de kommer, och vart det g�r. John Olsson efterfr�gar. diff --git a/src/async.el b/src/async.el index 04f6920005726167831dba969ee9b64205f39f4a..4996477876a02849648da04070996f469cb217a1 100644 --- a/src/async.el +++ b/src/async.el @@ -446,7 +446,8 @@ converted, before insertion." (let ((type (misc-info->type misc-info))) (cond ((or (eq type 'RECPT) - (eq type 'CC-RECPT)) + (eq type 'CC-RECPT) + (eq type 'BCC-RECPT)) ;; add on lyskom-reading-list and lyskom-to-do-list if ;; this recipient is a recipient that has been checked. (if (and (eq (misc-info->recipient-no misc-info) diff --git a/src/commands1.el b/src/commands1.el index b5661efa0ff6d804190817e4e5730a450da81c6d..886743669bcfdac7a33bae028402b02c95635534 100644 --- a/src/commands1.el +++ b/src/commands1.el @@ -681,7 +681,8 @@ The default subject is SUBJECT. TYPE is either 'comment or 'footnote." (if (null text-stat) (progn (lyskom-insert-string 'confusion-what-to-comment)) - (let ((ccrep)) + (let ((ccrep nil) + (bccrep nil)) (lyskom-tell-internat (if (eq type 'comment) 'kom-tell-write-comment 'kom-tell-write-footnote)) @@ -699,24 +700,32 @@ The default subject is SUBJECT. TYPE is either 'comment or 'footnote." (eq 'CC-RECPT (misc-info->type misc-info))) (setq ccrep (cons (misc-info->recipient-no misc-info) ccrep)) + (setq data (cons (blocking-do 'get-conf-stat + (misc-info->recipient-no misc-info)) + data))) + ((and (eq type 'footnote) + (eq 'BCC-RECPT (misc-info->type misc-info))) + (setq bccrep (cons (misc-info->recipient-no misc-info) + bccrep)) (setq data (cons (blocking-do 'get-conf-stat (misc-info->recipient-no misc-info)) data)))))) (text-stat->misc-info-list text-stat)) (lyskom-comment-recipients data lyskom-proc text-stat - subject type ccrep))))) + subject type ccrep bccrep))))) (defun lyskom-comment-recipients (data lyskom-proc text-stat - subject type ccrep) + subject type ccrep bccrep) "Compute recipients to a comment to a text. -Args: DATA, LYSKOM-PROC TEXT-STAT SUBJECT TYPE CCREP. +Args: DATA, LYSKOM-PROC TEXT-STAT SUBJECT TYPE CCREP BCCREP. DATA is a list of all the recipients that should receive this text. If DATA contains more than one conference the user is asked (using y-or-n-p) if all conferences really should receive the text. The call is continued to the lyskom-edit-text. TYPE is info whether this is going to be a comment of footnote. -CCREP is a list of all recipients that are going to be cc-recipients." +CCREP is a list of all recipients that are going to be cc-recipients. +BCCREP is a list of all recipient that are going to be bcc-recipients." (condition-case nil ;; Catch any quits @@ -753,10 +762,12 @@ CCREP is a list of all recipients that are going to be cc-recipients." (setq recver (append recver (list - (cons (if (memq (conf-stat->conf-no conf-stat) - ccrep) - 'cc-recpt - 'recpt) + (cons (cond + ((memq (conf-stat->conf-no conf-stat) + ccrep) 'cc-recpt) + ((memq (conf-stat->conf-no conf-stat) + bccrep) 'bcc-recpt) + (t 'recpt)) (conf-stat->comm-conf conf-stat))))) (if (lyskom-get-membership (conf-stat->conf-no conf-stat)) (setq member t)) @@ -936,7 +947,8 @@ Don't ask for confirmation." (type (misc-info->type info))) (cond ((null misc-list) '()) ((or (eq type 'RECPT) - (eq type 'CC-RECPT)) + (eq type 'CC-RECPT) + (eq type 'BCC-RECPT)) (append (list (intern (downcase (symbol-name type))) (misc-info->recipient-no info)) (lyskom-get-recipients-from-misc-list @@ -2555,6 +2567,16 @@ the user has used a prefix command argument." 'add-copy conf))) +(def-kom-command kom-add-bcc (text-no-arg) + "Add a cc recipient to a text. If the argument TEXT-NO-ARG is non-nil, +the user has used a prefix command argument." + (interactive "P") + (let ((conf (blocking-do 'get-conf-stat lyskom-last-added-bccrcpt))) + (lyskom-add-sub-recipient text-no-arg + (lyskom-get-string 'text-to-add-bcc) + 'add-bcc + conf))) + (def-kom-command kom-sub-recipient (text-no-arg) "Subtract a recipient from a text. If the argument TEXT-NO-ARG is non-nil, the user has used a prefix command argument." @@ -2632,6 +2654,18 @@ command argument." (conf-stat->conf-no conf-to-add-to) 'cc-recpt)) + ((eq action 'add-bcc) + (lyskom-format-insert 'adding-name-as-copy + conf-to-add-to + text-stat) + (setq lyskom-last-added-bccrcpt + (conf-stat->conf-no conf-to-add-to)) + (blocking-do 'add-recipient + text-no + (conf-stat->conf-no conf-to-add-to) + 'bcc-recpt)) + + ((eq action 'sub) (lyskom-format-insert 'remove-name-as-recipient conf-to-add-to diff --git a/src/commands2.el b/src/commands2.el index 40209650209b00c6cca90012e3c5d71007bf46bb..36ba55e90f318d8c02bea2453c2f3d4ffb593d5a 100644 --- a/src/commands2.el +++ b/src/commands2.el @@ -972,11 +972,13 @@ Format is 23:29 if the text is written today. Otherwise 04-01." (function (lambda (arg) (format "%s - %s" - (if (fboundp 'map-keymap) - (if (symbolp (car arg)) - (format "%s" (car arg)) - (format "%c" (car arg))) - (format "%c" (car arg))) + (if (fboundp 'key-description) + (key-description (car arg)) + (cond ((symbolp (car arg)) + (format "%s" (car arg))) + ((characterp (car arg)) + (format "%c" (car arg))) + (t (format "%S" (car arg))))) (or (lyskom-command-name (cdr arg)) (and (keymapp (cdr arg)) (lyskom-get-string diff --git a/src/compatibility.el b/src/compatibility.el index 8343cbbf431a662a1517d96a205c7b6df908cdeb..2f21360c9febb4452e5acffe35f648ad2e735747 100644 --- a/src/compatibility.el +++ b/src/compatibility.el @@ -143,6 +143,9 @@ of the lyskom-provide-* functions instead." (lyskom-provide-macro byte-code-function-p (obj) (` (compiled-function-p (, obj)))) +(lyskom-provide-function characterp (obj) + (integerp obj)) + (lyskom-compatibility-forms (fboundp 'frame-width) (fset 'frame-width 'screen-width)) @@ -177,13 +180,21 @@ of the lyskom-provide-* functions instead." (mouse-2 . (button2)) (mouse-3 . (button3)) (down-mouse-3 . (button3)) + (C-� . (control aring)) + (C-� . (control adiaeresis)) + (C-� . (control Aring)) + (C-� . (control Adiaeresis)) (� . aring) (� . Aring) (� . adiaeresis) (� . Adiaeresis))) (defconst lyskom-gnu-keysym - '((� . ?\�) + '((C-� . (control �)) + (C-� . (control �)) + (C-� . (control �)) + (C-� . (control �)) + (� . ?\�) (� . ?\�) (� . ?\�) (� . ?\�) diff --git a/src/edit-text.el b/src/edit-text.el index c2c9aeabe181807e8d85250a2ac8f76df3e8ae8a..720c8c461456383ea94377be66a217f323f3b828 100644 --- a/src/edit-text.el +++ b/src/edit-text.el @@ -120,6 +120,7 @@ Does lyskom-end-of-command." "Insert MISC-LIST into header of text. recpt -> Mottagare: <%d> %s. cc-recpt -> Extra kopia: <%d> %s. +bcc-recpt -> F�r k�nnedom: <%d> %s. comm-to -> Kommentar till text %d. footn-to -> Fotnot till text %d." (let ((edit-buffer (current-buffer)) @@ -139,6 +140,10 @@ footn-to -> Fotnot till text %d." (lyskom-edit-insert-misc-conf (blocking-do 'get-conf-stat data) (lyskom-get-string 'carbon-copy) where-put-misc data)) + ((eq key 'bcc-recpt) + (lyskom-edit-insert-misc-conf (blocking-do 'get-conf-stat data) + (lyskom-get-string 'blank-carbon-copy) + where-put-misc data)) ((eq key 'comm-to) (lyskom-edit-get-commented-author (blocking-do 'get-text-stat data) (lyskom-get-string 'comment) @@ -217,6 +222,7 @@ The second item should be the corresponding conf- or text-no. The result is a list of dotted pairs: ('recpt . conf-no) ('cc-recpt . conf-no) + ('bcc-recpt . conf-no) ('comm-to . text-no) ('footn-to . text-no). First element is a type-tag." @@ -528,6 +534,7 @@ text is a member of some recipient of this text." comm-to-list))) ((or (eq (car misc) 'recpt) (eq (car misc) 'cc-recpt)) + (eq (car misc) 'bcc-recpt) (if (eq (cdr misc) me) (setq num-me (1+ num-me))) (setq recipient-list (cons (cdr misc) recipient-list))))) @@ -624,6 +631,7 @@ text is a member of some recipient of this text." (setq comm-to-list (cons (cdr misc) comm-to-list))) ((or (eq (car misc) 'recpt) + (eq (car misc) 'bcc-recpt) (eq (car misc) 'cc-recpt)) (if (or (memq (cdr misc) author-list) (eq (cdr misc) me)) @@ -737,9 +745,14 @@ text is a member of some recipient of this text." (read-from-minibuffer (format "%s" (lyskom-get-string 'which-text-include))))) ((prefix-numeric-value current-prefix-arg))))) - (let ((buffer (current-buffer))) + (let ((buffer (current-buffer)) + (window (selected-window))) (set-buffer lyskom-buffer) - (initiate-get-text 'edit 'lyskom-edit-insert-commented no buffer) + (initiate-get-text 'edit + 'lyskom-edit-insert-commented + no + buffer + window) (set-buffer buffer) (sit-for 0))) @@ -778,6 +791,22 @@ text is a member of some recipient of this text." ;;; Changed by: Linus Tolke +(defun kom-edit-add-comment () + "Adds a text as commented to the text being edited." + (interactive) + (let* ((edit-buffer (current-buffer)) + (insert-at (point-min-marker)) + (text-no (lyskom-read-number (lyskom-get-string 'text-to-comment-q))) + (text-stat (blocking-do 'get-text-stat text-no))) + (lyskom-save-excursion + (if text-stat + (lyskom-edit-get-commented-author + (blocking-do 'get-text-stat text-no) + (lyskom-get-string 'comment) + insert-at text-no) + (lyskom-error "%s" (lyskom-get-string 'no-such-text-m)))))) + + (defun kom-edit-add-recipient () "Adds a conference as recipient to the text being edited." (interactive) @@ -785,14 +814,51 @@ text is a member of some recipient of this text." (lyskom-get-string 'recipient))) +(defun kom-edit-add-bcc () + "Adds a conference as bcc recipient to the text being edited." + (interactive) + (lyskom-edit-add-recipient/copy (lyskom-get-string 'added-blank-carbon-copy) + (lyskom-get-string 'blank-carbon-copy))) + + (defun kom-edit-add-copy () "Adds a conference to which a copy of the edited text will be sent." (interactive) (lyskom-edit-add-recipient/copy (lyskom-get-string 'added-carbon-copy) (lyskom-get-string 'carbon-copy))) +(defun kom-edit-move-text () + "Adds a conference as a recipient, and changes all other recipients to +CC recipients." + (interactive) + (lyskom-edit-add-recipient/copy (lyskom-get-string 'who-to-move-to-q) + (lyskom-get-string 'recipient) + 'lyskom-edit-move-recipients)) -(defun lyskom-edit-add-recipient/copy (prompt string) +(defun lyskom-edit-move-recipients (conf-stat insert-at edit-buffer) + (save-excursion + (set-buffer edit-buffer) + (let* ((tmp (lyskom-edit-parse-headers)) + (subject (car tmp)) + (miscs (cons 'MISC-LIST + (mapcar + (function + (lambda (x) + (if (eq (car x) 'recpt) + (cons 'cc-recpt (cdr x)) + x))) + (cdr (lyskom-edit-translate-miscs (cdr tmp))))))) + (lyskom-edit-replace-miscs subject miscs) + (lyskom-edit-insert-misc-conf conf-stat + (lyskom-get-string 'recipient) + (point-min-marker) + nil)))) + + + + + +(defun lyskom-edit-add-recipient/copy (prompt string &optional what-to-do) "Adds a new recipient or a cc-recipient to the text which is being edited." (let ((edit-buffer (current-buffer)) (insert-at (point-min-marker)) @@ -804,7 +870,9 @@ text is a member of some recipient of this text." ;; make sure it is up-to-date. (let ((text-no (conf-stat->msg-of-day conf-stat))) (if (zerop text-no) - (lyskom-edit-insert-misc-conf conf-stat string insert-at nil) + (if what-to-do + (funcall what-to-do conf-stat insert-at edit-buffer) + (lyskom-edit-insert-misc-conf conf-stat string insert-at nil)) (let ((text (blocking-do 'get-text text-no))) (if (and text (get-buffer-window edit-buffer)) (let ((win-config (current-window-configuration))) @@ -814,11 +882,15 @@ text is a member of some recipient of this text." (text->text-no text) (text->text-mass text)))) (and (j-or-n-p (lyskom-get-string 'still-want-to-add)) - (lyskom-edit-insert-misc-conf conf-stat string - insert-at nil)) + (if what-to-do + (funcall what-to-do conf-stat insert-at edit-buffer) + (lyskom-edit-insert-misc-conf conf-stat string + insert-at nil))) (set-window-configuration win-config)) - (lyskom-edit-insert-misc-conf conf-stat string - insert-at nil)))))))) + (if what-to-do + (funcall what-to-do conf-stat insert-at edit-buffer) + (lyskom-edit-insert-misc-conf conf-stat string + insert-at nil))))))))) @@ -827,6 +899,34 @@ text is a member of some recipient of this text." ;;; in lyskom-edit-mode. +(defun lyskom-edit-translate-miscs (misc-list) + "Translate result of lyskom-edit-parse-header to something we can send +to lyskom-edit-replace-miscs" + (let ((result nil)) + (while misc-list + (setq result (cons (cons (car misc-list) (car (cdr misc-list))) + result)) + (setq misc-list (cdr (cdr misc-list)))) + (cons 'MISC-LIST (nreverse result)))) + +(defun lyskom-edit-replace-miscs (subject misc-list) + "Replace all headers with SUBJECT and MISC-LIST" + (save-excursion + (let ((start nil) + (end nil)) + (goto-char (point-min)) + (setq start (point-marker)) + (set-marker-insertion-type start t) + (search-forward (substitute-command-keys + (lyskom-get-string 'header-separator))) + (end-of-line) + (setq end (point-marker)) + (goto-char (point-min)) + (lyskom-edit-insert-miscs misc-list subject "") + (delete-region start end) + (goto-char end) + (delete-char 1)))) + (defun lyskom-looking-at-header (header match-number) "Check if point is at the beginning of a header of type HEADER. Return the corresponding number (conf no etc.) if MATCH-NUMBER is @@ -869,6 +969,9 @@ easy to use the result in a call to `lyskom-create-misc-list'." (nconc result (list 'recpt n))) ((setq n (lyskom-looking-at-header 'carbon-copy-prefix 'angled)) (nconc result (list 'cc-recpt n))) + ((setq n (lyskom-looking-at-header 'blank-carbon-copy-prefix + 'angled)) + (nconc result (list 'bcc-recpt n))) ((setq n (lyskom-looking-at-header 'comment-prefix t)) (nconc result (list 'comm-to n))) ((setq n (lyskom-looking-at-header 'footnote-prefix t)) diff --git a/src/english-strings.el b/src/english-strings.el index 4f8715baec9a7513b1d922515de9433a87cbde19..5e6ee4f4999f6e4eb6a9d71347f662019b36f04e 100644 --- a/src/english-strings.el +++ b/src/english-strings.el @@ -67,36 +67,36 @@ (define-prefix-command 'lyskom-en-edit-insert-prefix) (define-key lyskom-en-edit-mode-map "\C-c" 'lyskom-en-edit-prefix) (define-key lyskom-en-edit-mode-map "\C-c?" 'lyskom-help) - (define-key lyskom-en-edit-mode-map "\C-cr" 'lyskom-en-edit-review-prefix) - (define-key lyskom-en-edit-mode-map "\C-ci" 'lyskom-en-edit-insert-prefix) + (define-key lyskom-en-edit-mode-map "\C-c\C-r" 'lyskom-en-edit-review-prefix) + (define-key lyskom-en-edit-mode-map "\C-c\C-i" 'lyskom-en-edit-insert-prefix) (define-key lyskom-en-edit-mode-map (lyskom-keys [mouse-2]) 'kom-button-click-or-yank) (define-key lyskom-en-edit-mode-map (lyskom-keys [down-mouse-3]) 'kom-popup-menu) (define-key lyskom-en-edit-mode-map [mouse-3] 'kom-mouse-null) (define-key lyskom-en-edit-mode-map "\C-c*" 'kom-button-press) (define-key lyskom-en-edit-mode-map "\C-c\C-c" 'kom-edit-send) (define-key lyskom-en-edit-mode-map "\C-c\C-s" 'kom-ispell-message) - (define-key lyskom-en-edit-mode-map "\C-ck" 'kom-edit-quit) (define-key lyskom-en-edit-mode-map "\C-c\C-k" 'kom-edit-quit) (define-key lyskom-en-edit-mode-map "\C-cr?" 'lyskom-help) - (define-key lyskom-en-edit-mode-map "\C-crc" 'kom-edit-show-commented) - (define-key lyskom-en-edit-mode-map "\C-ci?" 'lyskom-help) - (define-key lyskom-en-edit-mode-map "\C-cic" 'kom-edit-insert-commented) - (define-key lyskom-en-edit-mode-map "\C-ci\C-y" 'kom-edit-insert-commented) - (define-key lyskom-en-edit-mode-map "\C-ci1" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci2" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci3" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci4" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci5" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci6" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci7" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci8" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci9" 'kom-edit-insert-digit-text) - (define-key lyskom-en-edit-mode-map "\C-ci " 'kom-edit-insert-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-r\C-c" 'kom-edit-show-commented) + (define-key lyskom-en-edit-mode-map "\C-c\C-i?" 'lyskom-help) + (define-key lyskom-en-edit-mode-map "\C-c\C-i\C-c" 'kom-edit-insert-commented) + (define-key lyskom-en-edit-mode-map "\C-c\C-i\C-y" 'kom-edit-insert-commented) + (define-key lyskom-en-edit-mode-map "\C-c\C-i1" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i2" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i3" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i4" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i5" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i6" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i7" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i8" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i9" 'kom-edit-insert-digit-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-i " 'kom-edit-insert-text) (define-prefix-command 'lyskom-en-edit-add-prefix) - (define-key lyskom-en-edit-mode-map "\C-ca" 'lyskom-en-edit-add-prefix) - (define-key lyskom-en-edit-mode-map "\C-car" 'kom-edit-add-recipient) - (define-key lyskom-en-edit-mode-map "\C-cac" 'kom-edit-add-copy) - (define-key lyskom-en-edit-mode-map "\C-ca?" 'lyskom-help)) + (define-key lyskom-en-edit-mode-map "\C-c\C-a" 'lyskom-en-edit-add-prefix) + (define-key lyskom-en-edit-mode-map "\C-c\C-a\C-r" 'kom-edit-add-recipient) + (define-key lyskom-en-edit-mode-map "\C-c\C-a\C-c" 'kom-edit-add-copy) + (define-key lyskom-en-edit-mode-map "\C-c\C-a\C-m" 'kom-edit-move-text) + (define-key lyskom-en-edit-mode-map "\C-c\C-a?" 'lyskom-help)) ;;(defvar lyskom-header-separator @@ -322,6 +322,7 @@ and you have finished reading. Please come back later. (lyskom-client . "Client") (text-to-add-recipient . "Add recipient to which article:") (text-to-add-copy . "Add recipient of carbon copy of which article:") + (text-to-add-bcc . "Add recipient of blind carbon copy of which article:") (text-to-delete-recipient . "Remove recipient from which article:") (text-to-move . "Which text do you want to move: ") (text-to-add-comment-to . "Add comment to which article:") @@ -635,7 +636,9 @@ Article %#1n has more than one root but only one of the trees will be shown.\n") (recipient . "Recipient:") (recipient-prefix . "[Rr]") (carbon-copy . "Carbon copy:") + (blank-carbon-copy . "Blind Carbon copy:") (carbon-copy-prefix . "[Cc]\\([Aa]\\|[Cc]\\)") + (blank-carbon-copy-prefix . "[Bb]\\([Ll]\\|[Cc][Cc]\\)") (header-subject . "Subject: ") (header-separator . "\\<lyskom-edit-mode-map>\ --- Write below. \ @@ -651,6 +654,8 @@ Help: \\[describe-mode] ---") (which-text-include . "Include which article? ") (added-recipient . "Recipient: ") (added-carbon-copy . "Carbon copy to conference: ") + (added-blank-carbon-copy . "Blind carbon copy to conference: ") + (text-to-comment-q . "Which article to you want to comment? ") (conf-has-motd-no . "The conference has a note on the door. (%#1d)\n\n%#2s") (still-want-to-add . "Do you still want to add the conference as a recipient? ") (could-not-create-text . "\nCouldn't create the article. Error: %#2s.\n") @@ -684,6 +689,8 @@ Help: \\[describe-mode] ---") (head-Subject . "Subject: ") (Recipient . "Recipient") (Extra-recipient . "CC") + (Hidden-recipient . "BCC") + (Strange-recipient . "Also to") (send-at . " Posted: %#1s\n") (sent-by . " Posted by %#1P\n") (recieved-at . " Received: %#1s\n") @@ -1110,6 +1117,7 @@ On since %#8s%#9s") (kom-review-all-marked-texts . "Review all marked (articles)") (kom-add-recipient . "Add recipient") (kom-add-copy . "Add (recipient of) carbon copy") + (kom-add-bcc . "Addera (recipient of) blind carbon copy") (kom-sub-recipient . "Remove recipient") (kom-move-text . "Move text") (kom-add-comment . "Add comment") @@ -1585,6 +1593,7 @@ On since %#8s%#9s") (define-key lyskom-en-prioritize-mode-map "p" 'kom-prioritize-set-priority) (define-key lyskom-en-prioritize-mode-map "s" 'kom-prioritize-save) (define-key lyskom-en-prioritize-mode-map "q" 'kom-prioritize-quit) + (define-key lyskom-en-prioritize-mode-map "\C-c\C-c" 'kom-prioritize-quit) (define-key lyskom-en-prioritize-mode-map "\t" 'kom-next-link) (define-key lyskom-en-prioritize-mode-map "\M-\C-i" 'kom-previous-link) ) diff --git a/src/filter.el b/src/filter.el index bd14956cb5a896a4a3aa7e05bee71ab980793148..b2b854a17abdb5188199d8f7c64aa680e80244a1 100644 --- a/src/filter.el +++ b/src/filter.el @@ -155,7 +155,9 @@ invalid-value until a filter action has been selected.") misc (text-stat->misc-info-list text-stat) (let ((type (misc-info->type misc))) - (if (or (eq type 'RECPT) (eq type 'CC-RECPT)) + (if (or (eq type 'RECPT) + (eq type 'CC-RECPT) + (eq type 'BCC-RECPT)) (initiate-get-conf-stat 'filter nil (misc-info->recipient-no misc))))) @@ -532,6 +534,7 @@ the current text" (let ((text-stat (blocking-do 'get-text-stat lyskom-current-text)) (recipients nil) (cc-recipients nil) + (bcc-recipients nil) (filter-recipient nil) (conf-stat (if (and lyskom-current-conf (not (zerop lyskom-current-conf))) @@ -543,7 +546,10 @@ the current text" recipients))) ((eq (misc-info->type misc) 'CC-RECPT) (setq cc-recipients (cons (misc-info->recipient-no misc) - cc-recipients))))) + cc-recipients))) + ((eq (misc-info->type misc) 'BCC-RECPT) + (setq bcc-recipients (cons (misc-info->recipient-no misc) + bcc-recipients))))) (setq filter-recipient (or (and conf-stat @@ -552,7 +558,8 @@ the current text" (memq lyskom-current-conf cc-recipients)) lyskom-current-conf) (car (nreverse recipients)) - (car (nreverse cc-recipients)))) + (car (nreverse cc-recipients)) + (car (nreverse bcc-recipients)))) (if (null filter-recipient) (lyskom-insert-string 'no-recipient) diff --git a/src/komtypes.el b/src/komtypes.el index b2ad7c037d22420984cad875dae0541e025bc424..e71c9c084164eba2aa50cd54ffe007e93df9b389 100644 --- a/src/komtypes.el +++ b/src/komtypes.el @@ -682,7 +682,8 @@ Both vectors should be of the same length." sender sent-at) "Create a misc-info from all parameters. -TYPE is one of RECPT, CC-RECPT COMM-TO COMM-IN FOOTN-TO or FOOTN-IN." +TYPE is one of RECPT, CC-RECPT, BCC-RECPT, COMM-TO, COMM-IN, +FOOTN-TO or FOOTN-IN." (cons 'MISC-INFO (vector type recipient-no local-no rec-time comm-to comm-in diff --git a/src/lyskom-rest.el b/src/lyskom-rest.el index 48620e5fc01959cb649360244f3a64d76247c5d1..3c65417641c31a3679cdb553e60b85e64db975ad 100644 --- a/src/lyskom-rest.el +++ b/src/lyskom-rest.el @@ -389,6 +389,7 @@ lyskom-mark-as-read." (lyskom-traverse misc (text-stat->misc-info-list text-stat) (if (or (eq 'RECPT (misc-info->type misc)) + (eq 'BCC-RECPT (misc-info->type misc)) (eq 'CC-RECPT (misc-info->type misc))) (let ((membership (lyskom-try-get-membership (misc-info->recipient-no misc)))) @@ -2767,7 +2768,9 @@ Other objects are converted correctly." ((eq (car misc-item) 'recpt) 0) ((eq (car misc-item) 'cc-recpt) 1) ((eq (car misc-item) 'comm-to) 2) - ((eq (car misc-item) 'footn-to) 4)) + ((eq (car misc-item) 'footn-to) 4) + ((eq (car misc-item) 'bcc-recpt) + (if lyskom-bcc-flag 15 1))) (cdr misc-item))) diff --git a/src/parse.el b/src/parse.el index 4a27f7c84e1455443e82b6d8a4a44ed9d7a0a151..72c4c14074c26c5ae02824e0b13a0580ef49d859 100644 --- a/src/parse.el +++ b/src/parse.el @@ -338,6 +338,8 @@ result is assigned to the element." (setq res (lyskom-parse-misc-footn-to last n))) ((eq next-key 5) ;footn-in (setq res (lyskom-parse-misc-footn-in last n))) + ((eq next-key 15) ;bcc-recpt + (setq res (lyskom-parse-misc-recipient 'BCC-RECPT last n))) (t ;error! (signal 'lyskom-protocol-error (list 'lyskom-parse-misc-info-list-sub @@ -350,7 +352,7 @@ result is assigned to the element." (defun lyskom-parse-misc-recipient (type last n) "Parse a recipient. Args: TYPE LAST N. -TYPE is either RECPT or CC-RECPT. +TYPE is either RECPT, CC-RECPT or BCC-RECPT. LAST is a pointer to the last element on a misc-info-list. N is number of misc-items left to parse. Returns (cons n next-key)." diff --git a/src/prefetch.el b/src/prefetch.el index 30a2c77de95cc5b6374f974511faeeb0a7d861bc..59ac56c648a08a2f2a5d740ed0e92b710bd7276b 100644 --- a/src/prefetch.el +++ b/src/prefetch.el @@ -561,6 +561,7 @@ Put the requests on QUEUE." (let ((type (misc-info->type misc))) (cond ((or (eq type 'RECPT) + (eq type 'BCC-RECPT) (eq type 'CC-RECPT)) (lyskom-prefetch-conf (misc-info->recipient-no misc) queue)) ((eq type 'COMM-IN) @@ -592,6 +593,7 @@ Put the requests on QUEUE." (let ((type (misc-info->type misc))) (cond ((or (eq type 'RECPT) + (eq type 'BCC-RECPT) (eq type 'CC-RECPT)) (lyskom-prefetch-conf (misc-info->recipient-no misc) queue)) ((eq type 'COMM-IN) @@ -698,6 +700,7 @@ Put the requests on QUEUE." (let ((type (misc-info->type misc))) (cond ((or (eq type 'RECPT) + (eq type 'BCC-RECPT) (eq type 'CC-RECPT)) (lyskom-prefetch-conf (misc-info->recipient-no misc) queue)) ((eq type 'COMM-IN) diff --git a/src/swedish-strings.el b/src/swedish-strings.el index 40070816619e21e9dec79336afe69eb5566c319c..945a52701dc6f8ceb2653f66c0c9a25792cd5fe8 100644 Binary files a/src/swedish-strings.el and b/src/swedish-strings.el differ diff --git a/src/vars.el.in b/src/vars.el.in index 47a0d48d7cb18f5b2e11133f7fc34c15edbc895f..d9927e3e47e18b6c3cf621b92c4af46e02af1a14 100644 --- a/src/vars.el.in +++ b/src/vars.el.in @@ -1093,7 +1093,8 @@ Users are encouraged to use their best sense of humor." "The largest int emacs, and thus this LysKOM client, can handle.") (defconst lyskom-server-features - '(((>= 1 9 0) (lyskom-accept-async-flag + '(((> 1 9 0) (lyskom-bcc-flag)) + ((>= 1 9 0) (lyskom-accept-async-flag lyskom-dynamic-session-info-flag lyskom-idle-time-flag)) ((>= 1 8 0) (lyskom-long-conf-types-flag @@ -1159,6 +1160,10 @@ lyskom-server-features for more information." "t if the server supports the accept-async call." inherited) +(def-kom-var lyskom-bcc-flag nil + "t if the server supports the bcc misc items." + inherited) + (def-kom-var lyskom-max-packet-size lyskom-max-int "The largest possible packet size that can be transmitted to a TCP/IP connection. This should be unlimited, but in practise there @@ -1482,6 +1487,9 @@ This is used by the command kom-busy-wait." (def-kom-var lyskom-last-added-ccrcpt 0 "The default conference when adding a ccrecipient.") +(def-kom-var lyskom-last-added-bccrcpt 0 + "The default conference when adding a bccrecipient.") + (def-kom-var lyskom-saved-file-name (concat default-directory "kom-text") "The default file name when saving a lyskom-text.") diff --git a/src/view-text.el b/src/view-text.el index c10ba466944757206530372e848b704ecf13bbc2..76aa6e56f1cf275c5ce31d634effd10bff275bed 100644 --- a/src/view-text.el +++ b/src/view-text.el @@ -129,6 +129,7 @@ Note that this function must not be called asynchronously." (let ((type (misc-info->type misc))) (cond ((or (eq type 'RECPT) + (eq type 'BCC-RECPT) (eq type 'CC-RECPT)) (lyskom-print-header-recpt (misc-info->recipient-no misc) @@ -304,7 +305,9 @@ recipients to it that the user is a member in." (let* ((misc-info (elt misc-info-list i)) (type (misc-info->type misc-info))) (cond - ((or (eq type 'RECPT) (eq type 'CC-RECPT)) + ((or (eq type 'RECPT) + (eq type 'BCC-RECPT) + (eq type 'CC-RECPT)) ;; Is this function ever called asynchronously? If not, we ;; can use lyskom-get-membership istead. (let ((membership (lyskom-try-get-membership @@ -339,7 +342,9 @@ the user is a member of. Uses blocking-do. Returns t if TEXT-STAT is nil." (setq misc-item (car misc-info-list)) (setq type (misc-info->type misc-item)) (setq misc-info-list (cdr misc-info-list)) - (cond ((or (eq type 'RECPT) (eq type 'CC-RECPT)) + (cond ((or (eq type 'RECPT) + (eq type 'BCC-RECPT) + (eq type 'CC-RECPT)) (setq membership (lyskom-get-membership (misc-info->recipient-no misc-item))) (when membership @@ -524,6 +529,7 @@ the client. That is done by lyskom-is-read." (lyskom-traverse misc-info misc-info-list (if (and (or (eq (misc-info->type misc-info) 'RECPT) + (eq (misc-info->type misc-info) 'BCC-RECPT) (eq (misc-info->type misc-info) 'CC-RECPT)) ;; The whole membership list might not be fetched ;; yet. So we better mark it as read in all conferences. @@ -539,7 +545,11 @@ the client. That is done by lyskom-is-read." (lyskom-format-insert "%#1s: %#2M <%#3d>\n" (cond ((eq (misc-info->type misc) 'RECPT) (lyskom-get-string 'Recipient)) - (t (lyskom-get-string 'Extra-recipient))) + ((eq (misc-info->type misc) 'BCC-RECPT) + (lyskom-get-string 'Hidden-recipient)) + ((eq (misc-info->type misc) 'CC-RECPT) + (lyskom-get-string 'Extra-recipient)) + (t (lyskom-get-string 'Strange-recipient))) conf-no (misc-info->local-no misc)) (if (misc-info->sent-at misc)