From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Sergio Durigan Junior Newsgroups: gmane.emacs.devel Subject: [PATCH] Fix gdb-mi.el to recognize backslashes as quotes Date: Thu, 11 Jul 2013 02:33:36 -0300 Message-ID: <87li5dslsf.fsf@riseup.net> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1373521226 32417 80.91.229.3 (11 Jul 2013 05:40:26 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 11 Jul 2013 05:40:26 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Jul 11 07:40:28 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Ux9cA-0001Dz-4D for ged-emacs-devel@m.gmane.org; Thu, 11 Jul 2013 07:40:26 +0200 Original-Received: from localhost ([::1]:42967 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ux9c9-00087p-OO for ged-emacs-devel@m.gmane.org; Thu, 11 Jul 2013 01:40:25 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53754) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ux9c6-00087h-HG for emacs-devel@gnu.org; Thu, 11 Jul 2013 01:40:23 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ux9c3-0007Gd-Fg for emacs-devel@gnu.org; Thu, 11 Jul 2013 01:40:22 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:56405) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ux9c3-0007GR-5f for emacs-devel@gnu.org; Thu, 11 Jul 2013 01:40:19 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1Ux9bz-00014F-Jx for emacs-devel@gnu.org; Thu, 11 Jul 2013 07:40:15 +0200 Original-Received: from 187.106.55.194 ([187.106.55.194]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 11 Jul 2013 07:40:15 +0200 Original-Received: from sergiodj by 187.106.55.194 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 11 Jul 2013 07:40:15 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 81 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: 187.106.55.194 X-URL: http://sergiodj.net/blog User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) Cancel-Lock: sha1:1ADpweaP9ACmZr7f7HtBhYzBD6o= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:161818 Archived-At: Hi there. I've sent a message a while ago asking about this question, and in the end I managed to figure it out. You can read my question at: https://lists.gnu.org/archive/html/emacs-devel/2013-06/msg00482.html There is also a GDB bug about it: http://sourceware.org/bugzilla/show_bug.cgi?id=15596 The fix is rather simple. gdb-mi.el is not preserving the context and saving the command being typed when it sees the backslash, and although it has a "gdb-continuation" variable for that exact purpose, it is not setting it properly. All this patch does is to make sure that gdb-continuation (and gdb-last-command, for that matter) gets set correctly when it sees a backslash, or when the user presses RET without nothing in the prompt (i.e., GDB's parlance for "repeat the last command"). I chose to strip the last backslash, just like GDB does in the CLI. I've tested it with real simple examples, and it worked OK. OK to apply? lisp/ChangeLog: 2013-07-11 Sergio Durigan Junior * progmodes/gdb-mi.el (gdb-strip-string-backslash): New function. (gdb-send): Correctly handle continuation strings with backslashes, and properly set the last command typed. diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 2c4d6a0..789e7b4 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -1759,6 +1759,9 @@ static char *magick[] = { As long as GDB is in the recursive reading loop, it does not expect commands to be prefixed by \"-interpreter-exec console\".") +(defun gdb-strip-string-backslash (string) + (replace-regexp-in-string "\\\\$" "" string)) + (defun gdb-send (proc string) "A comint send filter for gdb." (with-current-buffer gud-comint-buffer @@ -1766,8 +1769,13 @@ commands to be prefixed by \"-interpreter-exec console\".") (remove-text-properties (point-min) (point-max) '(face)))) ;; mimic key to repeat previous command in GDB (if (not (string= "" string)) - (setq gdb-last-command string) - (if gdb-last-command (setq string gdb-last-command))) + (if (not (null gdb-continuation)) + (setq gdb-last-command (concat gdb-continuation + (gdb-strip-string-backslash string) + " ")) + (setq gdb-last-command (gdb-strip-string-backslash string))) + (if gdb-last-command (setq string gdb-last-command)) + (setq gdb-continuation nil)) (if (or (string-match "^-" string) (> gdb-control-level 0)) ;; Either MI command or we are feeding GDB's recursive reading loop. @@ -1779,10 +1787,13 @@ commands to be prefixed by \"-interpreter-exec console\".") (setq gdb-control-level (1- gdb-control-level)))) ;; CLI command (if (string-match "\\\\$" string) - (setq gdb-continuation (concat gdb-continuation string "\n")) + (setq gdb-continuation + (concat gdb-continuation (gdb-strip-string-backslash + string) + " ")) (setq gdb-first-done-or-error t) (let ((to-send (concat "-interpreter-exec console " - (gdb-mi-quote string) + (gdb-mi-quote (concat gdb-continuation string " ")) "\n"))) (if gdb-enable-debug (push (cons 'mi-send to-send) gdb-debug-log)) -- Sergio