[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/complete.el,v
From: |
Glenn Morris |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/complete.el,v |
Date: |
Tue, 27 Mar 2007 03:17:42 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Changes by: Glenn Morris <gm> 07/03/27 03:17:42
Index: complete.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/complete.el,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -b -r1.67 -r1.68
--- complete.el 21 Mar 2007 19:23:12 -0000 1.67
+++ complete.el 27 Mar 2007 03:17:42 -0000 1.68
@@ -743,13 +743,25 @@
(and completion-auto-help
(eq last-command this-command))
(eq mode 'help))
+ (let ((prompt-end (minibuffer-prompt-end)))
(with-output-to-temp-buffer "*Completions*"
(display-completion-list (sort helpposs 'string-lessp))
(with-current-buffer standard-output
;; Record which part of the buffer we are completing
;; so that choosing a completion from the list
;; knows how much old text to replace.
- (setq completion-base-size dirlength)))
+ ;; This was briefly nil in the non-dirname case.
+ ;; However, if one calls PC-lisp-complete-symbol
+ ;; on "(ne-f" with point on the hyphen, PC offers
+ ;; all completions starting with "(ne", some of
+ ;; which do not match the "-f" part (maybe it
+ ;; should not, but it does). In such cases,
+ ;; completion gets confused trying to figure out
+ ;; how much to replace, so we tell it explicitly
+ ;; (ie, the number of chars in the buffer before
beg).
+ (setq completion-base-size (if dirname
+ dirlength
+ (- beg prompt-end))))))
(PC-temp-minibuffer-message " [Next char not unique]"))
nil)))))
@@ -799,6 +811,8 @@
(setq quit-flag nil
unread-command-events '(7))))))))
+(defvar PC-lisp-complete-end nil
+ "Internal variable used by `PC-lisp-complete-symbol'.")
(defun PC-lisp-complete-symbol ()
"Perform completion on Lisp symbol preceding point.
@@ -825,7 +839,37 @@
(or (boundp sym) (fboundp sym)
(symbol-plist sym))))))
(PC-not-minibuffer t))
- (PC-do-completion nil beg end)))
+ ;; http://lists.gnu.org/archive/html/emacs-devel/2007-03/msg01211.html
+ ;;
+ ;; This deals with cases like running PC-l-c-s on "M-: (n-f".
+ ;; The first call to PC-l-c-s expands this to "(ne-f", and moves
+ ;; point to the hyphen [1]. If one calls PC-l-c-s immediately after,
+ ;; then without the last-command check, one is offered all
+ ;; completions of "(ne", which is presumably not what one wants.
+ ;;
+ ;; This is arguably (at least, it seems to be the existing intended
+ ;; behaviour) what one _does_ want if point has been explicitly
+ ;; positioned on the hyphen. Note that if PC-do-completion (qv) binds
+ ;; completion-base-size to nil, then completion does not replace the
+ ;; correct amount of text in such cases.
+ ;;
+ ;; Neither of these problems occur when using PC for filenames in the
+ ;; minibuffer, because in that case PC-do-completion is called without
+ ;; an explicit value for END, and so uses (point-max). This is fine for
+ ;; a filename, because the end of the filename must be at the end of
+ ;; the minibuffer. The same is not true for lisp symbols.
+ ;;
+ ;; [1] An alternate fix would be to not move point to the hyphen
+ ;; in such cases, but that would make the behaviour different from
+ ;; that for filenames. It seems PC moves point to the site of the
+ ;; first difference between the possible completions.
+ ;;
+ ;; Alternatively alternatively, maybe end should be computed in
+ ;; the same way as beg. That would change the behaviour though.
+ (if (equal last-command 'PC-lisp-complete-symbol)
+ (PC-do-completion nil beg PC-lisp-complete-end)
+ (setq PC-lisp-complete-end (point-marker))
+ (PC-do-completion nil beg end))))
(defun PC-complete-as-file-name ()
"Perform completion on file names preceding point.
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Chong Yidong, 2007/03/05
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Michaƫl Cadilhac, 2007/03/07
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Kim F. Storm, 2007/03/07
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Chong Yidong, 2007/03/08
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Martin Rudalics, 2007/03/09
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Glenn Morris, 2007/03/09
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Martin Rudalics, 2007/03/10
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Stefan Monnier, 2007/03/21
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v,
Glenn Morris <=
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Glenn Morris, 2007/03/27
- [Emacs-diffs] Changes to emacs/lisp/complete.el,v, Glenn Morris, 2007/03/28