emacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-commit] emacs/lisp/mh-e mh-utils.el mh-e.el mh-customiz...


From: Bill Wohler
Subject: [Emacs-commit] emacs/lisp/mh-e mh-utils.el mh-e.el mh-customiz...
Date: Sat, 29 Oct 2005 01:09:05 -0400

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Branch:         
Changes by:     Bill Wohler <address@hidden>    05/10/29 05:09:05

Modified files:
        lisp/mh-e      : mh-utils.el mh-e.el mh-customize.el mh-comp.el 
                         ChangeLog 

Log message:
        * mh-comp.el (mh-annotate-msg): Use new variable
        mh-scan-field-destination-offset rather than hard-coding 1.
        
        * mh-customize.el (mh-interpret-number-as-range-flag): Add * to
        docstring.
        (mh-adaptive-cmd-note-flag-check, mh-scan-format-file-check): New
        functions to check input for mh-adaptive-cmd-note-flag and
        mh-scan-format-file respectively.
        (mh-adaptive-cmd-note-flag, mh-scan-format-file): Docstring fixes, add
        :set.
        
        * mh-e.el: (mh-scan-field-destination-offset): New variable. The
        destination is the -, t, b, c, or n character for Replied, To, cc,
        Bcc, or Newsgroups respectively. (mh-make-folder,
        mh-regenerate-headers, mh-generate-new-cmd-note) Call new function
        mh-msg-num-width-to-column to make leap between width and column more
        explicit.
        (mh-msg-num-width-to-column): New function that steals logic from old
        mh-set-cmd-note. Also, throw error if mh-scan-format-file isn't t
        since we can't adapt the scan lines in this case.
        (mh-set-cmd-note): Now just simply sets mh-cmd-note which will make
        the documentation more clear.
        (mh-generate-new-cmd-note): Docstring fix--mh-cmd-note is a column,
        not a width.
        (mh-add-sequence-notation, mh-remove-sequence-notation): Use new
        variable mh-scan-field-destination-offset rather than hard-coding 1.
        
        * mh-utils.el (mh-cmd-note) Synced docstring with manual.
        (mh-notate): Use new variable mh-scan-field-destination-offset rather
        than hard-coding 1.
        (mh-message-number-width): Rename to mh-msg-num-width to be consistent
        with mh-get-msg-num and mh-msg-num-width-to-column.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/mh-e/mh-utils.el.diff?tr1=1.18&tr2=1.19&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/mh-e/mh-e.el.diff?tr1=1.30&tr2=1.31&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/mh-e/mh-customize.el.diff?tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/mh-e/mh-comp.el.diff?tr1=1.20&tr2=1.21&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/mh-e/ChangeLog.diff?tr1=1.55&tr2=1.56&r1=text&r2=text

Patches:
Index: emacs/lisp/mh-e/ChangeLog
diff -u emacs/lisp/mh-e/ChangeLog:1.55 emacs/lisp/mh-e/ChangeLog:1.56
--- emacs/lisp/mh-e/ChangeLog:1.55      Fri Oct 28 22:28:31 2005
+++ emacs/lisp/mh-e/ChangeLog   Sat Oct 29 05:09:05 2005
@@ -1,5 +1,39 @@
 2005-10-28  Bill Wohler  <address@hidden>
 
