Subject: bug#18282: closed (Re: bug#18282: 24.3.93; Tab completion in gud-gdb at the start of a line overwrites the prompt.)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 02 Sep 2014 18:18:02 +0000

Your bug report

#18282: 24.3.93; Tab completion in gud-gdb at the start of a line overwrites the prompt.

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
18282: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18282
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#18282: 24.3.93; Tab completion in gud-gdb at the start of a line overwrites the prompt.
From: Stefan Monnier <[email-masked]>
To: Mat Smiglarski <[email-masked]>
Cc: Glenn Morris <[email-masked]>, [email-masked]
Date: Tue, 02 Sep 2014 14:17:10 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

>> 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)

Subject: 24.3.93; Tab completion in gud-gdb at the start of a line overwrites the prompt.
From: Mat Smiglarski <[email-masked]>
To: [email-masked]
Date: Sun, 17 Aug 2014 11:07:42 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

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))