[Mew-Win32 01085] Re: ">" on draft
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
1998年 12月 14日 (月) 17:38:25 JST
白井です。
From: Toru Ito <ito at example.com> さん曰く
Subject: [Mew-Win32 01084] Re: ">" on draft
Message-ID: <19981214161839O.ito at example.com>
Date: Mon, 14 Dec 1998 16:18:39 +0900 (JST)
白井>;; .emacs に以下のものをどうぞ。"C-cL" で region に含まれるライン、
白井>;; あるいは、region 指定していないときは、次のラインとくっつけま
白井>;; す。また、そのとき、第1ラインで fill-prefix とみなすものが2ラ
白井>;; イン目以降にあったら消してつなげます。これは、emacs-19.28 や
白井>;; XEmacs でも動くかもしれないです。(未確認)
伊藤> こんな便利な物を作って下さっていたのですね!!
伊藤> ただ今試させて頂きました。
伊藤> 「これですよ、これ、私が欲しかったのは!!」
伊藤> って感じです。^^)v
おぉ、気に入ってくださった方が、まだいらしたとは……
# 私を含めて 3人目ですけどね。^^;
伊藤> どうして読み飛ばしたのかはちょっと分からないのですが、遅れ馳せながら
伊藤> ではありますが…御礼申し上げます。大変便利な物をありがとうございまし
伊藤> た。m(__)m
ML ではまったく反響が無かったので、その後、細々と改造していました。:-)
以前のままだとエラーが結構出るので、とりあえず最新版をお届けします。
もともと、個人的な趣味の領域に合わせて書いたので、全ての人の趣味
にはあっていないと思いますが、適当に改造して使ってください。
# はら@リコーさんの改造と指摘も含まれます。その節は TNX です。
;; fill-prefix 関連
(setq-default indent-line-function 'indent-relative-maybe)
(defun mew-auto-fill ()
"auto-fill-function に 自前のものを設定 ^^"
(interactive)
(setq auto-fill-function 'mew-draft-auto-fill-with-prefix))
;; (defvar mew-draft-prefix-regexp "\\(^[^ \t]*>[ \t]+[^ \t]*>[ \t]+\\)\\|\\(^[^ \t]*>[ \t]+[#;%/]+[ \t]+\\)\\|\\(^[^ \t]*>[ \t]+\\)\\|\\(^[ \t]*[#;%/]+[ \t]+\\)"
;; "prefix とみなす regexp")
(defvar mew-draft-prefix-regexp
"\\(^[^ \t]*>[ \t]+[^ \t]*>[ \t]+\\)\\|\\(^[^ \t]*>[ \t]+[#;%/]+[ \t]+\\)\\|\\(^[^ \t]*>[ \t]+\\)\\|\\(^[ \t]*[#;%/]+[ \t]+\\)"
"prefix とみなす regexp")
(defvar mew-draft-prefix-regexp2 "\\(^[0-9]+[\\.:]+[ \t]+\\)\\|\\(^・\\)\\|\\(([*0-9][0-9]*)[ \t]\\)"
"prefix とみなす regexp その2")
(defvar mew-draft-prefix-regexp3 "\\(^[0-9]+\\.[0-9]+\\.[ \t]+\\)"
"prefix とみなす regexp その3")
(defvar mew-draft-line-connect-insert-space t
"line をつなげるときに ASCII の前後に space を挿入")
(defvar mew-draft-line-connect-delete-space t
"line をつなげるときに ASCII 以外の前後の space を削除")
(defun mew-draft-auto-fill-with-prefix ()
(make-local-variable 'fill-prefix)
(if (and (eq major-mode 'mew-draft-mode) (mew-in-header-p))
(setq fill-prefix nil)
(save-excursion
(let (start end)
(beginning-of-line)
(setq start (point))
(end-of-line)
(save-restriction
(narrow-to-region start (point))
(beginning-of-line)
(if (looking-at mew-draft-prefix-regexp)
(setq fill-prefix (buffer-substring (match-beginning 0) (match-end 0)))
(beginning-of-line)
(if (looking-at mew-draft-prefix-regexp3)
(setq fill-prefix " ")
(if (looking-at mew-draft-prefix-regexp2)
(setq fill-prefix " ")
(setq fill-prefix nil))))
(widen)))))
(do-auto-fill)
(if (and (eq major-mode 'mew-draft-mode) (mew-in-header-p))
(save-excursion
(beginning-of-line)
(if (not (looking-at "[^ \t]+:\\|[ \t]"))
(insert "\t"))
)))
(defun mew-draft-line-connect (arg)
(interactive "P")
(save-excursion
(let (origin start end string-tmp fill-prefix-tmp len)
(if (or (and (boundp 'mark-active) mark-active)
(and (functionp 'region-exists-p) (region-exists-p)))
(progn
(setq start (region-beginning)
end (region-end))
(setq start (progn (goto-char start) (beginning-of-line) (point))
end (progn (goto-char end) (end-of-line) (point))))
(if arg
(setq end (progn (end-of-line) (point))
start (progn (forward-line -1) (beginning-of-line) (point)))
(setq start (progn (beginning-of-line) (point))
end (progn (forward-line 1) (end-of-line) (point)))))
(if (and (eq major-mode 'mew-draft-mode) (mew-in-header-p))
()
(goto-char start)
(if (looking-at mew-draft-prefix-regexp)
(setq fill-prefix-tmp
(buffer-substring (match-beginning 0) (match-end 0)))))
(save-restriction
(narrow-to-region start end)
(goto-char (point-min))
(while (search-forward "\n" nil t)
(delete-backward-char 1)
(if (and (eq major-mode 'mew-draft-mode) (mew-in-header-p))
()
(if (and fill-prefix-tmp
(looking-at (regexp-quote fill-prefix-tmp)))
(delete-region (match-beginning 0) (match-end 0)))
(condition-case err
(progn
(if mew-draft-line-connect-delete-space
(save-excursion
(setq origin (point))
(if (re-search-backward "[^ \t]" nil t)
(progn
(forward-char)
(setq start (point))
(if (re-search-forward "[^ \t]" nil t)
(progn
(backward-char)
(setq end (point))
(if (and
(= start origin)
(= end origin))
()
(delete-region start end))))))))
(if mew-draft-line-connect-insert-space
(save-excursion
(save-excursion
(setq start (progn (backward-char) (point))
end (progn (forward-char 2) (point))))
(setq string-tmp (buffer-substring start end))
(setq len (mew-charlen (mew-aref string-tmp 0)))
(let ((char0 (mew-aref string-tmp 0))
(char1 (mew-aref string-tmp len)))
(if (and
(not (string-match "[ \t]" string-tmp))
(or
(and (>= char0 ?!)
(<= char0 ?~))
(and (>= char1 ?!)
(<= char1 ?~)))
(not
(or
(= char0 (string-to-char "。"))
(= char0 (string-to-char "、"))
(= char0 (string-to-char "."))
(= char0 (string-to-char ","))
(= char0 (string-to-char "「"))
(= char0 (string-to-char "『"))
(= char0 (string-to-char "("))
(= char0 (string-to-char "〈"))
(= char0 (string-to-char "《"))
(= char0 (string-to-char "【"))
(= char0 (string-to-char "{"))
(= char0 (string-to-char "["))
(= char1 (string-to-char "。"))
(= char1 (string-to-char "、"))
(= char1 (string-to-char "."))
(= char1 (string-to-char ","))
(= char1 (string-to-char "」"))
(= char1 (string-to-char "』"))
(= char1 (string-to-char ")"))
(= char1 (string-to-char "〉"))
(= char1 (string-to-char "》"))
(= char1 (string-to-char "】"))
(= char1 (string-to-char "}"))
(= char1 (string-to-char "]")))))
(insert " ")))))
)
(error nil))
))
(widen)
))))
;; auto-fill 乗っ取り
(cond
((string-match "XEmacs" emacs-version)
(add-hook 'mew-draft-mode-hook
(function
(lambda ()
(make-local-variable 'auto-fill-funciton)
(setq auto-fill-function 'mew-draft-auto-fill-with-prefix)))))
(t
(eval-after-load
"mew"
'(fset 'mew-draft-auto-fill 'mew-draft-auto-fill-with-prefix))))
(add-hook 'mew-draft-mode-hook
'(lambda ()
(auto-fill-mode 1)
(setq fill-column 64)
(define-key mew-draft-body-map "\C-cl" 'mew-draft-line-connect)
))
(add-hook 'mew-caesar-xrot-mode-hook
'(lambda ()
(auto-fill-mode 1)
(setq fill-column 64)
(setq auto-fill-function
(function mew-draft-auto-fill-with-prefix))))
(defun mew-auto-fill-once ()
"auto-fill-function で 自前のものを指定行のみ実行"
(interactive)
(mew-draft-auto-fill-with-prefix))
(global-set-key "\C-cd" 'mew-auto-fill-once)
(global-set-key "\C-cl" 'mew-draft-line-connect)
(global-set-key "\C-c\C-l" 'mew-draft-line-connect)
--
白井秀行 (Hideyuki SHIRAI)
Mew-win32 メーリングリストの案内