[Mew-dist 14738] Re: i-mode

NARA Susumu nara at example.com
2000年 10月 24日 (火) 18:57:50 JST


NARA Susumu <nara at example.com>wrote in message
mail:<20001019.154136.74751680.nara at example.com>...
> > (1) バッファ内で Shift_JIS に符号化する
> > (2) バイト数を調べ超過しているなら、undo してユーザに警告
> > (3) OK なら、復号化し、さらに ISO-2022-JP 符号化して送る
> 
> 1の部分は、(decode-coding-region start end "Shift-JIS") してから数え
> てあげれば良いのかな。

emacs バッファ内をそのまま数えてあげれば良いみたいですね。間違ってるか
な?一応、友達の i-mode に送ってチェックしてみました。

--nara
-------------- next part --------------
;;; my-mew.el             -*-Emacs-Lisp-*-
;;; 
;;; $Id: my-mew.el,v 1.4 2000/10/24 06:10:47 nara Exp $

;;; Author: NARA Susumu <nara at example.com>
;;; Created: Oct 14, 2000
;;; Revised:

;;; Report bugs to <support at example.com>

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; 1. 送信前に文字数を表示します。
;;     (add-hook 'mew-send-hook 'my-mew-send) 
;; 
;; 2. 複数のコンフィグを使用していて、どの自分宛てのアドレスかによっ
;;     て、コンフィグを切替ます。
;;
;;     (setq my-mew-config-reply-from-list 
;;         '(("address1" . "config-name1")
;;           ("address2" . "config-name2"))) と設定した場合に
;;
;;     address1 ならば config-name1 に
;;     address2 ならば config-name2 に設定します。
;;
;;    また、キーマップを以下の様に置き換えて下さい。
;;    
;;    (add-hook 'mew-summary-mode-hook
;;              (function 
;;               (lambda ()
;;                 (define-key mew-summary-mode-map "a" 'my-mew-summary-reply)
;;                 (define-key mew-summary-mode-map "A" 
;;                                     'my-mew-summary-reply-with-citation))))
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Code:

(defvar my-mew-config-reply-from-list nil)
(defvar my-mew-draft-set-config-query nil)

(defun my-mew-summary-reply (&optional onlytofrom)
  "自分専用リプライ関数(引用なし)"
  (interactive)
  (mew-summary-analyze-again t)
  (mew-summary-reply onlytofrom)
  (my-mew-draft-set-auto-config))

(defun my-mew-summary-reply-with-citation (&optional onlytofrom)
  "自分専用リプライ関数(引用あり)"
  (interactive)
  (mew-summary-analyze-again t)
  (mew-summary-reply-with-citation onlytofrom)
  (my-mew-set-draft-position)
  (if (eq (char-after) 10)
      (delete-char 1))
  (my-mew-draft-set-auto-config))

(defun my-mew-send ()
  "送信する前に文字数を表示します。i-mode, c-mail等に便利
usage: (add-hook 'mew-send-hook 'my-mew-send)"
  (interactive)
  (save-excursion
    (let (start end mes)
      (run-hooks 'my-mew-send-hook)
      (my-mew-set-draft-position)
      (setq start (point))
      (goto-char (point-max))
      (setq end (point))
;      (setq mes (count-lines-region start end))
      (setq mes (my-mew-send-data-count start end))
      (if (y-or-n-p (format "%s" (concat "Really send this message? (" mes ") ")))
          (setq mew-ask-send nil)
        (setq mew-ask-send t)))))
                    
(defun my-mew-send-data-count (start end)
  "送信メッセージの文字を数えます"
  (interactive "r")
  (let (byte)
    (setq byte 0)
    (goto-char start)
    (while (< (point) end)
      (end-of-line 1)
      (setq byte (+ byte (current-column)))
      (if (not (eobp))
          (forward-char 1)))
    (message "%d line, %d char, %d code"
             (count-lines start end) (- end start)
             (+ (* (count-lines start end) 2) byte))))

(defun my-mew-set-draft-position ()
  "リプライ時にドラフト位置を先頭に移動します"
  (interactive)
  (goto-char (point-min))
  (if (re-search-forward "\\(^----$\\)" nil t)
      (if (match-beginning 1)
          (progn
            (goto-char (match-end 1))
            ;;(next-line 1)
            (forward-char 1)))))

(defun my-member-compare (lsta lstb)
  "ex: (my-member-compre list-a list-b)"
  (catch 'found
    (while
        (if (member (car lsta) lstb)
            (throw 'found (car (member (car lsta) lstb)))
          (setq lsta (cdr lsta))))))

(defun my-mew-draft-set-auto-config ()
  "リプライ時に自分の送信アドレスによってコンフィグを設定します。To: 
をチェックし、次に Cc: をチェックします。複数あった場合には先頭のみで
す。

  (setq my-mew-config-reply-from-list 
      '((\"address1\" . \"config-name1\")
        (\"address2\" . \"config-name2\")))"
  (interactive)
  (let (lst from to cc)
    (save-excursion
      (if (get-buffer "*Mew message*")
          (set-buffer "*Mew message*")
        (if (get-buffer "*Mew message*0")
            (set-buffer "*Mew message*0")))
      ;;(setq to (mew-header-parse-address mew-to:))
      ;;(setq cc (mew-header-parse-address mew-cc:))
      (setq lst (mapcar (function car) my-mew-config-reply-from-list))
      (setq to (my-member-compare
                (mew-header-parse-address-list2 mew-fromme-to-list) lst))
      (setq cc (my-member-compare
                (mew-header-parse-address-list2 mew-fromme-cc-list) lst)))
    (if to
        (setq from to)
      (if cc
          (setq from cc)))
    (if from
        (mew-draft-set-config-with-arg 
         (cdr (assoc from my-mew-config-reply-from-list)))
      (if my-mew-draft-set-config-query
          (mew-draft-set-config)
        (mew-draft-set-config-with-arg "default")))))

(defun mew-draft-set-config-with-arg (config)
  "mew-draft-set-config のパラメータ版"
  (interactive)
  (let ((old-config mew-draft-buffer-config))
    (setq mew-draft-buffer-config config)
;;	  (mew-input-config mew-config-output "This draft"))
    (mew-draft-mode-name mew-header-message)
    (save-excursion
      (goto-char (point-min))
      (let ((new-config mew-draft-buffer-config) ;; save length
	    from cc dcc)
	(cond
	 ((re-search-forward "^Resent" (mew-header-end) t)
	  (setq from mew-resent-from:)
	  (setq cc   mew-resent-cc:)
	  (setq dcc  mew-resent-dcc:))
	 (t
	  (setq from mew-from:)
	  (setq cc   mew-cc:)
	  (setq dcc  mew-dcc:)))
	(mew-header-replace-value from (mew-from new-config))
;;	(mew-header-replace-value cc   (mew-cc   new-config))
	(mew-header-replace-value dcc  (mew-dcc  new-config))
	(mew-header-replace-value mew-fcc:      (mew-fcc new-config))
	(mew-header-replace-value mew-reply-to: (mew-reply-to new-config))
	(mew-header-delete-lines
	 (mapcar (function car) (mew-header-alist old-config)))
	(mew-header-goto-end)
	(mew-draft-header-insert-alist
	 (mew-header-alist mew-draft-buffer-config))
	(mew-highlight-header)
	(if (null mew-header-message) (mew-draft-header-keymap)))
      (save-buffer))))

;;; ends here


Mew-dist メーリングリストの案内