+       * mh-comp.el (mh-annotate-msg): Use new variable
+       mh-scan-field-destination-offset rather than hard-coding 1.
+
+       * mh-customize.el (mh-interpret-number-as-range-flag): Add * to
+       docstring.
+       (mh-adaptive-cmd-note-flag-check, mh-scan-format-file-check): New
+       functions to check input for mh-adaptive-cmd-note-flag and
+       mh-scan-format-file respectively.
+       (mh-adaptive-cmd-note-flag, mh-scan-format-file): Docstring fixes,
+       add :set.
+
+       * mh-e.el: (mh-scan-field-destination-offset): New variable. The
+       destination is the -, t, b, c, or n character for Replied, To, cc,
+       Bcc, or Newsgroups respectively.
+       (mh-make-folder, mh-regenerate-headers, mh-generate-new-cmd-note)
+       Call new function mh-msg-num-width-to-column to make leap between
+       width and column more explicit.
+       (mh-msg-num-width-to-column): New function that steals logic from
+       old mh-set-cmd-note. Also, throw error if mh-scan-format-file
+       isn't t since we can't adapt the scan lines in this case.
+       (mh-set-cmd-note): Now just simply sets mh-cmd-note which will
+       make the documentation more clear.
+       (mh-generate-new-cmd-note): Docstring fix--mh-cmd-note is a
+       column, not a width.
+       (mh-add-sequence-notation, mh-remove-sequence-notation): Use new
+       variable mh-scan-field-destination-offset rather than hard-coding
+       1. 
+
+       * mh-utils.el (mh-cmd-note) Synced docstring with manual.
+       (mh-notate): Use new variable mh-scan-field-destination-offset
+       rather than hard-coding 1.
+       (mh-message-number-width): Rename to mh-msg-num-width to be
+       consistent with mh-get-msg-num and mh-msg-num-width-to-column.
+
        * mh-customize.el (mh-x-face-file, mh-show-use-xface-flag)
        (mail-citation-hook): Quote URLs in docstrings and precede with
        `URL'. The former will suppress checkdoc warnings, the latter will
Index: emacs/lisp/mh-e/mh-comp.el
diff -u emacs/lisp/mh-e/mh-comp.el:1.20 emacs/lisp/mh-e/mh-comp.el:1.21
--- emacs/lisp/mh-e/mh-comp.el:1.20     Fri Oct 28 01:39:14 2005
+++ emacs/lisp/mh-e/mh-comp.el  Sat Oct 29 05:09:05 2005
@@ -698,7 +698,8 @@
     (cond ((get-buffer buffer)          ; Buffer may be deleted
            (set-buffer buffer)
            (mh-iterate-on-range nil msg
-             (mh-notate nil note (1+ mh-cmd-note)))))))
+             (mh-notate nil note
+                        (+ mh-cmd-note mh-scan-field-destination-offset)))))))
 
 (defun mh-insert-fields (&rest name-values)
   "Insert the NAME-VALUES pairs in the current buffer.
Index: emacs/lisp/mh-e/mh-customize.el
diff -u emacs/lisp/mh-e/mh-customize.el:1.27 
emacs/lisp/mh-e/mh-customize.el:1.28
--- emacs/lisp/mh-e/mh-customize.el:1.27        Fri Oct 28 22:28:31 2005
+++ emacs/lisp/mh-e/mh-customize.el     Sat Oct 29 05:09:04 2005
@@ -948,7 +948,7 @@
 ;;; Ranges (:group 'mh-ranges)
 
 (defcustom mh-interpret-number-as-range-flag t
-  "On means interpret a number as a range.
+  "*On means interpret a number as a range.
 Since one of the most frequent ranges used is \"last:N\", MH-E will interpret
 input such as \"200\" as \"last:200\" if this option is on (which is the
 default). If you need to scan just the message 200, then use the range
@@ -960,18 +960,44 @@
 
 ;;; Scan Line Formats (:group 'mh-scan-line-formats)
 
+;;; Forward definition to avoid compiler and runtime error.
+(defvar mh-scan-format-file t)
+
+(defun mh-adaptive-cmd-note-flag-check (symbol value)
+  "Check if desired setting is legal.
+Throw an error if user tries to turn on `mh-adaptive-cmd-note-flag' when
+`mh-scan-format-file' isn't t. Otherwise, set SYMBOL to VALUE."
+  (if (and value
+           (not (eq mh-scan-format-file t)))
+      (error "%s %s" "Can't turn on unless mh-scan-format-file"
+             "is set to \"Use MH-E scan Format\"")
+    (set-default symbol value)))
+
+(defun mh-scan-format-file-check (symbol value)
+  "Check if desired setting is legal.
+Throw an error if user tries to set `mh-scan-format-file' to anything but t
+when `mh-adaptive-cmd-note-flag' is on. Otherwise, set SYMBOL to VALUE."
+  (if (and (not (eq value t))
+           (eq mh-adaptive-cmd-note-flag t))
+      (error "%s %s" "You must turn off mh-adaptive-cmd-note-flag"
+             "unless you use \"Use MH-E scan Format\"")
+    (set-default symbol value)))
+
 (defcustom mh-adaptive-cmd-note-flag t
   "*On means that the message number width is determined dynamically.
 If you've created your own format to handle long message numbers, you'll be
 pleased to know you no longer need it since MH-E adapts its internal format
 based upon the largest message number if this option is on (the default).
+This option may only be turned on when `mh-scan-format-file' is set to \"Use
+MH-E scan Format\".
 
 If you prefer fixed-width message numbers, turn off this option and call
