~ubuntu-branches/ubuntu/edgy/mew-beta/edgy

« back to all changes in this revision

Viewing changes to mew-config.el

  • Committer: Bazaar Package Importer
  • Author(s): Tatsuya Kinoshita
  • Date: 2004-06-13 01:11:33 UTC
  • Revision ID: james.westby@ubuntu.com-20040613011133-yaef6kqhoimiq3lx
Tags: upstream-4.0.65
ImportĀ upstreamĀ versionĀ 4.0.65

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;;; mew-config.el
 
2
 
 
3
;; Author:  Kazu Yamamoto <Kazu@Mew.org>
 
4
;; Created: Dec 14, 1999
 
5
 
 
6
;;; Code:
 
7
 
 
8
(require 'mew)
 
9
 
 
10
(defsubst mew-case-default-p (case)
 
11
  (or (null case) (string= case mew-case-default)))
 
12
 
 
13
(defvar mew-generate-mail-address-list nil)
 
14
(defvar mew-generate-mail-domain-list nil)
 
15
(defvar mew-generate-from-list nil)
 
16
 
 
17
;;
 
18
;;
 
19
;;
 
20
 
 
21
(defun mew-cfent-value (case key def &optional symbol)
 
22
  (let ((cases (and case (mapcar 'mew-chop (mew-split case ?,))))
 
23
        ent ret)
 
24
    (or (member mew-case-default cases)
 
25
        (setq cases (cons mew-case-default cases)))
 
26
    (setq cases (nreverse cases))
 
27
    (catch 'loop
 
28
      (while cases
 
29
        (setq ent (assoc key (mew-cfent-by-case (car cases))))
 
30
        (when ent
 
31
          (setq ret (cdr ent))
 
32
          (if symbol (setq ret (symbol-value ret)))
 
33
          (if ent (throw 'loop nil)))
 
34
        (setq cases (cdr cases)))
 
35
      (setq ret def))
 
36
    ret))
 
37
 
 
38
(defvar mew-config-cases nil)
 
39
(defvar mew-config-cases2 nil)
 
40
(defvar mew-inbox-folders nil)
 
41
(defvar mew-queue-folders nil)
 
42
(defvar mew-postq-folders nil)
 
43
 
 
44
(defun mew-config-init ()
 
45
  (if (null mew-mail-address-list) (setq mew-generate-mail-address-list t))
 
46
  (if (null mew-mail-domain-list) (setq mew-generate-mail-domain-list t))
 
47
  (if (null mew-from-list) (setq mew-generate-from-list t)))
 
48
 
 
49
(defun mew-config-setup ()
 
50
  (if mew-generate-mail-address-list (setq mew-mail-address-list nil))
 
51
  (if mew-generate-mail-domain-list (setq mew-mail-domain-list nil))
 
52
  (if mew-generate-from-list (setq mew-from-list nil))
 
53
  (setq mew-inbox-folders nil)
 
54
  (setq mew-queue-folders nil)
 
55
  (setq mew-postq-folders nil)
 
56
  (setq mew-config-cases (mapcar 'car mew-config-alist))
 
57
  (or (member mew-case-default mew-config-cases)
 
58
      (setq mew-config-cases (cons mew-case-default mew-config-cases)))
 
59
  (setq mew-config-cases2
 
60
        (append mew-folder-prefixes
 
61
                (mapcar (lambda (x) (concat x ":")) mew-config-cases)))
 
62
  (let ((cases (reverse mew-config-cases)) ;; must copy
 
63
        case val) 
 
64
    (while cases
 
65
      (setq case (car cases))
 
66
      (setq cases (cdr cases))
 
67
      (setq val (mew-inbox-folder case))
 
68
      (or (mew-folder-inboxp val)
 
69
          (setq mew-inbox-folders (cons val mew-inbox-folders)))
 
70
      (setq val (mew-queue-folder case))
 
71
      (or (mew-folder-queuep val)
 
72
          (setq mew-queue-folders (cons val mew-queue-folders)))
 
73
      (setq val (mew-postq-folder case))
 
74
      (or (mew-folder-postqp val)
 
75
          (setq mew-postq-folders (cons val mew-postq-folders)))
 
76
      (when mew-generate-mail-address-list
 
77
        (setq val (concat "^" (regexp-quote (mew-mail-address case)) "$"))
 
78
        (or (member val mew-mail-address-list)
 
79
            (setq mew-mail-address-list (cons val mew-mail-address-list))))
 
80
      (when mew-generate-mail-domain-list
 
81
        (setq val (mew-mail-domain case))
 
82
        (or (member val mew-mail-domain-list)
 
83
            (setq mew-mail-domain-list (cons val mew-mail-domain-list))))
 
84
      (when mew-generate-from-list
 
85
        (setq val (mew-from case))
 
86
        (or (member val mew-from-list)
 
87
            (setq mew-from-list (cons val mew-from-list)))))))
 
88
 
 
89
;;;
 
90
;;;
 
91
;;;
 
92
 
 
93
(defun mew-name (&optional case)
 
94
  (mew-cfent-value case "name" mew-name))
 
95
 
 
96
(defun mew-user (&optional case)
 
97
  (mew-cfent-value case "user" mew-user))
 
98
 
 
99
(defun mew-mail-domain (&optional case)
 
100
  (mew-cfent-value case "mail-domain" mew-mail-domain))
 
101
 
 
102
(defun mew-mail-address (&optional case)
 
103
  (concat (mew-user case) "@" (mew-mail-domain case)))
 
104
 
 
105
;; mew-from is really strange to maintain backword compatibility.
 
106
(defun mew-from (&optional case)
 
107
  (or (unless mew-config-alist
 
108
        (if mew-generate-from-list
 
109
            mew-from
 
110
          (car mew-from-list)))
 
111
      (let ((name (mew-name case))
 
112
            (addr (mew-mail-address case)))
 
113
        (if (and name (string-match "[^ \t]" name))
 
114
            (format "%s <%s>" name addr)
 
115
          addr))))
 
116
 
 
117
(defun mew-cc (&optional case)
 
118
  (let ((cc (mew-cfent-value case "cc" mew-cc)))
 
119
    (if (eq cc 'me) (mew-mail-address case) cc)))
 
120
 
 
121
(defun mew-fcc (&optional case)
 
122
  (mew-cfent-value case "fcc" mew-fcc))
 
123
 
 
124
(defun mew-dcc (&optional case)
 
125
  (let ((dcc (mew-cfent-value case "dcc" mew-dcc)))
 
126
    (if (eq dcc 'me) (mew-mail-address case) dcc)))
 
127
 
 
128
(defun mew-reply-to (&optional case)
 
129
  (mew-cfent-value case "reply-to" mew-reply-to))
 
130
 
 
131
(defun mew-organization (&optional case)
 
132
  (mew-cfent-value case "organization" mew-organization))
 
133
 
 
134
;;
 
135
 
 
136
(defun mew-smtp-server (&optional case)
 
137
  (mew-cfent-value case "smtp-server" mew-smtp-server))
 
138
 
 
139
(defun mew-smtp-port (&optional case)
 
140
  (mew-cfent-value case "smtp-port" mew-smtp-port))
 
141
 
 
142
(defun mew-smtp-ssh-server (&optional case)
 
143
  (mew-cfent-value case "smtp-ssh-server" mew-smtp-ssh-server))
 
144
 
 
145
(defun mew-smtp-ssl (&optional case)
 
146
  (mew-cfent-value case "smtp-ssl" mew-smtp-ssl))
 
147
 
 
148
(defun mew-smtp-ssl-port (&optional case)
 
149
  (mew-cfent-value case "smtp-ssl-port" mew-smtp-ssl-port))
 
150
 
 
151
(defun mew-smtp-helo-domain (&optional case)
 
152
  (mew-cfent-value case "smtp-helo-domain" mew-smtp-helo-domain))
 
153
 
 
154
(defun mew-smtp-user (&optional case)
 
155
  (mew-cfent-value case "smtp-user" mew-smtp-user))
 
156
 
 
157
(defun mew-smtp-auth-list (&optional case)
 
158
  (mew-cfent-value case "smtp-auth-list" mew-smtp-auth-list))
 
159
 
 
160
(defun mew-smtp-mail-from (&optional case)
 
161
  (mew-cfent-value case "smtp-mail-from" mew-smtp-mail-from))
 
162
 
 
163
(defun mew-smtp-msgid-user (&optional case)
 
164
  (or (mew-cfent-value case "smtp-msgid-user" mew-smtp-msgid-user)
 
165
      (mew-user case)))
 
166
 
 
167
(defun mew-smtp-msgid-domain (&optional case)
 
168
  (or (mew-cfent-value case "smtp-msgid-domain" mew-smtp-msgid-domain)
 
169
      (mew-mail-domain case)))
 
170
 
 
171
(defun mew-smtp-message-id (&optional case)
 
172
  (let* ((random (format "%08d" (mew-random)))
 
173
         (domain (mew-smtp-msgid-domain case))
 
174
         (user (mew-smtp-msgid-user case))
 
175
         (time (mew-time-ctz-to-msgid (current-time))))
 
176
    (concat "<" time "." random "." user "@" domain ">")))
 
177
 
 
178
;;
 
179
 
 
180
(defun mew-mailbox-type (&optional case)
 
181
  (mew-cfent-value case "mailbox-type" mew-mailbox-type))
 
182
 
 
183
;;
 
184
 
 
185
(defun mew-mbox-command (&optional case)
 
186
  (mew-cfent-value case "mbox-command" mew-mbox-command))
 
187
 
 
188
(defun mew-mbox-command-arg (&optional case)
 
189
  (mew-cfent-value case "mbox-command-arg" mew-mbox-command-arg))
 
190
 
 
191
;;
 
192
 
 
193
(defun mew-pop-server (&optional case)
 
194
  (mew-cfent-value case "pop-server" mew-pop-server))
 
195
 
 
196
(defun mew-pop-port (&optional case)
 
197
  (mew-cfent-value case "pop-port" mew-pop-port))
 
198
 
 
199
(defun mew-pop-auth (&optional case)
 
200
  (mew-cfent-value case "pop-auth" mew-pop-auth))
 
201
 
 
202
(defun mew-pop-ssh-server (&optional case)
 
203
  (mew-cfent-value case "pop-ssh-server" mew-pop-ssh-server))
 
204
 
 
205
(defun mew-pop-ssl (&optional case)
 
206
  (mew-cfent-value case "pop-ssl" mew-pop-ssl))
 
207
 
 
208
(defun mew-pop-ssl-port (&optional case)
 
209
  (mew-cfent-value case "pop-ssl-port" mew-pop-ssl-port))
 
210
 
 
211
(defun mew-pop-proxy-server (&optional case)
 
212
  (mew-cfent-value case "pop-proxy-server" mew-pop-proxy-server))
 
213
 
 
214
(defun mew-pop-proxy-port (&optional case)
 
215
  (mew-cfent-value case "pop-proxy-port" mew-pop-proxy-port))
 
216
 
 
217
(defun mew-pop-user (&optional case)
 
218
  (mew-cfent-value case "pop-user" mew-pop-user))
 
219
 
 
220
(defun mew-pop-auth-list (&optional case)
 
221
  (mew-cfent-value case "pop-auth-list" mew-pop-auth-list))
 
222
 
 
223
(defun mew-pop-size (&optional case)
 
224
  (mew-cfent-value case "pop-size" mew-pop-size))
 
225
 
 
226
(defun mew-pop-body-lines (&optional case)
 
227
  (mew-cfent-value case "pop-body-lines" mew-pop-body-lines))
 
228
 
 
229
(defun mew-pop-delete (&optional case)
 
230
  (mew-cfent-value case "pop-delete" mew-pop-delete))
 
231
 
 
232
(defun mew-pop-header-only (&optional case)
 
233
  (mew-cfent-value case "pop-header-only" mew-pop-header-only))
 
234
 
 
235
;;
 
236
 
 
237
(defun mew-imap-server (&optional case)
 
238
  (mew-cfent-value case "imap-server" mew-imap-server))
 
239
 
 
240
(defun mew-imap-port (&optional case)
 
241
  (mew-cfent-value case "imap-port" mew-imap-port))
 
242
 
 
243
(defun mew-imap-auth (&optional case)
 
244
  (mew-cfent-value case "imap-auth" mew-imap-auth))
 
245
 
 
246
(defun mew-imap-ssh-server (&optional case)
 
247
  (mew-cfent-value case "imap-ssh-server" mew-imap-ssh-server))
 
248
 
 
249
(defun mew-imap-ssl (&optional case)
 
250
  (mew-cfent-value case "imap-ssl" mew-imap-ssl))
 
251
 
 
252
(defun mew-imap-ssl-port (&optional case)
 
253
  (mew-cfent-value case "imap-ssl-port" mew-imap-ssl-port))
 
254
 
 
255
(defun mew-imap-user (&optional case)
 
256
  (mew-cfent-value case "imap-user" mew-imap-user))
 
257
 
 
258
(defun mew-imap-auth-list (&optional case)
 
259
  (mew-cfent-value case "imap-auth-list" mew-imap-auth-list))
 
260
 
 
261
(defun mew-imap-size (&optional case)
 
262
  (mew-cfent-value case "imap-size" mew-imap-size))
 
263
 
 
264
(defun mew-imap-delete (&optional case)
 
265
  (mew-cfent-value case "imap-delete" mew-imap-delete))
 
266
 
 
267
(defun mew-imap-header-only (&optional case)
 
268
  (mew-cfent-value case "imap-header-only" mew-imap-header-only))
 
269
 
 
270
(defun mew-imap-prefix-list (&optional case)
 
271
  (mew-cfent-value case "imap-prefix-list" mew-imap-prefix-list))
 
272
 
 
273
;;
 
274
 
 
275
(defun mew-nntp-server (&optional case)
 
276
  (mew-cfent-value case "nntp-server" mew-nntp-server))
 
277
 
 
278
(defun mew-nntp-port (&optional case)
 
279
  (mew-cfent-value case "nntp-port" mew-nntp-port))
 
280
 
 
281
(defun mew-nntp-ssh-server (&optional case)
 
282
  (mew-cfent-value case "nntp-ssh-server" mew-nntp-ssh-server))
 
283
 
 
284
(defun mew-nntp-ssl (&optional case)
 
285
  (mew-cfent-value case "nntp-ssl" mew-nntp-ssl))
 
286
 
 
287
(defun mew-nntp-ssl-port (&optional case)
 
288
  (mew-cfent-value case "nntp-ssl-port" mew-nntp-ssl-port))
 
289
 
 
290
(defun mew-nntp-user (&optional case)
 
291
  (mew-cfent-value case "nntp-user" mew-nntp-user))
 
292
 
 
293
(defun mew-nntp-size (&optional case)
 
294
  (mew-cfent-value case "nntp-size" mew-nntp-size))
 
295
 
 
296
(defun mew-nntp-header-only (&optional case)
 
297
  (mew-cfent-value case "nntp-header-only" mew-nntp-header-only))
 
298
 
 
299
(defun mew-nntp-msgid-user (&optional case)
 
300
  (or (mew-cfent-value case "nntp-msgid-user" mew-nntp-msgid-user)
 
301
      (mew-user case)))
 
302
 
 
303
(defun mew-nntp-msgid-domain (&optional case)
 
304
  (or (mew-cfent-value case "nntp-msgid-domain" mew-nntp-msgid-domain)
 
305
      (mew-mail-domain case)))
 
306
 
 
307
(defun mew-nntp-message-id (&optional case)
 
308
  (let* ((random (format "%08d" (mew-random)))
 
309
         (domain (mew-nntp-msgid-domain case))
 
310
         (user (mew-nntp-msgid-user case))
 
311
         (time (mew-time-ctz-to-msgid (current-time))))
 
312
    (concat "<" time "." random "." user "@" domain ">")))
 
313
;;
 
314
 
 
315
(defun mew-inbox-folder (&optional case)
 
316
  (mew-cfent-value case "inbox-folder" mew-inbox-folder))
 
317
 
 
318
(defun mew-nntp-newsgroup (&optional case)
 
319
  (mew-cfent-value case "nntp-newsgroup" mew-nntp-newsgroup))
 
320
 
 
321
(defun mew-imap-friend-folder (&optional case)
 
322
  (mew-cfent-value case "imap-friend-folder" mew-imap-friend-folder))
 
323
 
 
324
(defun mew-queue-folder (&optional case)
 
325
  (mew-cfent-value case "queue-folder" mew-queue-folder))
 
326
 
 
327
(defun mew-postq-folder (&optional case)
 
328
  (mew-cfent-value case "postq-folder" mew-postq-folder))
 
329
 
 
330
(defun mew-imap-queue-folder (&optional case)
 
331
  (mew-cfent-value case "imap-queue-folder" mew-imap-queue-folder))
 
332
 
 
333
(defun mew-imap-trash-folder (&optional case)
 
334
  (mew-cfent-value case "imap-trash-folder" mew-imap-trash-folder))
 
335
 
 
336
(defun mew-imap-trash-folder-list (&optional case)
 
337
  (mew-cfent-value case "imap-trash-folder-list" mew-imap-trash-folder-list))
 
338
 
 
339
(defun mew-header-alist (&optional case)
 
340
  (mew-cfent-value case "header-alist" mew-header-alist))
 
341
 
 
342
(defun mew-signature-file (&optional case)
 
343
  (mew-cfent-value case "signature-file" mew-signature-file))
 
344
 
 
345
(defun mew-content-type (&optional case)
 
346
  (mew-capitalize (mew-cfent-value case "content-type" mew-content-type)))
 
347
 
 
348
(defun mew-use-retrieve (&optional case)
 
349
  (mew-cfent-value case "use-retrieve" mew-use-retrieve))
 
350
 
 
351
(defun mew-imap-spam-field (&optional case)
 
352
  (mew-cfent-value case "imap-spam-field" mew-imap-spam-field))
 
353
 
 
354
(defun mew-imap-spam-word (&optional case)
 
355
  (mew-cfent-value case "imap-spam-word" mew-imap-spam-word))
 
356
 
 
357
;;
 
358
 
 
359
(defun mew-proto (&optional case)
 
360
  (mew-cfent-value case "proto" mew-proto))
 
361
 
 
362
;;
 
363
 
 
364
(defun mew-ssh-prog (&optional case)
 
365
  (mew-cfent-value case "ssh-prog" mew-ssh-prog))
 
366
 
 
367
(defun mew-ssh-prog-args (&optional case)
 
368
  (mew-cfent-value case "ssh-prog-args" mew-ssh-prog-args))
 
369
 
 
370
(defun mew-ssh-prog-ver (&optional case)
 
371
  (mew-cfent-value case "ssh-prog-ver" mew-ssh-prog-ver))
 
372
 
 
373
(defun mew-spam-prog (&optional case)
 
374
  (mew-cfent-value case "spam-prog" mew-spam-prog))
 
375
 
 
376
(defun mew-spam-prog-args (&optional case)
 
377
  (mew-cfent-value case "spam-prog-args" mew-spam-prog-args))
 
378
 
 
379
(defun mew-ham-prog (&optional case)
 
380
  (mew-cfent-value case "ham-prog" mew-ham-prog))
 
381
 
 
382
(defun mew-ham-prog-args (&optional case)
 
383
  (mew-cfent-value case "ham-prog-args" mew-ham-prog-args))
 
384
 
 
385
;;
 
386
 
 
387
(defun mew-refile-guess-alist (&optional case)
 
388
  (mew-cfent-value case "refile-guess-alist" mew-refile-guess-alist 'symbol))
 
389
 
 
390
;;
 
391
 
 
392
(defun mew-use-old-pgp (&optional case)
 
393
  (mew-cfent-value case "use-old-pgp" mew-use-old-pgp))
 
394
 
 
395
;;;
 
396
;;; Setting case
 
397
;;;
 
398
 
 
399
(defvar mew-case-input nil
 
400
  "\\<mew-summary-mode-map>This is used for
 
401
1. '\\[mew-summary-retrieve]' to select a POP server (or something)
 
402
2. Biff to select a server (or somthing)
 
403
3. If 'mew-use-case-input-completion' is non-nil, this value 
 
404
   is automatically inserted when inputing a folder>")
 
405
 
 
406
(defvar mew-case-output nil
 
407
  "This is used to
 
408
1. a draft. 
 
409
   It is used to complete Newsgroups, 
 
410
                 choose default Content-Type: for a file to be attached,
 
411
                 choose a signature file, 
 
412
                 select a SMTP server (or something).
 
413
2. flushing a message queue.")
 
414
 
 
415
(defun mew-case-set-both ()
 
416
  "Set the case both for input and output."
 
417
  (interactive)
 
418
  (let ((case (mew-input-case mew-case-input "Input/Output")))
 
419
    (setq mew-case-input case)
 
420
    (setq mew-case-output case)))
 
421
 
 
422
(defun mew-case-set-input ()
 
423
  "Set the case for input. If 'mew-case-synchronize' is
 
424
non-nil, set the case for output, too."
 
425
  (interactive)
 
426
  (if mew-case-synchronize
 
427
      (mew-case-set-both)
 
428
    (setq mew-case-input (mew-input-case mew-case-input "Input"))))
 
429
 
 
430
(defun mew-case-set-output ()
 
431
  "Set the case for output. If 'mew-case-synchronize' is
 
432
non-nil, set the case for input, too."
 
433
  (interactive)
 
434
  (if mew-case-synchronize
 
435
      (mew-case-set-both)
 
436
    (setq mew-case-output (mew-input-case mew-case-output "Output"))))
 
437
 
 
438
(defun mew-summary-set-case (&optional output)
 
439
  "Set the case. 
 
440
 (1) If 'mew-case-synchronize' is non-nil, set the case both for
 
441
 input and output.
 
442
 (2) If called with '\\[universal-argument]', set the case for output.
 
443
 (3) Otherwise, set the case for input."
 
444
  (interactive "P")
 
445
  (let (case inbox)
 
446
    (mew-summary-or-thread
 
447
     (if output
 
448
         (setq case (mew-case-set-output))
 
449
       (setq case (mew-case-set-input))))
 
450
    (save-excursion
 
451
      (let ((bufs mew-buffers))
 
452
        (while bufs
 
453
          (if (get-buffer (car bufs))
 
454
              (progn
 
455
                (set-buffer (car bufs))
 
456
                (cond
 
457
                 ((mew-summary-p)
 
458
                  (mew-summary-mode-name mew-mode-name-summary))
 
459
                 ((mew-virtual-p)
 
460
                  (mew-summary-mode-name mew-mode-name-virtual)))))
 
461
          (setq bufs (cdr bufs)))))
 
462
    (when mew-visit-inbox-after-setting-case
 
463
      (setq inbox (mew-case-folder
 
464
                   case
 
465
                   (mew-proto-inbox-folder (mew-proto case) case)))
 
466
      (mew-summary-visit-folder inbox))))
 
467
 
 
468
(defun mew-draft-set-case (&optional arg)
 
469
  "Guess case and set the case for output to it. The value is
 
470
locally stored in Draft mode. If called with '\\[universal-argument]',
 
471
you can modify the locally stored value. Then this command replace
 
472
fields in the header according to the new value."
 
473
  (interactive "P")
 
474
  (let ((old-case (mew-tinfo-get-case)) new-case)
 
475
    (if arg
 
476
        (setq new-case (mew-input-case old-case "This draft" 'edit))
 
477
      (setq new-case (mew-draft-get-case-by-guess))
 
478
      (if mew-case-guess-addition
 
479
          (setq new-case (mew-draft-add-case old-case new-case)))
 
480
      (setq new-case
 
481
            (mew-input-case (or new-case mew-case-output) "This draft")))
 
482
    (mew-tinfo-set-case new-case)
 
483
    (mew-draft-mode-name (mew-tinfo-get-hdr-file))
 
484
    (mew-draft-replace-fields old-case)
 
485
    (mew-highlight-header)
 
486
    (unless (mew-tinfo-get-hdr-file) (mew-draft-header-keymap))
 
487
    (save-buffer)))
 
488
 
 
489
(defun mew-draft-replace-fields (old-case)
 
490
  (save-excursion
 
491
    (goto-char (point-min))
 
492
    (let ((new-case (mew-tinfo-get-case))
 
493
          from dcc eoh)
 
494
      ;; (mew-header-end) cannot be used here
 
495
      (mew-header-goto-end)
 
496
      (setq eoh (point))
 
497
      (goto-char (point-min))
 
498
      (cond
 
499
       ((mew-draft-resent-p eoh)
 
500
        (setq from mew-resent-from:)
 
501
        ;; (setq cc mew-resent-cc:)
 
502
        (setq dcc mew-resent-dcc:))
 
503
       (t
 
504
        (setq from mew-from:)
 
505
        ;; (setq cc mew-cc:)
 
506
        (setq dcc mew-dcc:)))
 
507
      (mew-header-replace-value from (mew-from new-case))
 
508
      ;; (mew-header-replace-value cc (mew-cc new-case))
 
509
      (mew-header-replace-value dcc (mew-dcc new-case))
 
510
      (mew-header-replace-value mew-fcc: (mew-fcc new-case))
 
511
      (mew-header-replace-value mew-reply-to: (mew-reply-to new-case))
 
512
      (mew-header-replace-value mew-organization: (mew-organization new-case))
 
513
      (mew-header-delete-lines (mapcar 'car (mew-header-alist old-case)))
 
514
      (mew-header-delete-lines (mapcar 'car (mew-header-alist new-case)))
 
515
      (mew-header-delete-lines (list mew-x-mailer:))
 
516
      (mew-header-goto-end)
 
517
      (mew-draft-header-insert-alist (mew-header-alist new-case))
 
518
      ;; X-Mailer: must be the last
 
519
      (mew-draft-header-insert mew-x-mailer: mew-x-mailer))))
 
520
 
 
521
(defun mew-draft-get-case-by-guess (&optional alist)
 
522
  "Guess case according to 'mew-case-guess-alist'."
 
523
  (unless alist (setq alist mew-case-guess-alist))
 
524
  (let ((cases (mew-refile-guess-by-alist1 alist)))
 
525
    (if cases
 
526
        (mew-join "," cases)
 
527
      nil)))
 
528
 
 
529
(defun mew-draft-set-case-by-guess ()
 
530
  (let ((case (mew-draft-get-case-by-guess)))
 
531
    (when case
 
532
      (if mew-case-guess-addition
 
533
          (setq case (mew-draft-add-case (mew-tinfo-get-case) case)))
 
534
      (mew-tinfo-set-case case))))
 
535
 
 
536
(defun mew-draft-add-case (dst src)
 
537
  (if (mew-case-default-p dst)
 
538
      src
 
539
    (if (> (length src) 0)
 
540
        (mew-join
 
541
         "," (nreverse
 
542
              (mew-uniq-list (nreverse (mew-split (concat dst "," src) ?,)))))
 
543
      dst)))
 
544
 
 
545
(provide 'mew-config)
 
546
 
 
547
;;; Copyright Notice:
 
548
 
 
549
;; Copyright (C) 1999-2003 Mew developing team.
 
550
;; All rights reserved.
 
551
 
 
552
;; Redistribution and use in source and binary forms, with or without
 
553
;; modification, are permitted provided that the following conditions
 
554
;; are met:
 
555
;; 
 
556
;; 1. Redistributions of source code must retain the above copyright
 
557
;;    notice, this list of conditions and the following disclaimer.
 
558
;; 2. Redistributions in binary form must reproduce the above copyright
 
559
;;    notice, this list of conditions and the following disclaimer in the
 
560
;;    documentation and/or other materials provided with the distribution.
 
561
;; 3. Neither the name of the team nor the names of its contributors
 
562
;;    may be used to endorse or promote products derived from this software
 
563
;;    without specific prior written permission.
 
564
;; 
 
565
;; THIS SOFTWARE IS PROVIDED BY THE TEAM AND CONTRIBUTORS ``AS IS'' AND
 
566
;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
567
;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 
568
;; PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE TEAM OR CONTRIBUTORS BE
 
569
;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 
570
;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 
571
;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 
572
;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 
573
;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 
574
;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 
575
;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
576
 
 
577
;;; mew-config.el ends here