[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

yet another isearch with ime



矢木です。

ekb-isearch ではやっぱり確定前の文字列が検索中のウィンドウに出てきて
気持悪いので確定前の文字列がミニバッファに表示されるようにしてみました。

# 久しぶりに mule for win32 を使う機会があって
# MuleWin32.desc を見て compend の意味を知った。

おわり

;;; isearch-fep.el

(defconst isearch-fep-title "IME")

(defconst isearch-fep-minibuffer-local-map
  (let ((map (make-keymap)))
    (let ((i 0))
      (while (< i 32)
	(define-key map (vector i) 'exit-minibuffer)
	(setq i (1+ i))))
    (define-key map [127] 'exit-minibuffer)
    (define-key map [t] 'exit-minibuffer)
    (define-key map [compend] 'isearch-fep-quit)
    (define-key map [kanji] 'isearch-fep-quit)
    map))

(defvar isearch-fep-quit-flag nil)
(defun isearch-fep-quit ()
  (interactive)
  (setq isearch-fep-quit-flag t)
  (exit-minibuffer))

(defvar isearch-fep-update-mode-line-function
  (cond ((and (eq system-type 'windows-nt)
	      (eq window-system 'w32)
	      (featurep 'meadow))
	 (lookup-key global-map [kanji]))
	(t 'ignore)))
(defun isearch-fep-update-mode-line ()
  (funcall isearch-fep-update-mode-line-function))

(defun isearch-fep ()
  (interactive)
  (isearch-fep-update-mode-line)
  (if (not (fep-get-mode))
      (isearch-message)
    (let ((mw32-ime-buffer-switch-p nil)
	  (overriding-terminal-local-map nil)
	  str)
      (while (and isearch-mode (fep-get-mode))
	(setq isearch-fep-quit-flag nil)
	(setq str (read-from-minibuffer
		   (concat
		    (let ((current-input-method t)
			  (current-input-method-title isearch-fep-title))
		      (isearch-message-prefix))
		    isearch-message)
		   nil isearch-fep-minibuffer-local-map))
	(if (not isearch-fep-quit-flag)
	    (let ((c (lookup-key isearch-mode-map (this-command-keys))))
	      (if (commandp c)
		  (call-interactively c)
		(message "unknown key: %s" (this-command-keys)))
	      )
	  (if (and str (> (length str) 0))
	      (let ((unread-command-events nil)
		    (l (string-to-list str))
		    s)
		(while l
		  (setq s (char-to-string (car l))
			l (cdr l))
		  (isearch-process-search-string s s)))
	    (isearch-update))))))
  (isearch-fep-update-mode-line))

(define-key isearch-mode-map [kanji] 'isearch-fep)

(add-hook 'isearch-mode-hook 'isearch-fep)

(provide 'isearch-fep)

;;; isearch-fep.el ends here