comparison lisp/mh-e/mh-alias.el @ 68465:37d03b3298bf

The Great Cleanup Remove circular dependencies. mh-e.el now includes few require statements and stands alone. Other files should need to require mh-e.el, which requires mh-loaddefs.el, plus variable-only files such as mh-scan.el. Remove unneeded require statements. Remove unneeded load statements, or replace them with non-fatal require statements. Break out components into their own files that were often spread between many files. As a result, many functions that are now only used within a single file no longer need to be autoloaded. Rearrange and provide consistent headings. Untabify. * mh-acros.el: Update commentary to reflect current usage. Add autoload cookies to all macros. (mh-require-cl): Merge docstring and comment. (mh-do-in-xemacs): Fix typo in docstring. (assoc-string): Move to new file mh-compat.el. (with-mh-folder-updating, mh-in-show-buffer) (mh-do-at-event-location, mh-seq-msgs): Move here from mh-utils.el. (mh-iterate-on-messages-in-region, mh-iterate-on-range): Move here from mh-seq.el. * mh-alias.el (mh-address-mail-regexp) (mh-goto-address-find-address-at-point): Move here from mh-utils.el. (mh-folder-line-matches-show-buffer-p): Move here from mh-e.el. * mh-buffers.el: Update descriptive text. * mh-comp.el (mh-note-repl, mh-note-forw, mh-note-dist): Move to new file mh-scan.el. (mh-yank-hooks, mh-to-field-choices, mh-position-on-field) (mh-letter-menu, mh-letter-mode-help-messages) (mh-letter-buttons-init-flag, mh-letter-mode) (mh-font-lock-field-data, mh-letter-header-end) (mh-auto-fill-for-letter, mh-to-field, mh-to-fcc) (mh-file-is-vcard-p, mh-insert-signature, mh-check-whom) (mh-insert-letter, mh-extract-from-attribution, mh-yank-cur-msg) (mh-filter-out-non-text, mh-insert-prefix-string) (mh-current-fill-prefix, mh-open-line, mh-complete-word) (mh-folder-expand-at-point, mh-letter-complete-function-alist) (mh-letter-complete, mh-letter-complete-or-space) (mh-letter-confirm-address, mh-letter-header-field-at-point) (mh-letter-next-header-field-or-indent) (mh-letter-next-header-field, mh-letter-previous-header-field) (mh-letter-skipped-header-field-p) (mh-letter-skip-leading-whitespace-in-header-field) (mh-hidden-header-keymap) (mh-letter-toggle-header-field-display-button) (mh-letter-toggle-header-field-display) (mh-letter-truncate-header-field, mh-letter-mode-map): Move to new file mh-letter.el. (mh-letter-mode-map, mh-sent-from-folder, mh-send-args) (mh-pgp-support-flag, mh-x-mailer-string) (mh-letter-header-field-regexp): Move to mh-e.el. (mh-goto-header-field, mh-goto-header-end) (mh-extract-from-header-value, mh-beginning-of-word): Move to mh-utils.el. (mh-insert-header-separator): Move to mh-comp.el. (mh-display-completion-list-compat): Move to new file mh-compat.el. * mh-compat.el: New file. (assoc-string): Move here from mh-acros.el. (mh-display-completion-list): Move here from mh-comp.el. * mh-customize.el: Move content into mh-e.el and remove. * mh-e.el (mh-folder-mode-map, mh-folder-seq-tool-bar-map) (mh-folder-tool-bar-map, mh-inc-spool-map, mh-letter-mode-map) (mh-letter-tool-bar-map, mh-search-mode-map, mh-show-mode-map) (mh-show-seq-tool-bar-map, mh-show-tool-bar-map): All maps now declared here so that they can be used in docstrings. (mh-sent-from-folder, mh-sent-from-msg) (mh-letter-header-field-regexp, mh-pgp-support-flag) (mh-x-mailer-string): Move here from mh-comp.el. (mh-folder-line-matches-show-buffer-p): Move to mh-alias.el. (mh-thread-scan-line-map, mh-thread-scan-line-map-stack): Move here from mh-seq.el. (mh-draft-folder, mh-inbox, mh-user-path, mh-current-folder) (mh-previous-window-config, mh-seen-list, mh-seq-list) (mh-show-buffer, mh-showing-mode, mh-globals-hash) (mh-show-folder-buffer, mh-mail-header-separator) (mh-unseen-seq, mh-previous-seq, mh-page-to-next-msg-flag) (mh-signature-separator, mh-signature-separator-regexp) (mh-list-to-string, mh-list-to-string-1): Move here from mh-utils.el. (mh-index-max-cmdline-args, mh-xargs, mh-quote-for-shell) (mh-exec-cmd, mh-exec-cmd-error, mh-exec-cmd-daemon) (mh-exec-cmd-env-daemon, mh-process-daemon, mh-exec-cmd-quiet) (mh-exec-cmd-output) (mh-exchange-point-and-mark-preserving-active-mark) (mh-exec-lib-cmd-output, mh-handle-process-error): Move here from deprecated file mh-exec.el. (mh-path): Move here from deprecated file mh-customize.el. (mh-sys-path, mh-variants, mh-variant-in-use, mh-progs, mh-lib) (mh-flists-present-flag, mh-variants, mh-variant-mh-info) (mh-variant-mu-mh-info, mh-variant-nmh-info, mh-file-command-p) (mh-variant-set-variant, mh-variant-p, mh-profile-component) (mh-profile-component-value, mh-defface-compat): Move here from deprecated file mh-init.el. (mh-goto-next-button, mh-folder-mime-action) (mh-folder-toggle-mime-part, mh-folder-inline-mime-part) (mh-folder-save-mime-part, mh-toggle-mime-buttons): Move to to mh-mime.el. (mh-scan-format-mh, mh-scan-format-nmh, mh-note-deleted) (mh-note-refiled, mh-note-cur, mh-scan-good-msg-regexp) (mh-scan-deleted-msg-regexp, mh-scan-refiled-msg-regexp) (mh-scan-valid-regexp, mh-scan-cur-msg-number-regexp) (mh-scan-date-regexp, mh-scan-rcpt-regexp, mh-scan-body-regexp) (mh-scan-subject-regexp, mh-scan-sent-to-me-sender-regexp) (mh-scan-cmd-note-width, mh-scan-destination-width) (mh-scan-date-width, mh-scan-date-flag-width) (mh-scan-from-mbox-width, mh-scan-from-mbox-sep-width) (mh-scan-field-destination-offset) (mh-scan-field-from-start-offset, mh-scan-field-from-end-offset) (mh-scan-field-subject-start-offset, mh-scan-format) (mh-msg-num-width-to-column, mh-set-cmd-note): Move to new file mh-scan.el. (mh-partial-folder-mode-line-annotation) (mh-folder-font-lock-keywords, mh-folder-font-lock-subject) (mh-generate-sequence-font-lock, mh-last-destination) (mh-last-destination-write, mh-first-msg-num, mh-last-msg-num) (mh-rmail, mh-nmail, mh-delete-msg, mh-delete-msg-no-motion) (mh-execute-commands, mh-first-msg, mh-header-display) (mh-inc-folder, mh-last-msg, mh-next-undeleted-msg) (mh-folder-from-address, mh-prompt-for-refile-folder) (mh-refile-msg, mh-refile-or-write-again, mh-quit, mh-page-msg) (mh-previous-page, mh-previous-undeleted-msg) (mh-previous-unread-msg, mh-next-button, mh-prev-button) (mh-reset-threads-and-narrowing, mh-rescan-folder) (mh-write-msg-to-file, mh-toggle-showing, mh-undo) (mh-visit-folder, mh-update-sequences, mh-delete-a-msg) (mh-refile-a-msg, mh-next-msg, mh-next-unread-msg) (mh-set-scan-mode, mh-undo-msg, mh-make-folder) (mh-folder-sequence-menu, mh-folder-message-menu) (mh-folder-folder-menu, mh-remove-xemacs-horizontal-scrollbar) (mh-write-file-functions-compat, mh-folder-mode) (mh-restore-desktop-buffer, mh-scan-folder) (mh-regenerate-headers, mh-generate-new-cmd-note) (mh-get-new-mail, mh-make-folder-mode-line, mh-goto-cur-msg) (mh-process-or-undo-commands, mh-process-commands) (mh-update-unseen, mh-delete-scan-msgs) (mh-outstanding-commands-p): Move to new file mh-folder.el. (mh-mapc, mh-colors-available-p, mh-colors-in-use-p) (mh-make-local-vars, mh-coalesce-msg-list, mh-greaterp) (mh-lessp): Move to mh-utils.el. (mh-parse-flist-output-line, mh-folder-size-folder) (mh-folder-size-flist, mh-folder-size, mh-add-sequence-notation) (mh-remove-sequence-notation, mh-remove-cur-notation) (mh-remove-all-notation, mh-delete-seq-locally) (mh-read-folder-sequences, mh-read-msg-list) (mh-notate-user-sequences, mh-internal-seqs, mh-internal-seq) (mh-valid-seq-p, mh-delete-msg-from-seq, mh-catchup) (mh-delete-a-msg-from-seq, mh-undefine-sequence) (mh-define-sequence, mh-seq-containing-msg): Move to mh-seq.el. (mh-xemacs-flag) (mh-customize, mh-e, mh-alias, mh-folder, mh-folder-selection) (mh-identity, mh-inc, mh-junk, mh-letter, mh-ranges) (mh-scan-line-formats, mh-search, mh-sending-mail, mh-sequences) (mh-show, mh-speedbar, mh-thread, mh-tool-bar, mh-hooks) (mh-faces, mh-alias-completion-ignore-case-flag) (mh-alias-expand-aliases-flag, mh-alias-flash-on-comma) (mh-alias-insert-file, mh-alias-insertion-location) (mh-alias-local-users, mh-alias-local-users-prefix) (mh-alias-passwd-gecos-comma-separator-flag) (mh-new-messages-folders, mh-ticked-messages-folders) (mh-large-folder, mh-recenter-summary-flag) (mh-recursive-folders-flag, mh-sortm-args) (mh-default-folder-for-message-function, mh-default-folder-list) (mh-default-folder-must-exist-flag, mh-default-folder-prefix) (mh-identity-list, mh-auto-fields-list) (mh-auto-fields-prompt-flag, mh-identity-default) (mh-identity-handlers, mh-inc-prog, mh-inc-spool-list) (mh-junk-choice, mh-junk-function-alist, mh-junk-choose) (mh-junk-background, mh-junk-disposition, mh-junk-program) (mh-compose-insertion, mh-compose-skipped-header-fields) (mh-compose-space-does-completion-flag) (mh-delete-yanked-msg-window-flag) (mh-extract-from-attribution-verb, mh-ins-buf-prefix) (mh-letter-complete-function, mh-letter-fill-column) (mh-mml-method-default, mh-signature-file-name) (mh-signature-separator-flag, mh-x-face-file, mh-yank-behavior) (mh-interpret-number-as-range-flag, mh-adaptive-cmd-note-flag) (mh-scan-format-file-check, mh-scan-format-file) (mh-adaptive-cmd-note-flag-check, mh-scan-prog) (mh-search-program, mh-compose-forward-as-mime-flag) (mh-compose-letter-function, mh-compose-prompt-flag) (mh-forward-subject-format, mh-insert-x-mailer-flag) (mh-redist-full-contents-flag, mh-reply-default-reply-to) (mh-reply-show-message-flag, mh-refile-preserves-sequences-flag) (mh-tick-seq, mh-update-sequences-after-mh-show-flag) (mh-bury-show-buffer-flag, mh-clean-message-header-flag) (mh-decode-mime-flag, mh-display-buttons-for-alternatives-flag) (mh-display-buttons-for-inline-parts-flag) (mh-do-not-confirm-flag, mh-fetch-x-image-url) (mh-graphical-smileys-flag, mh-graphical-emphasis-flag) (mh-highlight-citation-style) (mh-invisible-header-fields-internal) (mh-delay-invisible-header-generation-flag) (mh-invisible-header-fields, mh-invisible-header-fields-default) (mh-invisible-header-fields-compiled, mh-invisible-headers) (mh-lpr-command-format, mh-max-inline-image-height) (mh-max-inline-image-width, mh-mhl-format-file) (mh-mime-save-parts-default-directory, mh-print-background-flag) (mh-show-maximum-size, mh-show-use-goto-addr-flag) (mh-show-use-xface-flag, mh-store-default-directory) (mh-summary-height, mh-speed-update-interval) (mh-show-threads-flag, mh-tool-bar-search-function) (mh-after-commands-processed-hook, mh-alias-reloaded-hook) (mh-before-commands-processed-hook, mh-before-quit-hook) (mh-before-send-letter-hook, mh-delete-msg-hook) (mh-find-path-hook, mh-folder-mode-hook, mh-forward-hook) (mh-inc-folder-hook, mh-insert-signature-hook) (mh-kill-folder-suppress-prompt-hooks, mh-letter-mode-hook) (mh-mh-to-mime-hook, mh-search-mode-hook, mh-quit-hook) (mh-refile-msg-hook, mh-show-hook, mh-show-mode-hook) (mh-unseen-updated-hook, mh-min-colors-defined-flag) (mh-folder-address, mh-folder-body) (mh-folder-cur-msg-number, mh-folder-date, mh-folder-deleted) (mh-folder-followup, mh-folder-msg-number, mh-folder-refiled) (mh-folder-sent-to-me-hint, mh-folder-sent-to-me-sender) (mh-folder-subject, mh-folder-tick, mh-folder-to) (mh-search-folder, mh-letter-header-field, mh-show-cc) (mh-show-date, mh-show-from, mh-show-header, mh-show-pgg-bad) (mh-show-pgg-good, mh-show-pgg-unknown, mh-show-signature) (mh-show-subject, mh-show-to, mh-show-xface, mh-speedbar-folder) (mh-speedbar-folder-with-unseen-messages) (mh-speedbar-selected-folder) (mh-speedbar-selected-folder-with-unseen-messages): Move here from deprecated file mh-customize.el. * mh-exec.el: Move content into mh-e.el and remove. * mh-folder.el: New file. Contains mh-folder-mode from mh-e.el * mh-funcs.el (mh-note-copied, mh-note-printed): Move to new file mh-scan.el. (mh-ephem-message, mh-help, mh-prefix-help): Move to mh-utils.el. * mh-gnus.el (mm-uu-dissect-text-parts): Add. (mh-mail-abbrev-make-syntax-table): Move to mh-utils.el and rename to mail-abbrev-make-syntax-table. * mh-identity.el (mh-identity-menu): New variable for existing menu. (mh-identity-make-menu-no-autoload): New alias for mh-identity-make-menu which can be called from mh-e.el. (mh-identity-list-set): Move to mh-e.el. (mh-identity-add-menu): New function (mh-insert-identity): Add optional argument maybe-insert so that local variable mh-identity-local does not have to be visible. (mh-identity-handler-default): * mh-inc.el (mh-inc-spool-map): Move declaration to mh-e.el (with rest of keymaps). Update key binding for ? to call mh-help with help messages in new argument. (mh-inc-spool-make-no-autoload): New alias for mh-inc-spool-make which can be called from mh-e.el. (mh-inc-spool-list-set): Simplify update of mh-inc-spool-map-help. * mh-init.el: Move content into mh-e.el and remove. * mh-junk.el: Update requires, untabify, and add mh-autoload cookies. * mh-letter.el: New file. Contains mh-letter-mode from mh-comp.el. * mh-limit.el: New file. Contains display limit commands from mh-mime.el. * mh-mime.el: Rearrange for consistency with other files. (mh-buffer-data, mh-mm-inline-media-tests): Move here from mh-utils.el. (mh-folder-inline-mime-part, mh-folder-save-mime-part) (mh-folder-toggle-mime-part, mh-toggle-mime-buttons) (mh-goto-next-button): Move here from mh-e.el. * mh-print.el: Rearrange for consistency with other files. * mh-scan.el: New file. Contains scan line constants and utilities from XXX, mh-funcs, mh-utils.el. * mh-search.el: Rearrange for consistency with other files. (mh-search-mode-map): Drop C-c C-f {dr} bindings since these fields which don't exist in the saved header. Replace C-c C-f f with C-c C-f m per mail-mode consistency. (mh-search-mode): Use mh-set-help instead of setting mh-help-messages. * mh-seq.el (mh-thread-message, mh-thread-container) (mh-thread-id-hash, mh-thread-subject-hash, mh-thread-id-table) (mh-thread-id-index-map, mh-thread-index-id-map) (mh-thread-scan-line-map, mh-thread-scan-line-map-stack) (mh-thread-subject-container-hash, mh-thread-duplicates) (mh-thread-history, mh-thread-body-width) (mh-thread-find-msg-subject mh-thread-initialize-hash) (mh-thread-initialize, mh-thread-id-container) (mh-thread-remove-parent-link, mh-thread-add-link) (mh-thread-ancestor-p, mh-thread-get-message-container) (mh-thread-get-message, mh-thread-canonicalize-id) (mh-thread-prune-subject, mh-thread-container-subject) (mh-thread-rewind-pruning, mh-thread-prune-containers) (mh-thread-sort-containers, mh-thread-group-by-subject) (mh-thread-process-in-reply-to, mh-thread-set-tables) (mh-thread-update-id-index-maps, mh-thread-generate) (mh-thread-inc, mh-thread-generate-scan-lines) (mh-thread-parse-scan-line, mh-thread-update-scan-line-map) (mh-thread-add-spaces, mh-thread-print-scan-lines) (mh-thread-folder, mh-toggle-threads, mh-thread-forget-message) (mh-thread-current-indentation-level, mh-thread-next-sibling) (mh-thread-previous-sibling, mh-thread-immediate-ancestor) (mh-thread-ancestor, mh-thread-find-children) (mh-message-id-regexp, mh-thread-delete, mh-thread-refile): Move to new file mh-thread.el. (mh-subject-to-sequence, mh-subject-to-sequence-unthreaded) (mh-subject-to-sequence-threaded, mh-edit-pick-expr) (mh-pick-args-list, mh-narrow-to-subject, mh-narrow-to-from) (mh-narrow-to-cc, mh-narrow-to-to, mh-narrow-to-header-field) (mh-current-message-header-field, mh-narrow-to-range) (mh-delete-subject, mh-delete-subject-or-thread): Move to new file mh-limit.el. (mh-iterate-on-messages-in-region, mh-iterate-on-range): Move to mh-acros.el. (mh-internal-seqs, mh-catchup, mh-delete-msg-from-seq) (mh-internal-seq, mh-valid-seq-p, mh-seq-containing-msg) (mh-define-sequence, mh-undefine-sequence) (mh-delete-a-msg-from-seq, mh-delete-seq-locally) (mh-folder-size, mh-folder-size-flist, mh-folder-size-folder) (mh-parse-flist-output-line, mh-read-folder-sequences) (mh-read-msg-list, mh-notate-user-sequences) (mh-remove-cur-notation, mh-add-sequence-notation) (mh-remove-sequence-notation, mh-remove-all-notation): Move here from mh-e.el. (mh-make-seq, mh-seq-name, mh-find-seq, mh-seq-to-msgs) (mh-add-msgs-to-seq, mh-notate): Move here from mh-utils.el. * mh-show.el: New file. Contains mh-show-mode from mh-utils.el. * mh-speed.el: Rearrange for consistency with other files. * mh-thread.el: New file. Contains threading code from mh-seq.el. * mh-tool-bar.el: New file. Contains tool bar creation code from deprecated file mh-customize.el. * mh-utils.el (recursive-load-depth-limit): Remove setting. No longer needed. (mh-scan-msg-number-regexp, mh-scan-msg-overflow-regexp) (mh-scan-msg-format-regexp, mh-scan-msg-format-string) (mh-scan-msg-search-regexp, mh-cmd-note, mh-note-seq) (mh-update-scan-format, mh-msg-num-width): Move to new file mh-scan.el. (mh-show-buffer-mode-line-buffer-id, mh-letter-header-font-lock) (mh-header-field-font-lock, mh-header-to-font-lock) (mh-header-cc-font-lock, mh-header-subject-font-lock) (mh-show-font-lock-keywords) (mh-show-font-lock-keywords-with-cite) (mh-show-font-lock-fontify-region) (mh-gnus-article-highlight-citation, mh-showing-with-headers) (mh-start-of-uncleaned-message, mh-invalidate-show-buffer) (mh-unvisit-file, mh-defun-show-buffer, mh-show-mode-map) (mh-show-sequence-menu, mh-show-message-menu) (mh-show-folder-menu, mh-show-mode, mh-show-addr) (mh-maybe-show, mh-show, mh-show-msg, mh-show-unquote-From) (mh-msg-folder, mh-display-msg, mh-clean-msg-header): Move to new file mh-show.el. (mh-mail-header-separator, mh-signature-separator-regexp) (mh-signature-separator, mh-globals-hash, mh-user-path) (mh-draft-folder, mh-unseen-seq, mh-previous-seq, mh-inbox) (mh-previous-window-config, mh-current-folder mh-show-buffer) (mh-showing-mode, mh-show-mode-map, mh-show-folder-buffer) (mh-showing-mode, mh-seq-list, mh-seen-list, mh-summary-height) (mh-list-to-string, mh-list-to-string-1): Move to mh-e.el. (mh-buffer-data, mh-mm-inline-media-tests): Move to mh-mime.el. (mh-address-mail-regexp, mh-goto-address-find-address-at-point): Move to mh-alias.el. (mh-letter-font-lock-keywords): Move to new file mh-letter.el. (mh-folder-filename, mh-msg-count, mh-recenter, mh-msg-filename) (mh-show-mouse, mh-modify, mh-goto-msg, mh-set-folder-modified-p): Move to new file mh-folder.el. (with-mh-folder-updating, mh-in-show-buffer) (mh-do-at-event-location, mh-seq-msgs): Moved to mh-acros.el. (mh-make-seq, mh-seq-name, mh-notate, mh-find-seq) (mh-seq-to-msgs, mh-add-msgs-to-seq, mh-canonicalize-sequence): Moved to mh-seq.el. (mh-show-xface-function, mh-uncompface-executable, mh-face-to-png) (mh-uncompface, mh-icontopbm, mh-face-foreground-compat) (mh-face-background-compat, mh-face-display-function) (mh-show-xface, mh-picon-directory-list) (mh-picon-existing-directory-list) (mh-picon-cache, mh-picon-image-types) (mh-picon-set-directory-list, mh-picon-get-image) (mh-picon-file-contents, mh-picon-generate-path) (mh-x-image-cache-directory, mh-x-image-scaling-function) (mh-wget-executable, mh-wget-choice, mh-wget-option) (mh-x-image-temp-file, mh-x-image-url, mh-x-image-marker) (mh-x-image-url-cache-file, mh-x-image-scale-with-pnm) (mh-x-image-scale-with-convert) (url-unreserved-chars, url-hexify-string) (mh-x-image-url-cache-canonicalize) (mh-x-image-set-download-state, mh-x-image-get-download-state) (mh-x-image-url-fetch-image, mh-x-image-display) (mh-x-image-scale-and-display, mh-x-image-url-sane-p) (mh-x-image-url-display): Move to new file mh-xface.el. (mh-logo-display): Call mh-image-load-path. (mh-find-path-run, mh-find-path): Move here from deprecated file mh-init.el. (mh-help-messages): Now an alist of modes to an alist of messages. (mh-set-help): New function used to set mh-help-messages (mh-help): Adjust for new format of mh-help-messages. Add help-messages argument. (mh-prefix-help): Refactor to use mh-help. (mh-coalesce-msg-list, mh-greaterp, mh-lessp): Move here from mh-e.el. (mh-clear-sub-folders-cache): New function added to avoid exposing mh-sub-folders-cache variable. * mh-xface.el: New file. Contains X-Face and Face header field display routines from mh-utils.el.
author Bill Wohler <wohler@newt.com>
date Sun, 29 Jan 2006 19:34:57 +0000
parents a08b47775f9b
children 6a7173abcf59
comparison
equal deleted inserted replaced
68464:79464a6167f5 68465:37d03b3298bf
1 ;;; mh-alias.el --- MH-E mail alias completion and expansion 1 ;;; mh-alias.el --- MH-E mail alias completion and expansion
2 ;; 2
3 ;; Copyright (C) 1994, 1995, 1996, 1997, 3 ;; Copyright (C) 1994, 1995, 1996, 1997,
4 ;; 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 4 ;; 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
5 5
6 ;; Author: Peter S. Galbraith <psg@debian.org> 6 ;; Author: Peter S. Galbraith <psg@debian.org>
7 ;; Maintainer: Bill Wohler <wohler@newt.com> 7 ;; Maintainer: Bill Wohler <wohler@newt.com>
29 29
30 ;;; Change Log: 30 ;;; Change Log:
31 31
32 ;;; Code: 32 ;;; Code:
33 33
34 ;;(message "> mh-alias") 34 (require 'mh-e)
35 (eval-when-compile (require 'mh-acros)) 35
36 (mh-require-cl) 36 (mh-require-cl)
37 (require 'mh-buffers)
38 (require 'mh-e)
39 ;;(message "< mh-alias")
40 (load "cmr" t t) ; Non-fatal dependency for
41 ; completing-read-multiple.
42 (eval-when-compile (defvar mail-abbrev-syntax-table))
43
44
45
46 ;;; Autoloads
47
48 (eval-when (compile load eval)
49 (ignore-errors
50 (require 'mailabbrev)
51 (require 'multi-prompt)))
52 37
53 (defvar mh-alias-alist 'not-read 38 (defvar mh-alias-alist 'not-read
54 "Alist of MH aliases.") 39 "Alist of MH aliases.")
55 (defvar mh-alias-blind-alist nil 40 (defvar mh-alias-blind-alist nil
56 "Alist of MH aliases that are blind lists.") 41 "Alist of MH aliases that are blind lists.")
59 (defvar mh-alias-tstamp nil 44 (defvar mh-alias-tstamp nil
60 "Time aliases were last loaded.") 45 "Time aliases were last loaded.")
61 (defvar mh-alias-read-address-map nil) 46 (defvar mh-alias-read-address-map nil)
62 (unless mh-alias-read-address-map 47 (unless mh-alias-read-address-map
63 (setq mh-alias-read-address-map 48 (setq mh-alias-read-address-map
64 (copy-keymap minibuffer-local-completion-map)) 49 (copy-keymap minibuffer-local-completion-map))
65 (define-key mh-alias-read-address-map 50 (define-key mh-alias-read-address-map
66 "," 'mh-alias-minibuffer-confirm-address) 51 "," 'mh-alias-minibuffer-confirm-address)
67 (define-key mh-alias-read-address-map " " 'self-insert-command)) 52 (define-key mh-alias-read-address-map " " 'self-insert-command))
68 53
69 (defvar mh-alias-system-aliases 54 (defvar mh-alias-system-aliases
74 If these files are modified, they are automatically reread. This list 59 If these files are modified, they are automatically reread. This list
75 need include only system aliases and the passwd file, since personal 60 need include only system aliases and the passwd file, since personal
76 alias files listed in your \"Aliasfile:\" MH profile component are 61 alias files listed in your \"Aliasfile:\" MH profile component are
77 automatically included. You can update the alias list manually using 62 automatically included. You can update the alias list manually using
78 \\[mh-alias-reload].") 63 \\[mh-alias-reload].")
64
65 ;; Copy of `goto-address-mail-regexp'.
66 (defvar mh-address-mail-regexp
67 "[-a-zA-Z0-9._]+@\\([-a-zA-z0-9_]+\\.\\)+[a-zA-Z0-9]+"
68 "A regular expression probably matching an e-mail address.")
79 69
80 70
81 71
82 ;;; Alias Loading 72 ;;; Alias Loading
83 73
183 (setq passwd-alist (cons (list alias-name alias-translation) 173 (setq passwd-alist (cons (list alias-name alias-translation)
184 passwd-alist))))))) 174 passwd-alist)))))))
185 (forward-line 1))) 175 (forward-line 1)))
186 passwd-alist)) 176 passwd-alist))
187 177
188 ;;;###mh-autoload
189 (defun mh-alias-reload () 178 (defun mh-alias-reload ()
190 "Reload MH aliases. 179 "Reload MH aliases.
191 180
192 Since aliases are updated frequently, MH-E reloads aliases 181 Since aliases are updated frequently, MH-E reloads aliases
193 automatically whenever an alias lookup occurs if an alias source has 182 automatically whenever an alias lookup occurs if an alias source has
267 ((assoc-string alias mh-alias-passwd-alist t) 256 ((assoc-string alias mh-alias-passwd-alist t)
268 (cadr (assoc-string alias mh-alias-passwd-alist t))) 257 (cadr (assoc-string alias mh-alias-passwd-alist t)))
269 (t 258 (t
270 (mh-alias-ali alias)))) 259 (mh-alias-ali alias))))
271 260
261 (require 'crm nil t) ; completing-read-multiple
262 (require 'multi-prompt nil t)
263
272 ;;;###mh-autoload 264 ;;;###mh-autoload
273 (defun mh-read-address (prompt) 265 (defun mh-read-address (prompt)
274 "Read an address from the minibuffer with PROMPT." 266 "Read an address from the minibuffer with PROMPT."
275 (mh-alias-reload-maybe) 267 (mh-alias-reload-maybe)
276 (if (not mh-alias-alist) ; If still no aliases, just prompt 268 (if (not mh-alias-alist) ; If still no aliases, just prompt
277 (read-string prompt) 269 (read-string prompt)
278 (let* ((minibuffer-local-completion-map mh-alias-read-address-map) 270 (let* ((minibuffer-local-completion-map mh-alias-read-address-map)
279 (completion-ignore-case mh-alias-completion-ignore-case-flag) 271 (completion-ignore-case mh-alias-completion-ignore-case-flag)
280 (the-answer 272 (the-answer
281 (cond ((fboundp 'completing-read-multiple) 273 (cond ((fboundp 'completing-read-multiple)
306 (if (and (equal mh-alias-flash-on-comma 1) 298 (if (and (equal mh-alias-flash-on-comma 1)
307 (not (string-match " " the-name))) 299 (not (string-match " " the-name)))
308 (message "No alias for %s" the-name)))))) 300 (message "No alias for %s" the-name))))))
309 (self-insert-command 1)) 301 (self-insert-command 1))
310 302
311 (mh-do-in-xemacs (defvar mail-abbrevs))
312
313 ;;;###mh-autoload 303 ;;;###mh-autoload
314 (defun mh-alias-letter-expand-alias () 304 (defun mh-alias-letter-expand-alias ()
315 "Expand mail alias before point." 305 "Expand mail alias before point."
316 (mh-alias-reload-maybe) 306 (mh-alias-reload-maybe)
317 (let* ((end (point)) 307 (let* ((end (point))
321 (when mh-alias-expand-aliases-flag 311 (when mh-alias-expand-aliases-flag
322 (let* ((end (point)) 312 (let* ((end (point))
323 (expansion (mh-alias-expand (buffer-substring begin end)))) 313 (expansion (mh-alias-expand (buffer-substring begin end))))
324 (delete-region begin end) 314 (delete-region begin end)
325 (insert expansion))))) 315 (insert expansion)))))
316
326 317
327 318
328 ;;; Adding addresses to alias file. 319 ;;; Alias File Updating
329 320
330 (defun mh-alias-suggest-alias (string &optional no-comma-swap) 321 (defun mh-alias-suggest-alias (string &optional no-comma-swap)
331 "Suggest an alias for STRING. 322 "Suggest an alias for STRING.
332 Don't reverse the order of strings separated by a comma if 323 Don't reverse the order of strings separated by a comma if
333 NO-COMMA-SWAP is non-nil." 324 NO-COMMA-SWAP is non-nil."
449 file "/etc/passwd"))) 440 file "/etc/passwd")))
450 file)) 441 file))
451 (mh-alias-filenames t))))) 442 (mh-alias-filenames t)))))
452 (cond 443 (cond
453 ((not autolist) 444 ((not autolist)
454 (error "No writable alias file. 445 (error "No writable alias file;
455 Set `mh-alias-insert-file' or the \"Aliasfile:\" profile component")) 446 set `mh-alias-insert-file' or the \"Aliasfile:\" profile component"))
456 ((not (elt autolist 1)) ; Only one entry, use it 447 ((not (elt autolist 1)) ; Only one entry, use it
457 (car autolist)) 448 (car autolist))
458 ((or (not alias) 449 ((or (not alias)
459 (string-equal alias (mh-alias-ali alias))) ;alias doesn't exist 450 (string-equal alias (mh-alias-ali alias))) ;alias doesn't exist
460 (completing-read "Alias file: " (mapcar 'list autolist) nil t)) 451 (completing-read "Alias file: " (mapcar 'list autolist) nil t))
547 (goto-char (point-min))))) 538 (goto-char (point-min)))))
548 (beginning-of-line) 539 (beginning-of-line)
549 (insert (format "%s: %s\n" alias address)) 540 (insert (format "%s: %s\n" alias address))
550 (save-buffer))) 541 (save-buffer)))
551 542
552 ;;;###mh-autoload
553 (defun mh-alias-add-alias (alias address) 543 (defun mh-alias-add-alias (alias address)
554 "Add ALIAS for ADDRESS in personal alias file. 544 "Add ALIAS for ADDRESS in personal alias file.
555 545
556 This function prompts you for an alias and address. If the alias 546 This function prompts you for an alias and address. If the alias
557 exists already, you will have the choice of inserting the new 547 exists already, you will have the choice of inserting the new
600 (let* ((address (or (mh-extract-from-header-value) 590 (let* ((address (or (mh-extract-from-header-value)
601 (error "Message has no From: header"))) 591 (error "Message has no From: header")))
602 (alias (mh-alias-suggest-alias address))) 592 (alias (mh-alias-suggest-alias address)))
603 (mh-alias-add-alias alias address)))) 593 (mh-alias-add-alias alias address))))
604 594
605 ;;;###mh-autoload
606 (defun mh-alias-add-address-under-point () 595 (defun mh-alias-add-address-under-point ()
607 "Insert an alias for address under point." 596 "Insert an alias for address under point."
608 (interactive) 597 (interactive)
609 (let ((address (mh-goto-address-find-address-at-point))) 598 (let ((address (mh-goto-address-find-address-at-point)))
610 (if address 599 (if address
611 (mh-alias-add-alias nil address) 600 (mh-alias-add-alias nil address)
612 (message "No email address found under point")))) 601 (message "No email address found under point"))))
613 602
614 ;;;###mh-autoload 603 ;; From goto-addr.el, which we don't want to force-load on users.
604 (defun mh-goto-address-find-address-at-point ()
605 "Find e-mail address around or before point.
606
607 Then search backwards to beginning of line for the start of an
608 e-mail address. If no e-mail address found, return nil."
609 (re-search-backward "[^-_A-z0-9.@]" (line-beginning-position) 'lim)
610 (if (or (looking-at mh-address-mail-regexp) ; already at start
611 (and (re-search-forward mh-address-mail-regexp
612 (line-end-position) 'lim)
613 (goto-char (match-beginning 0))))
614 (match-string-no-properties 0)))
615
615 (defun mh-alias-apropos (regexp) 616 (defun mh-alias-apropos (regexp)
616 "Show all aliases or addresses that match a regular expression REGEXP." 617 "Show all aliases or addresses that match a regular expression REGEXP."
617 (interactive "sAlias regexp: ") 618 (interactive "sAlias regexp: ")
618 (if mh-alias-local-users 619 (if mh-alias-local-users
619 (mh-alias-reload-maybe)) 620 (mh-alias-reload-maybe))
666 (princ group-matches)) 667 (princ group-matches))
667 (when (not (string-equal passwd-matches "")) 668 (when (not (string-equal passwd-matches ""))
668 (princ "\nLocal User Aliases:\n\n") 669 (princ "\nLocal User Aliases:\n\n")
669 (princ passwd-matches)))))) 670 (princ passwd-matches))))))
670 671
672 (defun mh-folder-line-matches-show-buffer-p ()
673 "Return t if the message under point in folder-mode is in the show buffer.
674 Return nil in any other circumstance (no message under point, no
675 show buffer, the message in the show buffer doesn't match."
676 (and (eq major-mode 'mh-folder-mode)
677 (mh-get-msg-num nil)
678 mh-show-buffer
679 (get-buffer mh-show-buffer)
680 (buffer-file-name (get-buffer mh-show-buffer))
681 (string-match ".*/\\([0-9]+\\)$"
682 (buffer-file-name (get-buffer mh-show-buffer)))
683 (string-equal
684 (match-string 1 (buffer-file-name (get-buffer mh-show-buffer)))
685 (int-to-string (mh-get-msg-num nil)))))
686
671 (provide 'mh-alias) 687 (provide 'mh-alias)
672 688
673 ;; Local Variables: 689 ;; Local Variables:
674 ;; indent-tabs-mode: nil 690 ;; indent-tabs-mode: nil
675 ;; sentence-end-double-space: nil 691 ;; sentence-end-double-space: nil