- (catch 'tag
- (let ((r signature-file-alist) cell b f)
- (save-excursion
- (save-restriction
- (narrow-to-region
- (point-min)
- (progn
- (goto-char (point-min))
- (if (re-search-forward
- (concat "^" (regexp-quote mail-header-separator) "$")
- nil t)
- (match-beginning 0)
- (point-max)
- )))
- (while r
- (setq cell (car r))
- (setq b (car cell))
- (if (setq f (rfc822/get-field-body (car b)))
- (cond ((listp (cdr b))
- (let ((r (cdr b)))
- (while r
- (if (string-match (car r) f)
- (throw 'tag
- (concat
- signature-file-prefix (cdr cell)))
- )
- (setq r (cdr r))
- ))
- )
- ((stringp (cdr b))
- (if (string-match (cdr b) f)
- (throw 'tag
- (concat
- signature-file-prefix (cdr cell)))
- ))
- ((functionp (cdr b))
- (let ((name (apply (cdr b) f (cdr cell))))
- (if name
- (throw 'tag
- (concat signature-file-prefix name))
- )))
- ))
- (setq r (cdr r))
- ))
- signature-file-name))))
-
-(defun signature/insert-signature-at-point (&optional arg)
- "Insert the file named by signature-file-name at the current point."
- (interactive "P")
- (let ((signature
- (expand-file-name
- (if arg
- (read-file-name "Insert your signature: "
- (concat signature-file-name "-")
- signature-file-name
- nil)
- (signature/get-signature-file-name)))))
- (insert-file-contents signature)
- (set-buffer-modified-p (buffer-modified-p)) ; force mode line update
- signature))
-
-(defun signature/insert-signature-at-eof (&optional arg)
- "Insert the file named by signature-file-name at the end of file."
- (interactive "P")
- (let ((signature
- (expand-file-name
- (if arg
- (read-file-name "Insert your signature: "
- (concat signature-file-name "-")
- signature-file-name
- nil)
- (signature/get-signature-file-name)))))
- (if (file-readable-p signature)
- (progn
- (goto-char (point-max))
- (if (not (bolp))
- (insert "\n"))
- (if signature-delete-blank-lines-at-eof (delete-blank-lines))
- (insert-file-contents signature)
- (set-buffer-modified-p (buffer-modified-p))
- ; force mode line update
- ))
- signature))
+ (save-excursion
+ (save-restriction
+ (narrow-to-region
+ (goto-char (point-min))
+ (if (re-search-forward
+ (concat "^" (regexp-quote mail-header-separator) "$")
+ nil t)
+ (match-beginning 0)
+ (point-max)
+ ))
+ (catch 'found
+ (let ((alist signature-file-alist) cell field value)
+ (while alist
+ (setq cell (car alist)
+ field (std11-field-body (car (car cell)))
+ value (cdr (car cell)))
+ (cond ((functionp value)
+ (let ((name (apply value field (cdr cell))))
+ (if name
+ (throw 'found
+ (concat signature-file-prefix name))
+ )))
+ ((stringp field)
+ (cond ((consp value)
+ (while value
+ (if (string-match (car value) field)
+ (throw 'found
+ (concat
+ signature-file-prefix (cdr cell)))
+ (setq value (cdr value))
+ )))
+ ((stringp value)
+ (if (string-match value field)
+ (throw 'found
+ (concat
+ signature-file-prefix (cdr cell)))
+ )))))
+ (setq alist (cdr alist))
+ ))
+ signature-file-name))))