-`mh-set-cmd-note' with the width specified by your format file (see
-`mh-scan-format-file'). For example, the default width is 4, so you would use
-\"(mh-set-cmd-note 4)\"."
+`mh-set-cmd-note' with the width specified by your format file
+\(see `mh-scan-format-file'). For example, the default width is 4, so you would
+use \"(mh-set-cmd-note 4)\"."
   :type 'boolean
-  :group 'mh-scan-line-formats)
+  :group 'mh-scan-line-formats
+  :set 'mh-adaptive-cmd-note-flag-check)
 
 (defcustom mh-scan-format-file t
   "Specifies the format file to pass to the scan program.
@@ -979,7 +1005,10 @@
 The default setting for this option is \"Use MH-E scan Format\". This means
 that the format string will be taken from the either `mh-scan-format-mh' or
 `mh-scan-format-nmh' depending on whether MH or nmh (or GNU mailutils) is in
-use. You can also set this option to \"Use Default scan Format\" to get the
+use. This setting also enables you to turn on the `mh-adaptive-cmd-note-flag'
+option.
+
+You can also set this option to \"Use Default scan Format\" to get the
 same output as you would get if you ran \"scan\" from the shell. If you have a
 format file that you want MH-E to use but not MH, you can set this option to
 \"Specify a scan Format File\" and enter the name of your format file.
@@ -987,15 +1016,13 @@
 If you change the format of the scan lines you'll need to tell MH-E how to
 parse the new format. As you will see, quite a lot of variables are involved
 to do that. Use \"\\[apropos] RET mh-scan.*regexp\" to obtain a list of these
-variables. You may also have to call `mh-set-cmd-note' to modify `mh-cmd-note'
-with the column for your notations if you turn off
-`mh-adaptive-cmd-note-flag'. However, you will need to set the `mh-cmd-note'
-variable manually with `setq' if `mh-scan-format-file' is set to anything
-other than \"Use MH-E scan Format\"."
+variables. You will also have to call `mh-set-cmd-note' if your notations are
+not in column 4 (columns in Emacs start with 0)."
   :type '(choice (const :tag "Use MH-E scan Format" t)
                  (const :tag "Use Default scan Format" nil)
                  (file  :tag "Specify a scan Format File"))
-  :group 'mh-scan-line-formats)
+  :group 'mh-scan-line-formats
+  :set 'mh-scan-format-file-check)
 
 (defcustom mh-scan-prog "scan"
   "*Program used to scan messages.
Index: emacs/lisp/mh-e/mh-e.el
diff -u emacs/lisp/mh-e/mh-e.el:1.30 emacs/lisp/mh-e/mh-e.el:1.31
--- emacs/lisp/mh-e/mh-e.el:1.30        Fri Oct 28 01:59:11 2005
+++ emacs/lisp/mh-e/mh-e.el     Sat Oct 29 05:09:04 2005
@@ -114,7 +114,7 @@
 ;; The following scan formats are passed to the scan program if the setting of
 ;; `mh-scan-format-file' is t. They are identical except the later one makes
 ;; use of the nmh `decode' function to decode RFC 2047 encodings. If you just
-;; want to change the width of the msg number, use the `mh-set-cmd-note'
+;; want to change the column of the notations, use the `mh-set-cmd-note'
 ;; function.
 
 (defvar mh-scan-format-mh
@@ -338,6 +338,10 @@
   "Number of columns consumed by whitespace after from-mbox in 
`mh-scan-format'.
 This column will only ever have spaces in it.")
 
+(defvar mh-scan-field-destination-offset
+  (+ mh-scan-cmd-note-width)
+  "The offset from the `mh-cmd-note' for the destination column.")
+
 (defvar mh-scan-field-from-start-offset
   (+ mh-scan-cmd-note-width
      mh-scan-destination-width
@@ -1402,7 +1406,7 @@
   (setq buffer-read-only nil)
   (erase-buffer)
   (if mh-adaptive-cmd-note-flag
-      (mh-set-cmd-note (mh-message-number-width name)))
+      (mh-set-cmd-note (mh-msg-num-width-to-column (mh-msg-num-width name))))
   (setq buffer-read-only t)
   (mh-folder-mode)
   (mh-set-folder-modified-p nil)
@@ -1719,20 +1723,24 @@
   (when (mh-outstanding-commands-p)
     (mh-notate-deleted-and-refiled)))
 
-(defun mh-set-cmd-note (width)
-  "Set `mh-cmd-note' to WIDTH (minimum of 2).
-
-If `mh-scan-format-file' is set to \"Use Default scan Format\" or \"Specify a
-scan Format File\", then this function will NOT update `mh-cmd-note'. In these
-cases, the user should change `mh-cmd-note' with `setq' if necessary.
+(defun mh-msg-num-width-to-column (width)
+  "Return the column for notations given message number WIDTH.
+Note that columns in Emacs start with 0.
+
+If `mh-scan-format-file' is set to \"Use MH-E scan Format\" this means that
+either `mh-scan-format-mh' or `mh-scan-format-nmh' are in use. This function
+therefore assumes that the first column is empty (to provide room for the
+cursor), the following WIDTH columns contain the message number, and the
+column for notations comes after that."
+  (if (eq mh-scan-format-file t)
+      (max (1+ width) 2)
+    (error "%s %s" "Can't call mh-msg-num-width-to-column"
+           "when mh-scan-format-file is not t")))
 
+(defun mh-set-cmd-note (column)
+  "Set `mh-cmd-note' to COLUMN.
 Note that columns in Emacs start with 0."
-  ;; Add one to the width to always have whitespace in column zero.
-  (setq width (max (1+ width) 2))
-  (if (and (equal mh-scan-format-file t)
-           (not (eq mh-cmd-note width)))
-      (setq mh-cmd-note width))
-  mh-cmd-note)
+  (setq mh-cmd-note column))
 
 (defun mh-regenerate-headers (range &optional update)
   "Scan folder over range RANGE.
@@ -1747,7 +1755,8 @@
           (goto-char (point-max))
         (delete-region (point-min) (point-max))
         (if mh-adaptive-cmd-note-flag
-            (mh-set-cmd-note (mh-message-number-width folder))))
+            (mh-set-cmd-note (mh-msg-num-width-to-column (mh-msg-num-width
+                                                          folder)))))
       (setq scan-start (point))
       (apply #'mh-exec-cmd-output
              mh-scan-prog nil
@@ -1781,9 +1790,9 @@
 After doing an `mh-get-new-mail' operation in this FOLDER, at least
 one line that looks like a truncated message number was found.
 
-Remove the text added by the last `mh-inc' command. It should be the
-messages cur-last. Call `mh-set-cmd-note' with the widest message number
-in FOLDER.
+Remove the text added by the last `mh-inc' command. It should be the messages
+cur-last. Call `mh-set-cmd-note', adjusting the notation column with the width
+of the largest message number in FOLDER.
 
 Reformat the message number width on each line in the buffer and trim
 the line length to fit in the window.
@@ -1800,7 +1809,7 @@
       (delete-char (- (point-max) (point)))
       ;; Update the current buffer to reflect the new mh-cmd-note
       ;; value needed to display messages.
-      (mh-set-cmd-note (mh-message-number-width folder))
+      (mh-set-cmd-note (mh-msg-num-width-to-column (mh-msg-num-width folder)))
       (setq mh-cmd-note-fmt (concat "%" (format "%d" mh-cmd-note) "d"))
       ;; Cleanup the messages that are in the buffer right now
       (goto-char (point-min))
@@ -1958,11 +1967,12 @@
             (mh-notate nil nil mh-cmd-note)
             (when font-lock-mode
               (font-lock-fontify-region (point) (line-end-position))))
-        (forward-char (1+ mh-cmd-note))
+        (forward-char (+ mh-cmd-note mh-scan-field-destination-offset))
         (let ((stack (gethash msg mh-sequence-notation-history)))
           (setf (gethash msg mh-sequence-notation-history)
                 (cons (char-after) stack)))
-        (mh-notate nil mh-note-seq (1+ mh-cmd-note))))))
+        (mh-notate nil mh-note-seq
+                   (+ mh-cmd-note mh-scan-field-destination-offset))))))
 
 (defun mh-remove-sequence-notation (msg internal-seq-flag &optional all)
   "Remove sequence notation from the MSG on the current line.
@@ -1981,7 +1991,7 @@
         (when stack
           (save-excursion
             (beginning-of-line)
-            (forward-char (1+ mh-cmd-note))
+            (forward-char (+ mh-cmd-note mh-scan-field-destination-offset))
             (delete-char 1)
             (insert (car stack))))
         (setf (gethash msg mh-sequence-notation-history) (cdr stack))))))
Index: emacs/lisp/mh-e/mh-utils.el
diff -u emacs/lisp/mh-e/mh-utils.el:1.18 emacs/lisp/mh-e/mh-utils.el:1.19
--- emacs/lisp/mh-e/mh-utils.el:1.18    Fri Oct 28 01:59:11 2005
+++ emacs/lisp/mh-e/mh-utils.el Sat Oct 29 05:09:04 2005
@@ -111,10 +111,9 @@
 number within the expression as in the default of \"^[^0-9]*%d[^0-9]\".")
 
 (defvar mh-cmd-note 4
-  "Column where notations begin.
+  "Column for notations.
 This variable should be set with the function `mh-set-cmd-note'. This variable
-may be updated dynamically if `mh-adaptive-cmd-note-flag' is on and
-`mh-scan-format-file' is set to \"Use MH-E scan Format\".
+may be updated dynamically if `mh-adaptive-cmd-note-flag' is on.
 
 Note that columns in Emacs start with 0.")
 (make-variable-buffer-local 'mh-cmd-note)
@@ -1827,8 +1826,10 @@
         (with-mh-folder-updating (t)
           (beginning-of-line)
           (forward-char offset)
-          (let* ((change-stack-flag (and (equal offset (1+ mh-cmd-note))
-                                         (not (eq notation mh-note-seq))))
+          (let* ((change-stack-flag
+                  (and (equal offset
+                              (+ mh-cmd-note mh-scan-field-destination-offset))
+                       (not (eq notation mh-note-seq))))
                  (msg (and change-stack-flag (or msg (mh-get-msg-num nil))))
                  (stack (and msg (gethash msg mh-sequence-notation-history)))
                  (notation (or notation (char-after))))
@@ -1992,8 +1993,8 @@
                  (substring fmt end))))
       fmt))
 
-(defun mh-message-number-width (folder)
-  "Return the widest message number in this FOLDER."
+(defun mh-msg-num-width (folder)
+  "Return the width of the largest message number in this FOLDER."
   (or mh-progs (mh-find-path))
   (let ((tmp-buffer (get-buffer-create mh-temp-buffer))
         (width 0))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]