Subject: bug#13304: [PATCH] full-path gud breakpoints now don't get confused by tramp

From: Dima Kogan <[email-masked]>
Date: Mon, 31 Dec 2012 11:53:13 -0800

> On Mon, 31 Dec 2012 16:41:42 +0100
> Michael Albinus <[email-masked]> wrote:
>
> Dima Kogan <[email-masked]> writes:
> 
> > +	     (tramp-file-name-localname (tramp-dissect-file-name
> > +					 (buffer-file-name) t))
> 
> Don't use Tramp internal functions, they are not documented by
> intention. You could use instead
> 
> (file-remote-p (buffer-file-name) 'localname)

Great point; this is really much better. I'm attaching an updated patch.

>From f27e176b58dc9fd813ad5f9228066d3fcc2c226c Mon Sep 17 00:00:00 2001
From: Dima Kogan <[email-masked]>
Date: Sat, 29 Dec 2012 02:54:40 -0800
Subject: [PATCH] full-path gud breakpoints now don't get confused by tramp

prior to this patch if gud used a path to set a breakpoint, the FULL
path would be sent to the backend debugger, including the tramp
pieces. The backends don't know anything about tramp, so they were
naturally confused by this. Most notably, it was impossible to set
from-source breakpoints in pdb, the python debugger.
---
 lisp/progmodes/gud.el |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 13eac83..c178a53 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -2743,6 +2743,9 @@ Obeying it means displaying in another window the specified file and line."
 (defun gud-format-command (str arg)
   (let ((insource (not (eq (current-buffer) gud-comint-buffer)))
 	(frame (or gud-last-frame gud-last-last-frame))
+	(buffer-file-name-localized
+	 (and (buffer-file-name) (or (file-remote-p (buffer-file-name) 'localname)
+				     (buffer-file-name))))
 	result)
     (while (and str
 		(let ((case-fold-search nil))
@@ -2752,15 +2755,15 @@ Obeying it means displaying in another window the specified file and line."
 	(cond
 	 ((eq key ?f)
 	  (setq subst (file-name-nondirectory (if insource
-						  (buffer-file-name)
+						  buffer-file-name-localized
 						(car frame)))))
 	 ((eq key ?F)
 	  (setq subst (file-name-base (if insource
-                                          (buffer-file-name)
+                                          buffer-file-name-localized
                                         (car frame)))))
 	 ((eq key ?d)
 	  (setq subst (file-name-directory (if insource
-					       (buffer-file-name)
+					       buffer-file-name-localized
 					     (car frame)))))
 	 ((eq key ?l)
 	  (setq subst (int-to-string
-- 
1.7.10.4