[mew-dist 27909] Re: GMail の IMAP

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2007年 11月 30日 (金) 17:15:34 JST


From: Kazu Yamamoto (山本和彦) <kazu at example.com> さん曰く
Subject: [mew-dist 27908] Re: GMail の IMAP
Message-ID: <20071130.163856.84923571.kazu at example.com>
Date: Fri, 30 Nov 2007 16:38:56 +0900 (JST)

> > えっと、mew-complete-insert-folder-function() はもうちょっと高機
> > 能(*1)にした方が良いと思われるのでやってみました。ほとんど Emacs
> > 標準の choose-completion-string() と同じ動きになっているかなぁ?

> これじゃダメですか?

> (defun mew-complete-insert-folder-function (choice buffer mini-p base-size)
> ....
> 	(delete-region (match-end 1) (point-max))
>       (delete-region (point) (point-max)))
> ....

これだと、複数のフォルダを指定できる入力のとき、気が変わって前の
フォルダの入力部分に戻って、ちょっと編集して

Folder name (+inbox): +folder1,+ho,+folder3
                                 ↑

の部分に point をおいて TAB で補完候補ウインドウを出してマウスで
選択したときに、後半の「,+folder3」の部分まで消えちゃうのでだめ
です。

# 結構実験したのでした。
# まぁ、あんまりやらないでしょうけどね ;-p

> なんか無駄に一時バッファを使っていると思うのは気のせいでしょうか?

そのため、すでに複数のフォルダが minibuffer に書かれていたときの
対処が面倒だったので補完対象とするフォルダ部分だけを抜き出したわ
けです。

だけど、今考え直したら marker 使えば全然大丈夫ですね。かずさんの
をちょっとだけ変更してみました。

(defun mew-complete-insert-folder-function (choice buffer mini-p base-size)
  (let ((start (mew-minibuf-point-min))
	(proto (substring choice 0 1))
	(pos (point-marker)))
    (while (not (or (= start (point))
		    (not (char-before))
		    (char-equal (char-before) ?,)))
      (forward-char -1))
    (if (and (member proto mew-folder-prefixes)
	     (looking-at (concat "\\("
				 (regexp-opt mew-config-cases t)
				 ":\\)"
				 (regexp-quote proto))))
	(delete-region (match-end 1) pos)
      (delete-region (point) pos))
    (goto-char pos)
    (insert choice)
    (remove-text-properties start (point-max) '(mouse-face nil))
    (mew-complete-window-delete 'force)
    t))

-- 
白井秀行 (mailto:shirai at example.com)
## そっか mew-folder-prefixes かぁ。忘れていた。。。



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