[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 メーリングリストの案内