From: Stefan Monnier Date: Sat, 28 May 2011 01:33:10 +0000 (-0300) Subject: * lisp/info-look.el: Convert to lexical-binding and completion-at-point. X-Git-Tag: emacs-pretest-24.0.90~104^2~618^2~131 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=423428a80c423a32727ad1e01442b020835fb92b;p=emacs.git * lisp/info-look.el: Convert to lexical-binding and completion-at-point. (info-lookup-completions-at-point): New function. (info-complete): Use it and completion-in-region. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 03af0adf999..d2b495ae669 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-05-28 Stefan Monnier + + * info-look.el: Convert to lexical-binding and completion-at-point. + (info-lookup-completions-at-point): New function. + (info-complete): Use it and completion-in-region. + 2011-05-28 Drew Adams * isearch.el: Let M-e start with point at the first mismatched char. diff --git a/lisp/info-look.el b/lisp/info-look.el index 5e51fcc9b9d..26a89ca956e 100644 --- a/lisp/info-look.el +++ b/lisp/info-look.el @@ -1,4 +1,4 @@ -;;; info-look.el --- major-mode-sensitive Info index lookup facility +;;; info-look.el --- major-mode-sensitive Info index lookup facility -*- lexical-binding: t -*- ;; An older version of this was known as libc.el. ;; Copyright (C) 1995-1999, 2001-2011 Free Software Foundation, Inc. @@ -357,7 +357,7 @@ If optional argument QUERY is non-nil, query for the help mode." (setq node (nth 0 (car doc-spec)) prefix (nth 2 (car doc-spec)) suffix (nth 3 (car doc-spec))) - (when (condition-case error-data + (when (condition-case nil (progn ;; Don't need Index menu fontifications here, and ;; they slow down the lookup. @@ -473,7 +473,7 @@ If optional argument QUERY is non-nil, query for the help mode." (t (nth 1 (car doc-spec))))) (with-current-buffer buffer (message "Processing Info node `%s'..." node) - (when (condition-case error-data + (when (condition-case nil (progn (Info-goto-node node) (setq doc-found t)) @@ -641,44 +641,41 @@ Return nil if there is nothing appropriate in the buffer near point." info-lookup-mode (info-lookup-change-mode 'file))))) +(defun info-lookup-completions-at-point (topic mode) + "Try to complete a help item." + (or mode (setq mode (info-lookup-select-mode))) + (when (info-lookup->mode-value topic mode) + (let ((modes (info-lookup-quick-all-modes topic mode)) + (start (point)) + try) + (while (and (not try) modes) + (setq mode (car modes) + modes (cdr modes) + try (info-lookup-guess-default* topic mode)) + (goto-char start)) + (when try + (let ((completions (info-lookup->completions topic mode))) + (when completions + (when (info-lookup->ignore-case topic mode) + (setq completions + (lambda (string pred action) + (let ((completion-ignore-case t)) + (complete-with-action + action completions string pred))))) + (save-excursion + ;; Find the original symbol and zap it. + (end-of-line) + (while (and (search-backward try nil t) + (< start (point)))) + (list (match-beginning 0) (match-end 0) completions)))))))) + (defun info-complete (topic mode) "Try to complete a help item." (barf-if-buffer-read-only) - (or mode (setq mode (info-lookup-select-mode))) - (or (info-lookup->mode-value topic mode) - (error "No %s completion available for `%s'" topic mode)) - (let ((modes (info-lookup-quick-all-modes topic mode)) - (start (point)) - try) - (while (and (not try) modes) - (setq mode (car modes) - modes (cdr modes) - try (info-lookup-guess-default* topic mode)) - (goto-char start)) - (and (not try) - (error "Found no %S to complete" topic)) - (let ((completions (info-lookup->completions topic mode)) - (completion-ignore-case (info-lookup->ignore-case topic mode)) - completion) - (setq completion (try-completion try completions)) - (cond ((not completion) - (ding) - (message "No match")) - ((stringp completion) - (or (assoc completion completions) - (setq completion (completing-read - (format "Complete %S: " topic) - completions nil t completion - info-lookup-history))) - ;; Find the original symbol and zap it. - (end-of-line) - (while (and (search-backward try nil t) - (< start (point)))) - (replace-match "") - (insert completion)) - (t - (message "%s is complete" - (capitalize (prin1-to-string topic)))))))) + (let ((data (info-lookup-completions-at-point topic mode))) + (if (null data) + (error "No %s completion available for `%s' at point" topic mode) + (apply #'completion-in-region data)))) ;;; Initialize some common modes.