X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lsdb.el;h=b3db207f0976e0c9a954e115f21cbf812f47803a;hb=ca4a316fdb2c5188a089f3192cde4a6f162b5ba8;hp=c2983098c944aae75ea54ec16020543802b4bc82;hpb=a4512d129ff516b7b613fe9daec7969e0b145842;p=elisp%2Flsdb.git diff --git a/lsdb.el b/lsdb.el index c298309..b3db207 100644 --- a/lsdb.el +++ b/lsdb.el @@ -53,7 +53,7 @@ ;;; (define-key mew-draft-header-map "\M-I" 'lsdb-complete-name))) ;;; (add-hook 'mew-summary-mode-hook ;;; (lambda () -;;; (define-key mew-summary-mode-map ":" 'lsdb-toggle-buffer))) +;;; (define-key mew-summary-mode-map "l" 'lsdb-toggle-buffer))) ;;; Code: @@ -167,6 +167,12 @@ The updated record is passed to each function as the argument." :group 'lsdb :type 'integer) +(defcustom lsdb-x-face-image-type nil + "A image type of displayed x-face. +If non-nil, supersedes the return value of `lsdb-x-face-available-image-type'." + :group 'lsdb + :type 'symbol) + (defcustom lsdb-x-face-command-alist '((pbm "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pnmscale 0.5") (xpm "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pnmscale 0.5 | ppmtoxpm")) @@ -729,6 +735,7 @@ This is the current number of slots in HASH-TABLE, whether occupied or not." (defvar lsdb-last-completion nil) (defvar lsdb-last-candidates nil) (defvar lsdb-last-candidates-pointer nil) +(defvar lsdb-complete-marker nil) ;;;_ : Matching Highlight (defvar lsdb-last-highlight-overlay nil) @@ -747,9 +754,10 @@ This is the current number of slots in HASH-TABLE, whether occupied or not." 'underline)))) (defun lsdb-complete-name-highlight-update () - (unless (eq 'this-command 'lsdb-complete-name) + (unless (eq this-command 'lsdb-complete-name) (if lsdb-last-highlight-overlay (delete-overlay lsdb-last-highlight-overlay)) + (set-marker lsdb-complete-marker nil) (remove-hook 'pre-command-hook 'lsdb-complete-name-highlight-update t))) @@ -758,11 +766,15 @@ This is the current number of slots in HASH-TABLE, whether occupied or not." "Complete the user full-name or net-address before point" (interactive) (lsdb-maybe-load-hash-tables) + (unless (markerp lsdb-complete-marker) + (setq lsdb-complete-marker (make-marker))) (let* ((start - (save-excursion - (re-search-backward "\\(\\`\\|[\n:,]\\)[ \t]*") - (goto-char (match-end 0)) - (point))) + (or (and (eq (marker-buffer lsdb-complete-marker) (current-buffer)) + (marker-position lsdb-complete-marker)) + (save-excursion + (re-search-backward "\\(\\`\\|[\n:,]\\)[ \t]*") + (goto-char (match-end 0)) + (point)))) pattern (case-fold-search t) (completion-ignore-case t)) @@ -933,7 +945,7 @@ Modify whole identification by side effect." (let ((end (next-single-property-change (point) 'lsdb-record nil (point-max)))) (narrow-to-region - (previous-single-property-change (point) 'lsdb-record nil (point-min)) + (previous-single-property-change end 'lsdb-record nil (point-min)) end) (goto-char (point-min)))) @@ -1092,7 +1104,7 @@ It partially emulates the GNU Emacs' of `quit-window'." (delete-window window)) (if kill (kill-buffer buffer) - (bury-buffer buffer)))) + (bury-buffer (unless (eq buffer (current-buffer)) buffer))))) (defun lsdb-hide-buffer () "Hide the LSDB window." @@ -1360,7 +1372,9 @@ always hide." (autoload 'mew-current-get-fld "mew") (autoload 'mew-current-get-msg "mew") (autoload 'mew-frame-id "mew") - (autoload 'mew-cache-hit "mew")) + (autoload 'mew-cache-hit "mew") + (autoload 'mew-xinfo-get-decode-err "mew") + (autoload 'mew-xinfo-get-action "mew")) ;;;###autoload (defun lsdb-mew-insinuate () @@ -1372,22 +1386,33 @@ always hide." (lsdb-hide-buffer)))) (add-hook 'mew-suspend-hook 'lsdb-hide-buffer) (add-hook 'mew-quit-hook 'lsdb-mode-save) - (add-hook 'kill-emacs-hook 'lsdb-mode-save)) + (add-hook 'kill-emacs-hook 'lsdb-mode-save) + (cond + ;; Mew 3 + ((fboundp 'mew-summary-visit-folder) + (defadvice mew-summary-visit-folder (before lsdb-hide-buffer activate) + (lsdb-hide-buffer))) + ;; Mew 2 + ((fboundp 'mew-summary-switch-to-folder) + (defadvice mew-summary-switch-to-folder (before lsdb-hide-buffer activate) + (lsdb-hide-buffer))))) (defun lsdb-mew-update-record () (let* ((fld (mew-current-get-fld (mew-frame-id))) (msg (mew-current-get-msg (mew-frame-id))) - (cache (mew-cache-hit fld msg 'must-hit)) + (cache (mew-cache-hit fld msg)) records) - (save-excursion - (set-buffer cache) - (make-local-variable 'lsdb-decode-field-body-function) - (setq lsdb-decode-field-body-function - (lambda (body name) - (set-text-properties 0 (length body) nil body) - body)) - (when (setq records (lsdb-update-records)) - (lsdb-display-record (car records)))))) + (when cache + (save-excursion + (set-buffer cache) + (unless (or (mew-xinfo-get-decode-err) (mew-xinfo-get-action)) + (make-local-variable 'lsdb-decode-field-body-function) + (setq lsdb-decode-field-body-function + (lambda (body name) + (set-text-properties 0 (length body) nil body) + body)) + (when (setq records (lsdb-update-records)) + (lsdb-display-record (car records)))))))) ;;;_. Interface to MU-CITE (eval-when-compile @@ -1538,7 +1563,8 @@ the user wants it." 'lsdb-record record))))) (defun lsdb-insert-x-face-asynchronously (x-face) - (let* ((type (lsdb-x-face-available-image-type)) + (let* ((type (or lsdb-x-face-image-type + (lsdb-x-face-available-image-type))) (shell-file-name lsdb-shell-file-name) (shell-command-switch lsdb-shell-command-switch) (process-connection-type nil) @@ -1574,7 +1600,7 @@ the user wants it." (provide 'lsdb) (product-provide 'lsdb - (product-define "LSDB" nil '(0 5))) + (product-define "LSDB" nil '(0 7))) ;;;_* Local emacs vars. ;;; The following `outline-layout' local variable setting: