[mew-dist 27893] Re: GMail の IMAP
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2007年 11月 21日 (水) 18:09:25 JST
白井さん、
> クリックすると mouse-choose-completion() が呼ばれるようです。最終的に
> choose-completion-string-functions が呼ばれるので、これをバッファローカ
> ルな関数として定義するとうまく行く気がします。。。
こんな感じでいかがですか?
--かず
Index: mew-complete.el
===================================================================
RCS file: /cvsroot/mew/mew/mew-complete.el,v
retrieving revision 1.73
diff -c -r1.73 mew-complete.el
*** mew-complete.el 4 Jan 2007 06:49:08 -0000 1.73
--- mew-complete.el 21 Nov 2007 09:08:17 -0000
***************
*** 41,47 ****
(defvar mew-complete-candidates nil)
! (defun mew-complete-window-delete ()
(when (mew-ainfo-get-win-cfg)
;; (mew-ainfo-get-win-cfg) remains when the last completion
;; finished with multiple candidates.
--- 41,47 ----
(defvar mew-complete-candidates nil)
! (defun mew-complete-window-delete (&optional force)
(when (mew-ainfo-get-win-cfg)
;; (mew-ainfo-get-win-cfg) remains when the last completion
;; finished with multiple candidates.
***************
*** 52,63 ****
;; (mew-ainfo-get-win-cfg), the cursor jumps to mini buffer.
;; This was a stupid bug of Mew. So, let's see if the complete
;; buffer is displayed or not.
! (if (get-buffer-window mew-buffer-completions)
(set-window-configuration (mew-ainfo-get-win-cfg)))
(mew-ainfo-set-win-cfg nil))
(mew-remove-buffer mew-buffer-completions)
(setq mew-complete-candidates nil))
(defun mew-complete-window-show (all)
(unless (mew-ainfo-get-win-cfg)
(mew-ainfo-set-win-cfg (current-window-configuration)))
--- 52,76 ----
;; (mew-ainfo-get-win-cfg), the cursor jumps to mini buffer.
;; This was a stupid bug of Mew. So, let's see if the complete
;; buffer is displayed or not.
! (if (or force (get-buffer-window mew-buffer-completions))
(set-window-configuration (mew-ainfo-get-win-cfg)))
(mew-ainfo-set-win-cfg nil))
(mew-remove-buffer mew-buffer-completions)
(setq mew-complete-candidates nil))
+ (defun mew-complete-insert-folder-function (choice buffer mini-p base-size)
+ (let ((start (minibuffer-prompt-end)))
+ (if (and (/= start (point))
+ (char-equal (char-before) (aref choice 0)))
+ (progn
+ (forward-char -1)
+ (delete-char 1))
+ (delete-region start (point-max)))
+ (insert choice)
+ (remove-text-properties start (point-max) '(mouse-face nil))
+ (mew-complete-window-delete 'force)
+ t))
+
(defun mew-complete-window-show (all)
(unless (mew-ainfo-get-win-cfg)
(mew-ainfo-set-win-cfg (current-window-configuration)))
***************
*** 70,77 ****
(set-window-start win 1)
(scroll-other-window))))
(setq mew-complete-candidates all)
! (with-output-to-temp-buffer
! mew-buffer-completions
(display-completion-list all))))
(defun mew-complete-backscroll ()
--- 83,93 ----
(set-window-start win 1)
(scroll-other-window))))
(setq mew-complete-candidates all)
! (with-output-to-temp-buffer mew-buffer-completions
! (when mew-inherit-complete-folder
! (make-local-variable 'choose-completion-string-functions)
! (add-hook 'choose-completion-string-functions
! 'mew-complete-insert-folder-function))
(display-completion-list all))))
(defun mew-complete-backscroll ()
***************
*** 179,185 ****
(mew-input-folder-search-complete)
(mew-draft-set-completion-ignore-case mew-complete-folder-ignore-case)
(let ((word (mew-delete-backward-char))
! (completion-ignore-case mew-complete-folder-ignore-case))
(if (null word)
(mew-complete-window-show (list "+"))
(if (and (mew-folder-absolutep word)
--- 195,202 ----
(mew-input-folder-search-complete)
(mew-draft-set-completion-ignore-case mew-complete-folder-ignore-case)
(let ((word (mew-delete-backward-char))
! (completion-ignore-case mew-complete-folder-ignore-case)
! (mew-inherit-complete-folder t))
(if (null word)
(mew-complete-window-show (list "+"))
(if (and (mew-folder-absolutep word)
***************
*** 200,206 ****
(mew-complete-folder2)))
(defun mew-input-folder-search-complete ()
! (let (keys)
(save-excursion
(set-buffer mew-input-folder-search-buf)
(save-excursion
--- 217,224 ----
(mew-complete-folder2)))
(defun mew-input-folder-search-complete ()
! (let ((mew-inherit-complete-folder t)
! keys)
(save-excursion
(set-buffer mew-input-folder-search-buf)
(save-excursion
***************
*** 216,221 ****
--- 234,240 ----
(defun mew-complete-folder2 ()
(let ((word (mew-delete-backward-char nil ", \t\n"))
(completion-ignore-case mew-complete-folder-ignore-case)
+ (mew-inherit-complete-folder t)
case folder)
(cond
((null word)
***************
*** 273,279 ****
(if mew-input-folder-search-direction
(mew-input-folder-search-complete)
(let ((word (mew-delete-backward-char))
! (completion-ignore-case mew-complete-folder-ignore-case))
(if (null word)
(mew-complete-window-show (list "%"))
(mew-complete
--- 292,299 ----
(if mew-input-folder-search-direction
(mew-input-folder-search-complete)
(let ((word (mew-delete-backward-char))
! (completion-ignore-case mew-complete-folder-ignore-case)
! (mew-inherit-complete-folder t))
(if (null word)
(mew-complete-window-show (list "%"))
(mew-complete
Index: mew-const.el
===================================================================
RCS file: /cvsroot/mew/mew/mew-const.el,v
retrieving revision 1.87
diff -c -r1.87 mew-const.el
*** mew-const.el 13 Apr 2007 12:24:46 -0000 1.87
--- mew-const.el 21 Nov 2007 09:08:17 -0000
***************
*** 340,345 ****
--- 340,346 ----
(defconst mew-inherit-pick-omit-and nil)
(defconst mew-inherit-pick-omit-and2 nil)
(defconst mew-inherit-submission nil)
+ (defconst mew-inherit-complete-folder nil)
(provide 'mew-const)
Mew-dist メーリングリストの案内