GNU bug report logs -
#18282
24.3.93; Tab completion in gud-gdb at the start of a line overwrites the prompt.
Previous Next
Reported by: Mat Smiglarski <penthief <at> SDF.ORG>
Date: Sun, 17 Aug 2014 10:24:01 UTC
Severity: important
Found in version 24.3.93
Done: Stefan Monnier <monnier <at> iro.umontreal.ca>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 18282 in the body.
You can then email your comments to 18282 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18282
; Package
emacs
.
(Sun, 17 Aug 2014 10:24:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Mat Smiglarski <penthief <at> SDF.ORG>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Sun, 17 Aug 2014 10:24:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Hello,
Tab completion in gud-gdb replaces the prompt with the completed
string. As a result this string is not sent to the gdb process.
This bug does not occur in 24.3.1. It does occur on trunk and
24.3.92, as well as 24.3.93.
To reproduce:
1. emacs -Q
2. M-: (gud-gdb "gdb")
3. Type the following at the gdb prompt "hel<TAB><RET>"
What happens is the command "help" is correctly completed, but the
prompt "(gdb)" is overwritten. This completed
string has the face "comint-highlight-prompt" and is not evaluated by
the gdb process.
For what it is worth, the bug does not occur with "M-x gdb", only "M-x
gud-gdb".
Regards,
Mat
In GNU Emacs 24.3.93.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.8)
of 2014-08-16 on zz
Windowing system distributor `The X.Org Foundation', version
11.0.11501000
System Description: Ubuntu 14.04.1 LTS
Configured using:
`configure 'CFLAGS=-O0 -g3''
Important settings:
value of $LC_CTYPE: en_US.UTF-8
value of $LANG: en_US.UTF-8
value of $XMODIFIERS: @im=ibus
locale-coding-system: utf-8-unix
Major mode: Debugger
Minor modes in effect:
tooltip-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
M-x M-p g u d - g d b <return> C-a M-f C-k <return>
h e <tab> <return> M-x r e p <tab> - e - b <tab> <
return>
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
user-error: Beginning of history; no preceding item
Making completion list...
Load-path shadows:
None found.
Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util
help-fns mail-prsvr mail-utils help-mode easymenu gud easy-mmode comint
ansi-color ring time-date tooltip electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core frame cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote make-network-process dbusbind
gfilenotify dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty emacs)
Memory information:
((conses 16 79181 7387)
(symbols 48 18300 0)
(miscs 40 49 200)
(strings 32 11682 4841)
(string-bytes 1 317029)
(vectors 16 10558)
(vector-slots 8 397115 7916)
(floats 8 66 210)
(intervals 56 233 0)
(buffers 960 13)
(heap 1024 17278 783))
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18282
; Package
emacs
.
(Mon, 18 Aug 2014 17:46:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 18282 <at> debbugs.gnu.org (full text, mbox):
Mat Smiglarski wrote:
> 1. emacs -Q
> 2. M-: (gud-gdb "gdb")
> 3. Type the following at the gdb prompt "hel<TAB><RET>"
>
> What happens is the command "help" is correctly completed, but the
> prompt "(gdb)" is overwritten.
Bisected to emacs-24:
revno: 114162
committer: Stefan Monnier <monnier <at> iro.umontreal.ca>
timestamp: Fri 2013-09-06 18:46:44 -0400
message:
* lisp/minibuffer.el: Make minibuffer-complete call
completion-in-region rather than other way around.
[...]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18282
; Package
emacs
.
(Mon, 18 Aug 2014 18:30:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 18282 <at> debbugs.gnu.org (full text, mbox):
>> 1. emacs -Q
>> 2. M-: (gud-gdb "gdb")
>> 3. Type the following at the gdb prompt "hel<TAB><RET>"
>>
>> What happens is the command "help" is correctly completed, but the
>> prompt "(gdb)" is overwritten.
> Bisected to emacs-24:
> revno: 114162
> committer: Stefan Monnier <monnier <at> iro.umontreal.ca>
> timestamp: Fri 2013-09-06 18:46:44 -0400
> message:
> * lisp/minibuffer.el: Make minibuffer-complete call
> completion-in-region rather than other way around.
> [...]
Thanks for bisecting it! That'll be very helpful,
Stefan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18282
; Package
emacs
.
(Tue, 19 Aug 2014 19:46:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 18282 <at> debbugs.gnu.org (full text, mbox):
I wonder if the problem is this note from gud-gdb-completions:
;; `gud-gdb-run-command-fetch-lines' has some nasty side-effects on the
;; buffer (via `gud-delete-prompt-marker'): it removes the prompt and then
;; re-adds it later, thus messing up markers and overlays along the way.
;; This is a problem for completion-in-region which uses an overlay to
;; create a field.
;; So we restore completion-in-region's field if needed.
completion-in-region doesn't use an overlay any more (so the comment and
workaround are in any case outdated), it uses a marker, which presumably
gets moved behind its back. Dunno how you fix things up to make the
marker point back where it should.
python.el seems to have a similar need, and to solve it using
python-shell-send-string-no-output (use
comint-preoutput-filter-functions to prevent completion output getting
inserted into the buffer).
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18282
; Package
emacs
.
(Tue, 19 Aug 2014 19:51:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 18282 <at> debbugs.gnu.org (full text, mbox):
PS perhaps comint-dynamic-list-filename-completions can/should be
similarly updated to us explicit start/end args rather than overlays.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18282
; Package
emacs
.
(Wed, 27 Aug 2014 06:54:02 GMT)
Full text and
rfc822 format available.
Message #20 received at 18282 <at> debbugs.gnu.org (full text, mbox):
Her's an awful kludge that seems to work somewhat, maybe.
But it can't be the right solution.
But it can't be worse than it is now (?).
*** lisp/progmodes/gud.el 2014-02-10 01:34:22 +0000
--- lisp/progmodes/gud.el 2014-08-27 06:48:45 +0000
***************
*** 778,784 ****
(add-hook 'completion-at-point-functions #'gud-gdb-completion-at-point
nil 'local)
(set (make-local-variable 'gud-gdb-completion-function) 'gud-gdb-completions)
!
(local-set-key "\C-i" 'completion-at-point)
(setq comint-prompt-regexp "^(.*gdb[+]?) *")
(setq paragraph-start comint-prompt-regexp)
--- 778,784 ----
(add-hook 'completion-at-point-functions #'gud-gdb-completion-at-point
nil 'local)
(set (make-local-variable 'gud-gdb-completion-function) 'gud-gdb-completions)
! (setq-local completion-in-region-function 'gud--completion-in-region)
(local-set-key "\C-i" 'completion-at-point)
(setq comint-prompt-regexp "^(.*gdb[+]?) *")
(setq paragraph-start comint-prompt-regexp)
***************
*** 787,792 ****
--- 787,795 ----
(setq gud-filter-pending-text nil)
(run-hooks 'gud-gdb-mode-hook))
+ (defun gud--completion-in-region (start end collection &optional predicate)
+ (completion--in-region (copy-marker start t) end collection predicate))
+
;; The completion process filter indicates when it is finished.
(defvar gud-gdb-fetch-lines-in-progress)
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18282
; Package
emacs
.
(Thu, 28 Aug 2014 03:15:01 GMT)
Full text and
rfc822 format available.
Message #23 received at 18282 <at> debbugs.gnu.org (full text, mbox):
> Her's an awful kludge that seems to work somewhat, maybe.
> But it can't be the right solution.
> But it can't be worse than it is now (?).
I'll come up with a better fix,
Stefan
Reply sent
to
Stefan Monnier <monnier <at> iro.umontreal.ca>
:
You have taken responsibility.
(Tue, 02 Sep 2014 18:18:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Mat Smiglarski <penthief <at> SDF.ORG>
:
bug acknowledged by developer.
(Tue, 02 Sep 2014 18:18:02 GMT)
Full text and
rfc822 format available.
Message #28 received at 18282-done <at> debbugs.gnu.org (full text, mbox):
>> 1. emacs -Q
>> 2. M-: (gud-gdb "gdb")
>> 3. Type the following at the gdb prompt "hel<TAB><RET>"
>>
>> What happens is the command "help" is correctly completed, but the
>> prompt "(gdb)" is overwritten.
I installed the patch below which seems to fix it for now.
Stefan
=== modified file 'lisp/progmodes/gud.el'
--- lisp/progmodes/gud.el 2014-02-10 01:34:22 +0000
+++ lisp/progmodes/gud.el 2014-09-02 18:14:45 +0000
@@ -809,18 +809,6 @@
(current-buffer)
;; From string-match above.
(length context))))
- ;; `gud-gdb-run-command-fetch-lines' has some nasty side-effects on the
- ;; buffer (via `gud-delete-prompt-marker'): it removes the prompt and then
- ;; re-adds it later, thus messing up markers and overlays along the way.
- ;; This is a problem for completion-in-region which uses an overlay to
- ;; create a field.
- ;; So we restore completion-in-region's field if needed.
- ;; FIXME: change gud-gdb-run-command-fetch-lines so it doesn't modify the
- ;; buffer at all.
- (when (/= start (- (point) (field-beginning)))
- (dolist (ol (overlays-at (1- (point))))
- (when (eq (overlay-get ol 'field) 'completion)
- (move-overlay ol (- (point) start) (overlay-end ol)))))
;; Protect against old versions of GDB.
(and complete-list
(string-match "^Undefined command: \"complete\"" (car complete-list))
@@ -859,7 +847,14 @@
(save-excursion
(skip-chars-backward "^ " (comint-line-beginning-position))
(point))))
- (list start end
+ ;; FIXME: `gud-gdb-run-command-fetch-lines' has some nasty side-effects on
+ ;; the buffer (via `gud-delete-prompt-marker'): it removes the prompt and
+ ;; then re-adds it later, thus messing up markers and overlays along the
+ ;; way (bug#18282).
+ ;; We use an "insert-before" marker for `start', since it's typically right
+ ;; after the prompt, which works around the problem, but is a hack (and
+ ;; comes with other downsides, e.g. if completion adds text at `start').
+ (list (copy-marker start t) end
(completion-table-dynamic
(apply-partially gud-gdb-completion-function
(buffer-substring (comint-line-beginning-position)
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Wed, 01 Oct 2014 11:24:04 GMT)
Full text and
rfc822 format available.
This bug report was last modified 10 years and 267 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.