[Mew-dist 07878] customize progress
sen_ml at example.com
sen_ml at example.com
1999年 3月 3日 (水) 22:36:43 JST
hello-
i have been working on customize support for mew, and have made some
progress. attached is a diff against mew-vars.el for 1.93. (if
people would like, i can try to make a diff against the latest beta
too.)
i went ahead and made up some groups based on the comments in the code.
i didn't make everything customizable (not sure whether this is a good
idea anyway), but i think there is enough to get a feel for the concept.
please try it out :-)
p.s. i haven't incorporated SHIRAI-san's suggestion for dealing w/
older emacs and mule yet. also the customization for
mew-window-configuration is not correct yet -- i am stuck on this
one...
-------------- next part --------------
--- /usr/share/emacs/site-lisp/mew/mew-vars.el Wed Jan 6 16:18:09 1999
+++ mew-vars.el Wed Mar 3 17:10:55 1999
@@ -6,6 +6,106 @@
;;; Code:
+(defgroup mew nil
+ "Messaging in the Emacs World"
+ :group 'emacs)
+
+(defgroup mew-hooks nil
+ "Hooks"
+ :group 'mew)
+
+(defgroup mew-limits nil
+ "Limits"
+ :group 'mew)
+
+(defgroup mew-window nil
+ "Window"
+ :group 'mew)
+
+(defgroup mew-appearance nil
+ "Appearance"
+ :group 'mew)
+
+(defgroup mew-summary-mode nil
+ "Summary Mode"
+ :group 'mew)
+
+(defgroup mew-message-mode nil
+ "Message Mode"
+ :group 'mew)
+
+(defgroup mew-draft-mode nil
+ "Draft Mode"
+ :group 'mew)
+
+(defgroup mew-im-config nil
+ "IM Config"
+ :group 'mew)
+
+(defgroup mew-completion nil
+ "Completion"
+ :group 'mew)
+
+(defgroup mew-citation nil
+ "Citation"
+ :group 'mew)
+
+(defgroup mew-signature nil
+ "Signature"
+ :group 'mew)
+
+(defgroup mew-folders nil
+ "Folders"
+ :group 'mew)
+
+(defgroup mew-refile-delete nil
+ "Refile and Delete"
+ :group 'mew)
+
+(defgroup mew-file nil
+ "File"
+ :group 'mew)
+
+(defgroup mew-demo nil
+ "Demo"
+ :group 'mew)
+
+(defgroup mew-ask nil
+ "Ask"
+ :group 'mew)
+
+(defgroup mew-field-magic nil
+ "Field Magic"
+ :group 'mew)
+
+(defgroup mew-use nil
+ "Use (Petnames, IMAP)"
+ :group 'mew)
+
+(defgroup mew-x-face nil
+ "X face"
+ :group 'mew)
+
+(defgroup mew-auto nil
+ "Auto"
+ :group 'mew)
+
+(defgroup mew-pick-sort nil
+ "Pick and Sort"
+ :group 'mew)
+
+(defgroup mew-pgp nil
+ "PGP"
+ :group 'mew)
+
+(defgroup mew-marks nil
+ "Marks"
+ :group 'mew)
+
+(defgroup mew-highlight nil
+ "Cursor and Highlighting"
+ :group 'mew)
+
(defconst mew-vars-version "mew-vars.el version 0.03")
(require 'mew-env)
@@ -199,32 +299,58 @@
;; Hooks
;;
-(defvar mew-init-hook nil
- "*Hook called at initialize time.")
-(defvar mew-summary-mode-hook nil
- "*Hook called in Summary mode.")
-(defvar mew-virtual-mode-hook nil
- "*Hook called in Virtual mode.")
-(defvar mew-draft-mode-hook nil
- "*Hook called in Draft mode.")
-(defvar mew-message-mode-hook nil
- "*Hook called in Message mode.")
-(defvar mew-message-hook nil
- "*Hook called whenever message displayed.")
-(defvar mew-send-hook nil
- "*Hook called before sending a message")
-(defvar mew-real-send-hook nil
- "*Hook called before really sending a message")
-(defvar mew-suspend-hook nil
- "*Hook called on suspend.")
-(defvar mew-quit-hook nil
- "*Hook called on quit.")
-(defvar mew-summary-inc-sentinel-hook nil
- "*Hook called when inc finished.")
-(defvar mew-summary-scan-sentinel-hook nil
- "*Hook called when scan finished.")
-(defvar mew-summary-exec-hook nil
- "*Hook called when mew-summary-exec finished.")
+(defcustom mew-init-hook nil
+ "*Hook called at initialize time."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-summary-mode-hook nil
+ "*Hook called in Summary mode."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-virtual-mode-hook nil
+ "*Hook called in Virtual mode."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-draft-mode-hook nil
+ "*Hook called in Draft mode."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-message-mode-hook nil
+ "*Hook called in Message mode."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-message-hook nil
+ "*Hook called whenever message displayed."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-send-hook nil
+ "*Hook called before sending a message"
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-real-send-hook nil
+ "*Hook called before really sending a message"
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-suspend-hook nil
+ "*Hook called on suspend."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-quit-hook nil
+ "*Hook called on quit."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-summary-inc-sentinel-hook nil
+ "*Hook called when inc finished."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-summary-scan-sentinel-hook nil
+ "*Hook called when scan finished."
+ :group 'mew-hooks
+ :type 'hook)
+(defcustom mew-summary-exec-hook nil
+ "*Hook called when mew-summary-exec finished."
+ :group 'mew-hooks
+ :type 'hook)
;;
;;
@@ -325,68 +451,114 @@
;; Limits
;;
-(defvar mew-file-max-size 100000
+(defcustom mew-file-max-size 100000
"*The max size of messages. If the size of a message is greater
-than mew-file-max-size, Mew skips MIME analysis.")
+than mew-file-max-size, Mew skips MIME analysis."
+ :group 'mew-limits
+ :type 'integer)
-(defvar mew-header-max-length 100
+(defcustom mew-header-max-length 100
"*If the length of a header exceeds this value,
it is not arranged nor MIME decoded.
-See also mew-header-max-depth.")
+See also mew-header-max-depth."
+ :group 'mew-limits
+ :type 'integer)
-(defvar mew-header-max-depth 50
+(defcustom mew-header-max-depth 50
"*A value to decide loop depth for header field syntax analysis.
It was known as mew-loop-depth.
-See also mew-header-max-length.")
+See also mew-header-max-length."
+ :group 'mew-limits
+ :type 'integer)
;;
;; Mail Addresses
;;
-(defvar mew-mail-domain-list nil
+(defcustom mew-mail-domain-list nil
"*Your e-mail address domain list like
(\"Mew.org\" \"iijlab.net\").
-They are used for mail-domain completion in Draft mode(C-cTAB)")
-
-(defvar mew-mail-domain (or (car mew-mail-domain-list) "")
- "*Your e-mail address domain.")
+They are used for mail-domain completion in Draft mode(C-cTAB)"
+ :group 'mew-mail-addresses
+ :type '(repeat string))
+
+(defcustom mew-mail-domain (or (car mew-mail-domain-list) "")
+ "*Your e-mail address domain."
+ :group 'mew-mail-addresses
+ :type 'string)
-(defvar mew-mail-address-list nil
+(defcustom mew-mail-address-list nil
"*The addresses included in this list never appear on the Cc:
-field on a draft buffer.")
-
-(cond
- ((string= mew-mail-domain "")
- (defvar mew-mail-address (user-login-name)))
- (t
- (defvar mew-mail-address (concat (user-login-name) "@" mew-mail-domain))))
+field on a draft buffer."
+ :group 'mew-mail-addresses
+ :type '(repeat string))
+
+; i don't understand why this is done this way...
+
+;(cond
+; ((string= mew-mail-domain "")
+; (defvar mew-mail-address (user-login-name)))
+; (t
+; (defvar mew-mail-address (concat (user-login-name) "@" mew-mail-domain))))
+
+; why not like this?
+(defcustom mew-mail-address
+ (cond
+ ((string= mew-mail-domain "")
+ (user-login-name))
+ (t
+ (concat (user-login-name) "@" mew-mail-domain)))
+ "Mail address?"
+ :group 'mew-mail-addresses
+ :type 'string)
;;
;; Window
;;
-(defvar mew-window-configuration
+; customize-support not done yet
+(defcustom mew-window-configuration
'((summary (1 0))
(message (8 31))
(draft (1 0)))
- "*Ratio of windows")
+ "*Ratio of windows"
+ :group 'mew-window
+ :type '(list
+ (list (const :tag "summary" :value 'summary)
+ (list integer integer))
+ (list (const :tag "message" :value 'message)
+ (list integer integer))
+ (list (const :tag "draft" :value 'draft)
+ (list integer integer))
+ ))
-(defvar mew-window-use-full nil
+(defcustom mew-window-use-full nil
"*Dynamic window configuration when nil. This variable will be obsolated
-because mew will support mew-window-percent(e.g 50, 100, etc.).")
+because mew will support mew-window-percent(e.g 50, 100, etc.)."
+ :group 'mew-window
+ :type 'boolean)
;;
;; Appearance
;;
-(defvar mew-mode-line-id '("Mew: %12b")
- "*A default value of mode-line-buffer-identification for each Mew mode.")
+(defcustom mew-mode-line-id '("Mew: %12b")
+ "*A default value of mode-line-buffer-identification for each Mew mode."
+ :group 'mew-appearance
+ :type '(list string))
-(defvar mew-multipart-icon-position 'right
+(defcustom mew-multipart-icon-position 'right
"*Position where multipart icons are displayed.
If 'left, displayed at the left size of the default toolbar.
If 'right, displayed at the right size of the default toolbar.
-Otherwise, not displayed.")
+Otherwise, not displayed."
+ :group 'mew-appearance
+ ; i don't really know how to get radio to work w/o at least one sexp...
+ :type '(radio
+ (const :tag "left" :value 'left)
+ (const :tag "right" :value 'right)
+ (sexp :tag "other")
+ ))
;; Low level
(defvar mew-folder-list-function 'mew-folder-list)
@@ -395,109 +567,176 @@ Otherwise, not displayed.")
;; Summary mode
;;
-(defvar mew-analysis t
+(defcustom mew-analysis t
"*MIME syntax analysis and cache when *non-nil*.
- Skip syntax analysis when nil.")
+ Skip syntax analysis when nil."
+ :group 'mew-summary-mode
+ :type 'boolean)
-(defvar mew-summary-cache-use t
+(defcustom mew-summary-cache-use t
"*If *non-nil*, insert mew-summary-cache-file into Summary mode buffer
when the Summary mode is visited and it does not exist in buffer.
-mew-summary-cache-file is automatically saved on inc and scan.")
-
-(defvar mew-cache-size 10
- "*Number of buffer for message cache.")
+mew-summary-cache-file is automatically saved on inc and scan."
+ :group 'mew-summary-mode
+ :type 'boolean)
+
+(defcustom mew-cache-size 10
+ "*Number of buffer for message cache."
+ :group 'mew-summary-mode
+ :type 'integer)
+
+(defcustom mew-summary-cache-file ".mew-cache"
+ "*Cache file for Summary mode contents."
+ :group 'mew-summary-mode
+ :type 'string)
+
+(defcustom mew-window-home-buffer "*scratch*"
+ "*Buffer name to return if window stack is empty."
+ :group 'mew-summary-mode
+ :type 'string)
-(defvar mew-summary-cache-file ".mew-cache"
- "*Cache file for Summary mode contents.")
-
-(defvar mew-window-home-buffer "*scratch*"
- "*Buffer name to return if window stack is empty.")
-
-(defvar mew-summary-show-direction 'down
+(defcustom mew-summary-show-direction 'down
"*Direction for SPC at end of message.
-'up 'down 'next(current direction) 'stop")
+'up 'down 'next(current direction) 'stop"
+ :group 'mew-summary-mode
+ :type '(radio
+ (const :tag "up" :value 'up)
+ (const :tag "down" :value 'down)
+ (const :tag "next" :value 'next)
+ (const :tag "stop" :value 'stop)
+ (sexp :tag "other")
+ ))
+
+(defcustom mew-summary-trace-directory t
+ "*If non-nil, trace directory when mew-summary-goto-folder."
+ :group 'mew-summary-mode
+ :type 'boolean)
-(defvar mew-summary-trace-directory t
- "*If non-nil, trace directory when mew-summary-goto-folder.")
-
-(defvar mew-summary-recenter-p t
+(defcustom mew-summary-recenter-p t
"*If *non-nil*, the current message is recentered in Summary mode when
-displayed.")
-
-(defvar mew-summary-scan-width nil
- "*If *non-nil*, used as --width value.")
-
-(defvar mew-save-dir mew-home
- "The default directory to save messages or parts in Summary mode.")
+displayed."
+ :group 'mew-summary-mode
+ :type 'boolean)
+
+(defcustom mew-summary-scan-width nil
+ "*If *non-nil*, used as --width value."
+ :group 'mew-summary-mode
+ :type '(choice integer (const nil)))
+
+(defcustom mew-save-dir mew-home
+ "The default directory to save messages or parts in Summary mode."
+ :group 'mew-summary-mode
+ :type 'directory)
;;
;; Message mode
;;
-(defvar mew-end-of-message-string nil
- "*A value inserted on the end of message buffer if *non-nil*.")
-
-(defvar mew-end-of-part-string nil
- "*A value inserted on the end of message buffer if *non-nil*.")
+(defcustom mew-end-of-message-string nil
+ "*A value inserted on the end of message buffer if *non-nil*."
+ :group 'mew-message-mode
+ :type '(choice string (const nil)))
+
+(defcustom mew-end-of-part-string nil
+ "*A value inserted on the end of message buffer if *non-nil*."
+ :group 'mew-message-mode
+ :type '(choice string (const nil)))
+
+(defcustom mew-break-pages t
+ "*If *non-nil*, a message is broken by mew-page-delimiter."
+ :group 'mew-message-mode
+ :type 'boolean)
-(defvar mew-break-pages t
- "*If *non-nil*, a message is broken by mew-page-delimiter.")
-
-(defvar mew-field-other-visible t
+(defcustom mew-field-other-visible t
"*If *non-nil*, fields which is not found in \"mew-field-spec\"
are displayed after visible fields. Otherwise they are
-hidden before visible fields (and after invisible fields).")
+hidden before visible fields (and after invisible fields)."
+ :group 'message-mode
+ :type 'boolean)
;;
;; Draft mode
;;
-(defvar mew-reply-to nil
- "*A value inserted into Reply-To: field in Draft mode if *non-nil*.")
-
-(defvar mew-fcc nil
- "*A value inserted into Fcc: field in Draft mode if *non-nil*.")
-
-(defvar mew-cc nil
- "*A value inserted into Cc: field in Draft mode if *non-nil*.")
-
-(defvar mew-dcc nil
- "*A value inserted into Dcc: field in Draft mode if *non-nil*.")
-
-(defvar mew-from-list nil
- "*A list of From: for circular completion in Draft mode.")
+(defcustom mew-reply-to nil
+ "*A value inserted into Reply-To: field in Draft mode if *non-nil*."
+ :group 'mew-draft-mode
+ :type '(choice string (const nil)))
+
+(defcustom mew-fcc nil
+ "*A value inserted into Fcc: field in Draft mode if *non-nil*."
+ :group 'mew-draft-mode
+ :type '(choice string (const nil)))
+
+(defcustom mew-cc nil
+ "*A value inserted into Cc: field in Draft mode if *non-nil*."
+ :group 'mew-draft-mode
+ :type '(choice string (const nil)))
+
+(defcustom mew-dcc nil
+ "*A value inserted into Dcc: field in Draft mode if *non-nil*."
+ :group 'mew-draft-mode
+ :type '(choice string (const nil)))
+
+(defcustom mew-from-list nil
+ "*A list of From: for circular completion in Draft mode."
+ :group 'mew-draft-mode
+ :type '(repeat string))
+
+(defcustom mew-from (car mew-from-list)
+ "*A value inserted into From: field in Draft mode if *non-nil*."
+ :group 'mew-draft-mode
+ :type '(choice string (const nil)))
-(defvar mew-from (car mew-from-list)
- "*A value inserted into From: field in Draft mode if *non-nil*.")
-
-(defvar mew-header-alist nil
+(defcustom mew-header-alist nil
"*Alist of key and value pair for header field to be inserted on draft.
'((\"X-fingerprint:\" . \"6B 63 38 88 67 5E 96 8E CE A4 62 73 3F 11 64 94\")
(\"X-URL:\" . \"http://www.Mew.org/~kazu/\"))"
- )
-
-(defvar mew-draft-backup-file ".mew-backup")
-(defvar mew-draft-syntax-file ".mew-syntax")
-(defvar mew-draft-coverpage "CoverPage")
+ :group 'mew-draft-mode
+ :type '(repeat
+ (cons string string)))
+
+(defcustom mew-draft-backup-file ".mew-backup"
+ "Filename for saving draft backups?"
+ :group 'mew-draft-mode
+ :type 'string)
+(defcustom mew-draft-syntax-file ".mew-syntax"
+ "Filename for?"
+ :group 'mew-draft-mode
+ :type 'string)
+(defcustom mew-draft-coverpage "CoverPage"
+ "?"
+ :group 'mew-draft-mode
+ :type 'string)
;;
;; IM Config
;;
-(defvar mew-config-guess-alist nil
+(defcustom mew-config-guess-alist nil
"*If *non-nil*, this value is used to guess values of the Config: field.
-The syntax is exactly the same as \"mew-refile-guess-alist\".")
+The syntax is exactly the same as \"mew-refile-guess-alist\"."
+ :group 'mew-im-config
+ ; feels like a hack :-)
+ :type '(repeat
+ (cons string
+ (repeat
+ (cons regexp regexp)))))
-(defvar mew-config-insert-when-prepared nil
+(defcustom mew-config-insert-when-prepared nil
"*If *non-nil*, the Config: field is inserted according to
-\"mew-config-guess-alist\" when the draft is prepared.")
+\"mew-config-guess-alist\" when the draft is prepared."
+ :group 'mew-im-config
+ :type 'boolean)
-(defvar mew-config-insert-when-composed nil
+(defcustom mew-config-insert-when-composed nil
"*If *non-nil*, the Config: field is inserted according to
-\"mew-config-guess-alist\" when the message is composed.")
+\"mew-config-guess-alist\" when the message is composed."
+ :group 'mew-im-config
+ :type 'boolean)
(defconst mew-config-default "default"
- "The default value for IM Config to avoid hard cording.
+ "The default value for IM Config to avoid hard coding.
Do not change this value.")
(defvar mew-config-list nil
@@ -513,12 +752,14 @@ to change this value with mew-config-lis
;; Completion
;;
-(defvar mew-fields
+(defcustom mew-fields
(list mew-from: mew-to: mew-cc: mew-subj: mew-dcc: mew-fcc: mew-bcc:
mew-reply-to: mew-followup-to: mew-newsgroups: mew-config:)
- "*Completion field list in Draft mode.")
+ "*Completion field list in Draft mode."
+ :group 'mew-completion
+ :type '(repeat string))
-(defvar mew-field-completion-switch
+(defcustom mew-field-completion-switch
'(("To:" . mew-complete-address)
("Cc:" . mew-complete-address)
("Dcc:" . mew-complete-address)
@@ -526,9 +767,11 @@ to change this value with mew-config-lis
("Reply-To:" . mew-complete-address)
("Fcc:" . mew-complete-folder)
("Config:" . mew-complete-config))
- "*Completion function alist concerned with the key.")
+ "*Completion function alist concerned with the key."
+ :group 'mew-completion
+ :type '(repeat (cons string function)))
-(defvar mew-field-circular-completion-switch
+(defcustom mew-field-circular-completion-switch
'(("To:" . mew-circular-complete-domain)
("Cc:" . mew-circular-complete-domain)
("Dcc:" . mew-circular-complete-domain)
@@ -536,67 +779,103 @@ to change this value with mew-config-lis
("Reply-To:" . mew-circular-complete-domain)
("From:" . mew-circular-complete-from)
("Config:" . mew-circular-complete-config))
- "*Circular completion function alist concerned with the key.")
+ "*Circular completion function alist concerned with the key."
+ :group 'mew-completion
+ :type '(repeat (cons string function)))
;;
;; Citation
;;
-(defvar mew-cite-prefix "> "
- "*Prefix of citation.")
-(defvar mew-cite-hook nil
- "*If you want to use super-cite, (setq mew-cite-hook 'sc-cite-original).")
-(defvar mew-before-cite-hook nil
- "Called in mew-summary-reply-with-citation before citation.")
+(defcustom mew-cite-prefix "> "
+ "*Prefix of citation."
+ :group 'mew-citation
+ :type 'string)
+(defcustom mew-cite-hook nil
+ "*If you want to use super-cite, (setq mew-cite-hook 'sc-cite-original)."
+ :group 'mew-citation
+ :type 'hook)
+(defcustom mew-before-cite-hook nil
+ "Called in mew-summary-reply-with-citation before citation."
+ :group 'mew-citation
+ :type 'hook)
-(defvar mew-cite-prefix-function nil
+(defcustom mew-cite-prefix-function nil
"*Function called on citations. A good candidate is
-'mew-cite-prefix-username")
+'mew-cite-prefix-username"
+ :group 'mew-citation
+ :type 'function)
-(defvar mew-cite-prefix-confirmp nil
+(defcustom mew-cite-prefix-confirmp nil
"*If *non-nil*, ciattion prefix (such as \"kazu> \") is
-confirmed to be used.")
+confirmed to be used."
+ :group 'mew-citation
+ :type '(choice string (const nil)))
-(defvar mew-cite-fields (list mew-from: mew-subj: mew-date:)
+(defcustom mew-cite-fields (list mew-from: mew-subj: mew-date:)
"*The fields that you want to extract as citation label.
If you change this valuable, you must change mew-cite-format.
The value of the first field becomes the first argment for mew-cite-format.
(e.g. The default first argment is a value of From: field.)
The value of the second field becomes the second argment for mew-cite-format.
-....")
-
-(defvar mew-cite-format "From: %s\nSubject: %s\nDate: %s\n\n"
- "*Format for the citation label.")
+...."
+ :group 'mew-citation
+ :type '(repeat string))
+
+(defcustom mew-cite-format "From: %s\nSubject: %s\nDate: %s\n\n"
+ "*Format for the citation label."
+ :group 'mew-citation
+ :type 'string)
-(defvar mew-summary-reply-position 'body
+(defcustom mew-summary-reply-position 'body
"If 'body, the cursor locates in the beginning of the body.
-Otherwise, the cursor is after To:.")
+Otherwise, the cursor is after To:."
+ :group 'mew-citation
+ :type '(radio
+ (const :tag "body" :value 'body)
+ (const :tag "end" :value 'end)
+ (sexp :tag "other")
+ ))
-(defvar mew-summary-reply-with-citation-position 'end
+(defcustom mew-summary-reply-with-citation-position 'end
"If 'body, the cursor locates in the beginning of the body.
If 'end, the cursor locates after the citation.
-Otherwise, the cursor is after To:.")
+Otherwise, the cursor is after To:."
+ :group 'mew-citation
+ :type '(radio
+ (const :tag "body" :value 'body)
+ (const :tag "end" :value 'end)
+ (sexp :tag "other")
+ ))
;;
;; Signature
;;
-(defvar mew-signature-file "~/.signature"
+(defcustom mew-signature-file "~/.signature"
"*A signature file to be inserted in Draft mode. To support multiple
-signature files, use \"c-sig.el\".")
+signature files, use \"c-sig.el\"."
+ :group 'mew-signature
+ :type '(file :must-match t))
-(defvar mew-signature-insert-last nil
+(defcustom mew-signature-insert-last nil
"*If *non-nil*, the signature file is inserted in the last of body.
Otherwise, it is inserted at the currect point. If you created multipart
-and mew-signature-as-lastpart is *non-nil*, this variable is ignored.")
+and mew-signature-as-lastpart is *non-nil*, this variable is ignored."
+ :group 'mew-signature
+ :type 'boolean)
-(defvar mew-signature-as-lastpart nil
+(defcustom mew-signature-as-lastpart nil
"*If *non-nil*, the signature file is appended as the final part
-when you create multipart.")
+when you create multipart."
+ :group 'mew-signature
+ :type 'boolean)
-(defvar mew-signature-description "My signature"
+(defcustom mew-signature-description "My signature"
"*This variable is used as a description if the signature is appended
-as the final part.")
+as the final part."
+ :group 'mew-signature
+ :type 'string)
;;
;; Temporary solution to decide To: when reply
@@ -618,37 +897,56 @@ as the final part.")
;; Folders
;;
-(defvar mew-folder-mode 448 ;; decimal for octal 0700
+(defcustom mew-folder-mode 448 ;; decimal for octal 0700
"Secure file mode for folders. 448(0700 in octal) is STRONGLY recommended
-for privacy reasons.")
+for privacy reasons."
+ :group 'mew-folders
+ :type 'integer)
-(defvar mew-file-mode 384 ;; decimal for octal 0600
+(defcustom mew-file-mode 384 ;; decimal for octal 0600
"Secure file mode. 384(0600 in octal) is STRONGLY recommended
-for privacy reasons.")
+for privacy reasons."
+ :group 'mew-folders
+ :type 'integer)
-(defvar mew-use-folders-file-p nil
+(defcustom mew-use-folders-file-p nil
"*If *non-nil*, Mew tries to load mew-folders-file to make bootup faster.
-And C-u Z saves folder list to mew-folders-file.")
+And C-u Z saves folder list to mew-folders-file."
+ :group 'mew-folders
+ :type 'boolean)
-(defvar mew-folders-file ".folders"
+(defcustom mew-folders-file ".folders"
"*A file to save folder list. It is used on start-up to
-make start-up much faster.")
+make start-up much faster."
+ :group 'mew-folders
+ :type 'string)
-(defvar mew-folders-ignore '("+from" "+draft" "=")
+(defcustom mew-folders-ignore '("+from" "+draft" "=")
"*Folder list to contain messages whose To: is you and From: is
personal, e.g. a friend. Directories under this folder is ignored
-for refile guess.")
+for refile guess."
+ :group 'mew-folders
+ :type '(repeat string))
-(defvar mew-folders-default-folder "+from"
+(defcustom mew-folders-default-folder "+from"
"*A default folder used by mew-guess-by-default.
mew-guess-by-default append the From: value to it.
-e.g. \"+from/kazu\"")
+e.g. \"+from/kazu\""
+ :group 'mew-folders
+ :type 'string)
-(defvar mew-mime-compose-folder-delete 'delete
+(defcustom mew-mime-compose-folder-delete 'delete
"*Action to delete MIME draft directory after sending a multipart letter.
-Proper value is 'ask', 'delete', and 'retain'.")
+Proper value is 'ask', 'delete', and 'retain'."
+ :group 'mew-folders
+ :type '(radio
+ (const :tag "ask" :value 'ask)
+ (const :tag "delete" :value 'delete)
+ (const :tag "retain" :value 'retain)
+ (sexp :tag "other")
+ ))
-(defvar mew-folder-list-skip-pattern
+(defcustom mew-folder-list-skip-pattern
(if (and (eq system-type 'windows-nt)
(not (featurep 'meadow)))
"^[0-9]+$"
@@ -659,7 +957,9 @@ they don't have subdirectories. Unfortun
not available on some OSes. So, if a regular express pattern is
set to this value, Mew skips directories whose name are matched
this value. A good example value is \"^[0-9]+$\",
-especially for Windows (excluding WNT).")
+especially for Windows (excluding WNT)."
+ :group 'mew-folders
+ :type '(choice regexp (const nil)))
(defvar mew-touch-folder-p nil)
@@ -667,7 +967,7 @@ especially for Windows (excluding WNT)."
;; Refile and delete
;;
-(defvar mew-msg-rm-policy 'trashonly
+(defcustom mew-msg-rm-policy 'trashonly
"*Set remove policy. You can set one of the followings:
'totrash : Refile to the +trash folder if not in the +trash folder.
Just unmark the 'D' mark if in the +trash folder.
@@ -677,18 +977,29 @@ especially for Windows (excluding WNT)."
'uselist : Really remove messages marked with 'D' if in a folder found
in @samp{mew-msg-rm-folder-list}. In other folders, refile
to the +trash folder.
-otherwise : considered as 'totrash.")
-
-(defvar mew-msg-rm-folder-list nil
- "*Folder list to remove message really.")
+otherwise : considered as 'totrash."
+ :group 'mew-refile-delete
+ :type '(radio
+ (const :tag "totrash" :value 'totrash)
+ (const :tag "always" :value 'always)
+ (const :tag "trashonly" :value 'trashonly)
+ (const :tag "uselist" :value 'uselist)
+ (sexp :tag "other")))
+
+(defcustom mew-msg-rm-folder-list nil
+ "*Folder list to remove message really."
+ :group 'mew-refile-delete
+ :type '(repeat string))
;;
;; File
;;
-(defvar mew-file-append-p nil
+(defcustom mew-file-append-p nil
"*If *non-nil*, a message or a part is appended to the existing file
-on mew-summary-save(\"y\"). Otherwise overwrited.")
+on mew-summary-save(\"y\"). Otherwise overwrited."
+ :group 'mew-file
+ :type 'boolean)
(defvar mew-temp-file-initial
(expand-file-name (user-login-name) (or (getenv "TMP")
@@ -699,28 +1010,43 @@ setup phase Mew make a secure directory
mew-temp-file a file name prefix contained the directory name. The
directory must be unreadable from others, otherwise it might become a
big security hole. And this directory must not be gained access
-through network to prevent tire-tapping. Mew never uses
+through network to prevent wire-tapping. Mew never uses
'call-process-region' rather does use 'call-process' creating a
temporary file with mew-temp-file by itself. If 'call-process-region'
is used, Emacs creates a temporary file (probably in /tmp). So bad
guys can wiretap the temporary file.")
-(defvar mew-delete-temp-file t
- "*If *non-nil*, delete temporary files when external commands terminate.")
+(defcustom mew-delete-temp-file t
+ "*If *non-nil*, delete temporary files when external commands terminate."
+ :group 'mew-file
+ :type 'boolean)
;;
;; Demo
;;
-(defvar mew-demo t
- "*Mew demo is displayed at boot time if *non-nil*.")
-
-(defvar mew-demo-picture mew-xemacs-p
- "*A picture of cats is displayed if *non-nil* on XEmacs.")
-
-(defvar mew-icon-mew "Mew.png")
-(defvar mew-icon-mew-mono "Mew.xbm")
-(defvar mew-icon-mew-mule-bitmap-image "Mew.img")
+(defcustom mew-demo t
+ "*Mew demo is displayed at boot time if *non-nil*."
+ :group 'mew-demo
+ :type 'boolean)
+
+(defcustom mew-demo-picture mew-xemacs-p
+ "*A picture of cats is displayed if *non-nil* on XEmacs."
+ :group 'mew-demo
+ :type 'boolean)
+
+(defcustom mew-icon-mew "Mew.png"
+ "PNG icon for Mew?"
+ :group 'mew-demo
+ :type 'string)
+(defcustom mew-icon-mew-mono "Mew.xbm"
+ "XBM icon for Mew?"
+ :group 'mew-demo
+ :type 'string)
+(defcustom mew-icon-mew-mule-bitmap-image "Mew.img"
+ "Mule bitmap image for Mew?"
+ :group 'mew-demo
+ :type 'string)
(defvar mew-logo nil)
@@ -728,41 +1054,69 @@ guys can wiretap the temporary file.")
;; Ask?
;;
-(defvar mew-ask-cc t
- "*Prompt user for CC: field if *non-nil*.")
-
-(defvar mew-ask-subject nil
- "*Prompt user for Subject: field when send if *non-nil*.")
+(defcustom mew-ask-cc t
+ "*Prompt user for CC: field if *non-nil*."
+ :group 'mew-ask
+ :type 'boolean)
+
+(defcustom mew-ask-subject nil
+ "*Prompt user for Subject: field when send if *non-nil*."
+ :group 'mew-ask
+ :type 'boolean)
-(defvar mew-ask-range t
+(defcustom mew-ask-range t
"*If *non-nil*, ask for a range for scanning. If false, always
-use default.")
+use default."
+ :group 'mew-ask
+ :type 'boolean)
+
+(defcustom mew-ask-newsgroups nil
+ "*If *non-nil*, prompt user if he/she want to include Newsgroups: field."
+ :group 'mew-ask
+ :type 'boolean)
-(defvar mew-ask-newsgroups nil
- "*If *non-nil*, prompt user if he/she want to include Newsgroups: field.")
-
-(defvar mew-ask-config nil
+(defcustom mew-ask-config nil
"*If *non-nil*, prompt user if he/she want to include/change Config:
-field.")
-
-(defvar mew-ask-cite-prefix nil
- "*If *non-nil*, ask citation prefix when cite a message.")
+field."
+ :group 'mew-ask
+ :type 'boolean)
+
+(defcustom mew-ask-cite-prefix nil
+ "*If *non-nil*, ask citation prefix when cite a message."
+ :group 'mew-ask
+ :type 'boolean)
+
+(defcustom mew-ask-pack t
+ "*If *non-nil*, ask whether or not you really want to pack."
+ :group 'mew-ask
+ :type 'boolean)
-(defvar mew-ask-pack t
- "*If *non-nil*, ask whether or not you really want to pack.")
-
-(defvar mew-ask-send t
+(defcustom mew-ask-send t
"*If *non-nil*, ask whether or not you really want to send the message
-which you composed without explicit C-cC-m.")
+which you composed without explicit C-cC-m."
+ :group 'mew-ask
+ :type 'boolean)
;;
;; Field Magic
;;
-(defvar mew-reply-string "Re: ")
-(defvar mew-reply-regex "^Re:")
-(defvar mew-forward-string "Fw: ")
-(defvar mew-forward-regex "^\\(Fw\\|Forward\\):")
+(defcustom mew-reply-string "Re: "
+ "String prepended to subject line when replying?"
+ :group 'mew-field-magic
+ :type 'string)
+(defcustom mew-reply-regex "^Re:"
+ "Regex used to match replies?"
+ :group 'mew-field-magic
+ :type 'regexp)
+(defcustom mew-forward-string "Fw: "
+ "String prepended to subject line when forwarding?"
+ :group 'mew-field-magic
+ :type 'string)
+(defcustom mew-forward-regex "^\\(Fw\\|Forward\\):"
+ "Regex used to match forwarded messages?"
+ :group 'mew-field-magic
+ :type 'regexp)
;;
;; Use
@@ -772,56 +1126,80 @@ which you composed without explicit C-cC
(defvar mew-use-bbdb nil
"*Use Insidious Big Brother Database if t")
-(defvar mew-use-petname nil)
+(defcustom mew-use-petname nil
+ "Use petnames if *non-nil*."
+ :group 'mew-use
+ :type 'boolean)
-(defvar mew-use-imap nil
+(defcustom mew-use-imap nil
"If nil, both immv and imrm are called synchronously for speed when
\"x\" is typed. If *non-nil*, they are called asynchronously to catch
-user's password for IMAP operation.")
+user's password for IMAP operation."
+ :group 'mew-use
+ :type 'boolean)
;;
;; X face
;;
(defvar mew-x-face-filter (list mew-prog-uncompface "ikon2xbm"))
-(defvar mew-x-face-prog "xv")
+(defcustom mew-x-face-prog "xv"
+ "X face program?"
+ :group 'mew-x-face
+ :type 'string)
(defvar mew-x-face-args nil)
-(defvar mew-x-face-file "~/.xface"
- "*If *non-nil* and the file exists, X-Face: fields is inserted.")
+(defcustom mew-x-face-file "~/.xface"
+ "*If *non-nil* and the file exists, X-Face: fields is inserted."
+ :group 'mew-x-face
+ :type '(file :must-match t))
;;
;; Auto
;;
-(defvar mew-auto-get t
+(defcustom mew-auto-get t
"If *non-nil* mew-auto-get, Mew gets messages from your spool
automatically. 'C-u M-x mew' forces to get messages even if
-mew-auto-get is nil.")
+mew-auto-get is nil."
+ :group 'mew-auto
+ :type 'boolean)
-(defvar mew-auto-flush-queue nil
+(defcustom mew-auto-flush-queue nil
"If *non-nil* and if there are queued messages in IM's QueueDir,
they are flushed at \"imget\"(i.e. 'i'). This idea saves money in
-dial up environment.")
+dial up environment."
+ :group 'mew-auto
+ :type 'boolean)
;;
;; Pick and Sort
;;
-(defvar mew-pick-default-field nil
+(defcustom mew-pick-default-field nil
"*Default prefix string to be appeared when inputing a pick pattern.
-A good example is \"from=\".")
+A good example is \"from=\"."
+ :group 'mew-pick-sort
+ :type '(choice string (const nil)))
-(defvar mew-pick-field-list
+(defcustom mew-pick-field-list
'("head=" "body=" "all="
"to=" "cc=" "subject=" "dcc=" "fcc=" "bcc=" "date="
"reply-to=" "followup-to=" "from=" "newsgroups=")
- "*A list of key for pick pattern.")
+ "*A list of key for pick pattern."
+ :group 'mew-pick-sort
+ :type '(repeat string))
-(defvar mew-sort-default-key "date"
+(defcustom mew-sort-default-key "date"
"*Default sort key when inputing a sort key.
-Its format is key:mode where more is found in \"mew-sort-modes\".")
+Its format is key:mode where more is found in \"mew-sort-modes\"."
+ :group 'mew-pick-sort
+ :type '(choice
+ (const "date")
+ (const "num")
+ (const "text")
+ (const "ml")))
-(defvar mew-sort-key-alist
+(defcustom mew-sort-key-alist
'(("date" . "date") ("subject") ("from") ("to") ("newsgroups")
("posted" . "date") ("x-sequence" . "num") ("x-mail-count" . "num"))
"*List of fields for `mew-summary-sort'.
@@ -830,9 +1208,20 @@ MODE is one of \"date\" (sort by chronol
\"num\" (sort by numerical order) or
\"text\" (sort by alphabetical order) or
\"ml\" (modify subject).
-(nil means \"text\").")
+(nil means \"text\")."
+ :group 'mew-pick-sort
+ :type '(repeat
+ (cons string (choice string (const nil)))))
+
+(defcustom mew-sort-modes '("date" "num" "text" "ml")
+ "?"
+ :group 'mew-pick-sort
+ :type '(list
+ (const "date")
+ (const "num")
+ (const "text")
+ (const "ml")))
-(defvar mew-sort-modes '("date" "num" "text" "ml"))
;;
;; Range
@@ -851,63 +1240,111 @@ MODE is one of \"date\" (sort by chronol
;; PGP Public key fetch
;;
-(defvar mew-pgp-keyserver-url-template
+(defcustom mew-pgp-keyserver-url-template
"http://pgp5.ai.mit.edu:11371/pks/lookup?op=get&search=%s"
+ "PGP keyserver url template"
;; "http://pgp.nic.ad.jp/cgi-bin/pgpsearchkey.pl?op=get&search=%s"
- )
+ :group 'mew-pgp
+ :type 'string)
-(defvar mew-x-pgp-key-list
+(defcustom mew-x-pgp-key-list
'("x-pgp-key:" "x-pgp-key-url:" "x-pgp-public-key:" "x-pgp-public-key-url:"
"x-pgp5-key:" "x-pgp5-key-url:" "x-pgp5-public-key:"
- "x-pgp5-public-key-url:" "x-public-key:"))
+ "x-pgp5-public-key-url:" "x-public-key:")
+ "?"
+ :group 'mew-pgp
+ :type '(repeat string))
-(defvar mew-pgp-fetch-key-process nil)
+(defcustom mew-pgp-fetch-key-process nil
+ "?"
+ :group 'mew-pgp
+ :type 'boolean)
;;
;; Marks
;;
-(defvar mew-mark-multi ?@)
-(defvar mew-mark-review ?*)
-(defvar mew-mark-delete ?D)
-(defvar mew-mark-refile ?o) ;; do you like "^"?
-(defvar mew-mark-tmp ?%) ;; temporary use only.
+(defcustom mew-mark-multi ?@
+ "Default is ?@"
+ :group 'mew-marks
+ :type 'character)
+(defcustom mew-mark-review ?*
+ "Default is ?*"
+ :group 'mew-marks
+ :type 'character)
+(defcustom mew-mark-delete ?D
+ "Default is ?D"
+ :group 'mew-marks
+ :type 'character)
+(defcustom mew-mark-refile ?o
+ "Default is ?o"
+ :group 'mew-marks
+ :type 'character) ;; do you like "^"?
+(defcustom mew-mark-tmp ?%
+ "Default is ?%"
+ :group 'mew-marks
+ :type 'character) ;; temporary use only.
;;
;; Highlight
;;
-(defvar mew-cursor-mark ">"
+(defcustom mew-cursor-mark ">"
"*The mark in the beginning of the cursor line if
-mew-use-cursor-mark is *non-nil*. ")
-(defvar mew-use-cursor-mark nil
+mew-use-cursor-mark is *non-nil*. "
+ :group 'mew-highlight
+ :type 'string)
+(defcustom mew-use-cursor-mark nil
"*If *non-nil*, show mew-cursor-mark in the beginning of the cursor line.
-This is convenient if underline is not available.")
-
-(defvar mew-use-highlight-cursor-line t
- "*Put underline on the current line in Summary mode.")
-(defvar mew-use-highlight-mouse-line mew-xemacs-p
- "*Paint the line where mouse locates in Summary mode.")
-(defvar mew-use-highlight-mark t
- "*Paint marked lines in Summary mode.")
-(defvar mew-use-highlight-header t
- "*Paint header in Message and Draft mode.")
-(defvar mew-use-highlight-body nil
- "*Paint body in Message and Draft mode.")
-(defvar mew-use-highlight-url t
- "*Emphasize URL lines in Message mode.")
-(defvar mew-use-highlight-url-regex
+This is convenient if underline is not available."
+ :group 'mew-highlight
+ :type 'boolean)
+
+(defcustom mew-use-highlight-cursor-line t
+ "*Put underline on the current line in Summary mode."
+ :group 'mew-highlight
+ :type 'boolean)
+(defcustom mew-use-highlight-mouse-line mew-xemacs-p
+ "*Paint the line where mouse locates in Summary mode."
+ :group 'mew-highlight
+ :type 'boolean)
+(defcustom mew-use-highlight-mark t
+ "*Paint marked lines in Summary mode."
+ :group 'mew-highlight
+ :type 'boolean)
+(defcustom mew-use-highlight-header t
+ "*Paint header in Message and Draft mode."
+ :group 'highlight
+ :type 'boolean)
+(defcustom mew-use-highlight-body nil
+ "*Paint body in Message and Draft mode."
+ :group 'highlight
+ :type 'boolean)
+(defcustom mew-use-highlight-url t
+ "*Emphasize URL lines in Message mode."
+ :group 'highlight
+ :type 'boolean)
+(defcustom mew-use-highlight-url-regex
"\\b\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?[-a-zA-Z0-9_=?#$@~`%&*+|\\/.,]*[-a-zA-Z0-9_=#$@~`%&*+|\\/]"
- "*Regular expression to find URL.")
-
-(defvar mew-use-highlight-x-face mew-xemacs-p
- "*Iconify X-Face: on XEmacs in Message mode.")
-
-(defvar mew-highlight-body-max-line 200)
+ "*Regular expression to find URL."
+ :group 'mew-highlight
+ :type 'regexp)
+
+(defcustom mew-use-highlight-x-face mew-xemacs-p
+ "*Iconify X-Face: on XEmacs in Message mode."
+ :group 'mew-highlight
+ :type 'boolean)
+
+(defcustom mew-highlight-body-max-line 200
+ "?"
+ :group 'mew-highlight
+ :type 'integer)
-(defvar mew-highlight-url-max-size 3000
+(defcustom mew-highlight-url-max-size 3000
"*Use bold font at url maximize size.
-If nil, all contents are parsed.")
+If nil, all contents are parsed."
+ :group 'mew-highlight
+ :type 'integer)
;;
;; Styles and colors
Mew-dist メーリングリストの案内