mh-e: Folders

 
 7 Organizing Your Mail with Folders
 ***********************************
 
 This chapter discusses the things you can do with folders within MH-E.
 The commands in this chapter are also found in the ‘Folder’ and
 ‘Message’ menus.
 
 ‘?’
      Display cheat sheet for the MH-E commands (‘mh-help’).
 ‘!’
      Repeat last output command (‘mh-refile-or-write-again’).
 ‘c’
      Copy range to folder (‘mh-copy-msg’).
 ‘F ?’
      Display cheat sheet for the commands of the current prefix in
      minibuffer (‘mh-prefix-help’).
 ‘F '’
      Display ticked messages (‘mh-index-ticked-messages’).
 ‘F c’
      Delete range from the ‘unseen’ sequence (‘mh-catchup’).
 ‘F k’
      Remove folder (‘mh-kill-folder’).
 ‘F l’
      List all folders (‘mh-list-folders’).
 ‘F n’
      Display unseen messages (‘mh-index-new-messages’).
 ‘F p’
      Pack folder (‘mh-pack-folder’).
 ‘F q’
      Display messages in any sequence (‘mh-index-sequenced-messages’).
 ‘F r’
      Rescan folder (‘mh-rescan-folder’).
 ‘F s’
      Search your MH mail (‘mh-search’).
 ‘F S’
      Sort folder (‘mh-sort-folder’).
 ‘F u’
      Undo all refiles and deletes in the current folder
      (‘mh-undo-folder’).
 ‘F v’
      Visit folder (‘mh-visit-folder’).
 ‘o’
      Refile (output) range into folder (‘mh-refile-msg’).
 ‘q’
      Quit the current MH-E folder (‘mh-quit’).
 ‘t’
      Toggle between MH-Folder and MH-Folder Show modes
      (‘mh-toggle-showing’).
 ‘u’
      Undo pending deletes or refiles in range (‘mh-undo’).
 ‘x’
      Process outstanding delete and refile requests
      (‘mh-execute-commands’).
 
    The ‘mh-folder’ customization group is used to tune these commands.
 
 ‘mh-new-messages-folders’
      Folders searched for the ‘unseen’ sequence (default: ‘Inbox’).
 ‘mh-ticked-messages-folders’
      Folders searched for ‘mh-tick-seq’ (default: ‘t’).
 ‘mh-large-folder’
      The number of messages that indicates a large folder (default:
      200).
 ‘mh-recenter-summary-flag’
      On means to recenter the summary window (default: ‘off’).
 ‘mh-recursive-folders-flag’
      On means that commands which operate on folders do so recursively
      (default: ‘off’).
 ‘mh-sortm-args’
      Additional arguments for ‘sortm’ (default: ‘nil’).
 
    The following hooks are available.
 
 ‘mh-after-commands-processed-hook’
      Hook run by ‘x’ after performing outstanding refile and delete
      requests (default: ‘nil’).
 ‘mh-before-commands-processed-hook’
      Hook run by ‘x’ before performing outstanding refile and delete
      requests (default: ‘nil’).
 ‘mh-before-quit-hook’
      Hook run by q before quitting MH-E (default: ‘nil’).
 ‘mh-folder-mode-hook’
      Hook run by ‘mh-folder-mode’ when visiting a new folder (default:
      ‘nil’).
 ‘mh-kill-folder-suppress-prompt-hook’
      Abnormal hook run at the beginning of ‘mh-kill-folder’ (default:
      ‘'mh-search-p’).
 ‘mh-pack-folder-hook’
      Hook run by ‘mh-pack-folder’ after renumbering the messages
      (default: ‘nil’).
 ‘mh-quit-hook’
      Hook run by q after quitting MH-E (default: ‘nil’).
 ‘mh-refile-msg-hook’
      Hook run by o after marking each message for refiling (default:
      ‘nil’).
 
    The following faces are available for customizing the appearance of
 the MH-Folder buffer.  SeeScan Line Formats.
 
 ‘mh-folder-address’
      Recipient face.
 ‘mh-folder-body’
      Body text face.
 ‘mh-folder-cur-msg-number’
      Current message number face.
 ‘mh-folder-date’
      Date face.
 ‘mh-folder-deleted’
      Deleted message face.
 ‘mh-folder-followup’
      ‘Re:’ face.
 ‘mh-folder-msg-number’
      Message number face.
 ‘mh-folder-refiled’
      Refiled message face.
 ‘mh-folder-sent-to-me-hint’
      Fontification hint face in messages sent directly to us.  The
      detection of messages sent to us is governed by the scan format
      ‘mh-scan-format-nmh’ and regular expression
      ‘mh-scan-sent-to-me-sender-regexp’.
 ‘mh-folder-scan-format’
      Sender face in messages sent directly to us.  The detection of
      messages sent to us is governed by the scan format
      ‘mh-scan-format-nmh’ and regular expression
      ‘mh-scan-sent-to-me-sender-regexp’.
 ‘mh-folder-subject’
      Subject face.
 ‘mh-folder-tick’
      Ticked message face.
 ‘mh-folder-to’
      ‘To:’ face.
 
    The hook ‘mh-folder-mode-hook’ is called when visiting a new folder
 in MH-Folder mode.  This could be used to set your own key bindings, for
 example:
 
      (defvar my-mh-init-done nil
        "Non-nil when one-time MH-E settings made.")
 
      (defun my-mh-folder-mode-hook ()
        "Hook to set key bindings in MH-Folder mode."
        (if (not my-mh-init-done)             ; only need to bind the keys once
            (progn
              (local-set-key "//" 'my-search-msg)
              (local-set-key "b" 'mh-burst-digest)    ; better use of ‘b’
              (setq my-mh-init-done t))))
 
      (add-hook 'mh-folder-mode-hook 'my-mh-folder-mode-hook)
 
      (defun my-search-msg ()
        "Search for a regexp in the current message."
        (interactive)                         ; user function
        (save-window-excursion
          (other-window 1)                    ; go to next window
          (isearch-forward-regexp)))          ; string search; hit return
                                              ;   when done
 
      Create additional key bindings via mh-folder-mode-hook
 
 
    MH-E has analogies for each of the MH ‘folder’ and ‘refile’
 commands(1).  To refile a message in another folder, use the command ‘o’
 (‘mh-refile-msg’) (mnemonic: “output”).  You are prompted for the folder
 name (SeeFolder Selection).  Note that this command can also be
 used to create folders.  If you specify a folder that does not exist,
 you will be prompted to create it.  The hook ‘mh-refile-msg-hook’ is
 called after a message is marked to be refiled.
 
    If you are refiling several messages into the same folder, you can
 use the command ‘!’ (‘mh-refile-or-write-again’) to repeat the last
 refile or write (for the description of ‘>’ (‘mh-write-msg-to-file’),
 SeeFiles and Pipes).  You can use a range in either case (for
 example, ‘C-u o 1 3 5-7 last:5 frombob <RET>’, SeeRanges).
 
    If you’ve deleted a message or refiled it, but changed your mind, you
 can cancel the action before you’ve executed it.  Use ‘u’ (‘mh-undo’) to
 undo a refile on or deletion of a single message.  You can also undo
 refiles and deletes for messages that are found in a given range (See
 Ranges).
 
    Alternatively, you can use ‘F u’ (‘mh-undo-folder’) to undo all
 refiles and deletes in the current folder.
 
    If you’ve marked messages to be deleted or refiled and you want to go
 ahead and delete or refile the messages, use ‘x’
 (‘mh-execute-commands’).  Many MH-E commands that may affect the
 numbering of the messages (such as ‘F r’ or ‘F p’) will ask if you want
 to process refiles or deletes first and then either run ‘x’ for you or
 undo the pending refiles and deletes.
 
    The command ‘x’ runs ‘mh-before-commands-processed-hook’ before the
 commands are processed and ‘mh-after-commands-processed-hook’ after the
 commands are processed.  Variables that are useful with the former hook
 include ‘mh-delete-list’ and ‘mh-refile-list’ which can be used to see
 which changes will be made to the current folder, ‘mh-current-folder’.
 Variables that are useful with the latter hook include
 ‘mh-folders-changed’, which lists which folders were affected by deletes
 and refiles.  This list will always include the current folder
 ‘mh-current-folder’.
 
    If you wish to copy a message to another folder, you can use the
 command ‘c’ (‘mh-copy-msg’) (see the ‘-link’ argument to ‘refile’(1)).
 Like the command ‘o’, this command prompts you for the name of the
 target folder and you can specify a range (SeeRanges).  Note that
 unlike the command ‘o’, the copy takes place immediately.  The original
 copy remains in the current folder.
 
    The command ‘t’ (‘mh-toggle-showing’) switches between MH-Folder mode
 and MH-Folder Show mode(2).  MH-Folder mode turns off the associated
 show buffer so that you can perform operations on the messages quickly
 without reading them.  This is an excellent way to prune out your junk
 mail or to refile a group of messages to another folder for later
 examination.
 
    When you use ‘t’ to toggle from MH-Folder Show mode to MH-Folder
 mode, the MH-Show buffer is hidden and the MH-Folder buffer is left
 alone.  Setting ‘mh-recenter-summary-flag’ to a non-‘nil’ value causes
 the toggle to display as many scan lines as possible, with the cursor at
 the middle.  The effect of ‘mh-recenter-summary-flag’ is rather useful,
 but it can be annoying on a slow network connection.
 
    When you want to read the messages that you have refiled into
 folders, use the command ‘F v’ (‘mh-visit-folder’) to visit the folder.
 You are prompted for the folder name.  The folder buffer will show just
 unseen messages if there are any; otherwise, it will show all the
 messages in the buffer as long there are fewer than ‘mh-large-folder’
 messages.  If there are more, then you are prompted for a range of
 messages to scan.  You can provide a prefix argument in order to specify
 a range of messages to show when you visit the folder (SeeRanges).
 In this case, regions are not used to specify the range and
 ‘mh-large-folder’ is ignored.  Note that this command can also be used
 to create folders.  If you specify a folder that does not exist, you
 will be prompted to create it.
 
    If you forget where you’ve refiled your messages, you can find them
 using ‘F s’ (‘mh-search’).  SeeSearching.
 
    If you use a program such as ‘procmail’ to file your incoming mail
 automatically, you can display new, unseen, messages using the command
 ‘F n’ (‘mh-index-new-messages’).  All messages in the ‘unseen’ sequence
 from the folders in ‘mh-new-messages-folders’ are listed.  However, this
 list of folders can be overridden with a prefix argument: with a prefix
 argument, enter a space-separated list of folders, or nothing to search
 all folders.
 
    If you have ticked messages (SeeSequences), you can display them
 using the command ‘F '’ (‘mh-index-ticked-messages’).  All messages in
 the ‘tick’ sequence from the folders in ‘mh-ticked-messages-folders’ are
 listed.  With a prefix argument, enter a space-separated list of
 folders, or nothing to search all folders.
 
    You can display messages in any sequence with the command ‘F q’
 (‘mh-index-sequenced-messages’).  All messages from the folders in
 ‘mh-new-messages-folders’ in the sequence you provide are listed.  With
 a prefix argument, enter a space-separated list of folders at the
 prompt, or nothing to search all folders.
 
    Set the options ‘mh-new-messages-folders’ and
 ‘mh-ticked-messages-folders’ to ‘Inbox’ to search the ‘+inbox’ folder or
 ‘All’ to search all of the top level folders.  Otherwise, list the
 folders that should be searched with the ‘Choose Folders’ menu item.
 See ‘mh-recursive-folders-flag’.
 
    Other commands you can perform on folders include: ‘F l’
 (‘mh-list-folders’), to place a listing of all the folders in your mail
 directory in a buffer called ‘*MH-E Folders*’ (SeeMiscellaneous);
 ‘F k’ (‘mh-kill-folder’), to remove a folder; ‘F S’ (‘mh-sort-folder’),
 to sort the messages by date (see ‘sortm’(1) to see how to sort by other
 criteria); ‘F p’ (‘mh-pack-folder’), to pack a folder, removing gaps
 from the numbering sequence; and ‘F r’ (‘mh-rescan-folder’), to rescan
 the folder, which is useful to grab all messages in your ‘+inbox’ after
 processing your new mail for the first time.  If you don’t want to
 rescan the entire folder, the commands ‘F r’ or ‘F p’ will accept a
 range (SeeRanges).
 
    The command ‘F p’ runs ‘mh-pack-folder-hook’ after renumbering the
 messages.  A variable that is useful with this hook is
 ‘mh-current-folder’.
 
    By default, operations on folders work only one level at a time.  Set
 ‘mh-recursive-folders-flag’ to non-‘nil’ to operate on all folders.
 This mostly means that you’ll be able to see all your folders when you
 press <TAB> when prompted for a folder name.
 
    The hook ‘mh-kill-folder-suppress-prompt-functions’ is an abnormal
 hook run at the beginning of the command ‘k’.  The hook functions are
 called with no arguments and should return a non-‘nil’ value to suppress
 the normal prompt when you remove a folder.  This is useful for folders
 that are easily regenerated.  The default value of ‘mh-search-p’
 suppresses the prompt on folders generated by searching.
 
 
 
      Use this hook with care.  If there is a bug in your hook which
      returns ‘t’ on ‘+inbox’ and you press ‘k’ by accident in the
      ‘+inbox’ folder, you will not be happy.
 
    The option ‘mh-sortm-args’ holds extra arguments to pass on to the
 command ‘sortm’(3) when a prefix argument is used with ‘F S’.  Normally
 default arguments to ‘sortm’ are specified in the MH profile.  This
 option may be used to provide an alternate view.  For example,
 ‘'(\"-nolimit\" \"-textfield\" \"subject\")’ is a useful setting.
 
    When you want to quit using MH-E and go back to editing, you can use
 the ‘q’ (‘mh-quit’) command.  This buries the buffers of the current
 MH-E folder and restores the buffers that were present when you first
 ran ‘M-x mh-rmail’.  It also removes any MH-E working buffers whose name
 begins with ‘ *mh-’ or ‘*MH-E ’ (SeeMiscellaneous).  You can later
 restore your MH-E session by selecting the ‘+inbox’ buffer or by running
 ‘M-x mh-rmail’ again.
 
    The two hooks ‘mh-before-quit-hook’ and ‘mh-quit-hook’ are called by
 ‘q’.  The former one is called before the quit occurs, so you might use
 it to perform any MH-E operations; you could perform some query and
 abort the quit or call ‘mh-execute-commands’, for example.  The latter
 is not run in an MH-E context, so you might use it to modify the window
 setup.  If you find that ‘q’ buries a lot of buffers that you would
 rather remove, you can use both ‘mh-before-quit-hook’ and ‘mh-quit-hook’
 to accomplish that.
 
      (defvar my-mh-folder-buffer-to-delete nil
        "Folder buffer that is being quit.")
 
      (defun my-mh-before-quit-hook ()
        "Save folder buffer that is to be deleted."
        (setq my-mh-folder-buffer-to-delete (current-buffer)))
 
      (defun my-mh-quit-hook ()
        "Kill folder buffer rather than just bury it."
        (set-buffer my-mh-folder-buffer-to-delete)
        (if (get-buffer mh-show-buffer)
            (kill-buffer mh-show-buffer))
        (kill-buffer (current-buffer)))
 
      Kill MH-Folder buffer instead of burying it
 
    You can use dired to manipulate the folders themselves.  For example,
 I renamed my ‘+out’ folder to the more common ‘+outbox’ by running dired
 on my mail directory (‘M-x dired RET ~/Mail RET’), moving my cursor to
 ‘out’ and using the command ‘R’ (‘dired-do-rename’).
 
    ---------- Footnotes ----------
 
    (1) See the sections Your Current Folder: folder
 (http://rand-mh.sourceforge.net/book/mh/fol.html#Youfol) and Moving and
 Linking Messages: refile
 (http://rand-mh.sourceforge.net/book/mh/fol.html#Movref) in the MH book.
 
    (2) For you Emacs wizards, this is implemented as an Emacs minor
 mode.
 
    (3) See the section Sorting Messages: sortm
 (http://rand-mh.sourceforge.net/book/mh/sorsor.html) in the MH book.