emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-bug-tracker] bug#7680: closed (23.2.91; [PATCH] dnd-get-local-fil


From: GNU bug Tracking System
Subject: [Emacs-bug-tracker] bug#7680: closed (23.2.91; [PATCH] dnd-get-local-file-name bug)
Date: Mon, 20 Dec 2010 20:05:02 +0000

Your message dated Mon, 20 Dec 2010 21:11:17 +0100
with message-id <address@hidden>
and subject line Re: bug#7680: 23.2.91; [PATCH] dnd-get-local-file-name bug
has caused the GNU bug report #7680,
regarding 23.2.91; [PATCH] dnd-get-local-file-name bug
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
7680: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7680
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 23.2.91; [PATCH] dnd-get-local-file-name bug Date: Sun, 19 Dec 2010 14:19:56 +0000
I just noticed the return value of dnd-get-local-file-name may contain
%20 etc. The patch fixes this.

commit 8d987eb074d6ff8282ce3fdc19f00cdb82fdfa28 (HEAD, refs/heads/leo-main)
Date:   Sun Dec 19 14:12:55 2010 +0000

    Unhex file name should always be performed
    
    in dnd-get-local-file-name.
---
 lisp/dnd.el |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

        Modified lisp/dnd.el
diff --git a/lisp/dnd.el b/lisp/dnd.el
index aadfad6..e6e3190 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -143,14 +143,14 @@ Return nil if URI is not a local file."
                  (substring uri (1- (match-end 0))))
                 ((string-match "^file:" uri)           ; Old KDE, Motif, Sun
                  (substring uri (match-end 0))))))
+    (and f (setq f (replace-regexp-in-string
+                   "%[A-Fa-f0-9][A-Fa-f0-9]"
+                   (lambda (arg)
+                     (let ((str (make-string 1 0)))
+                       (aset str 0 (string-to-number (substring arg 1) 16))
+                       str))
+                   f t t)))
     (when (and f must-exist)
-      (setq f (replace-regexp-in-string
-              "%[A-Fa-f0-9][A-Fa-f0-9]"
-              (lambda (arg)
-                (let ((str (make-string 1 0)))
-                  (aset str 0 (string-to-number (substring arg 1) 16))
-                  str))
-              f t t))
       (let* ((decoded-f (decode-coding-string
                         f
                         (or file-name-coding-system




--- End Message ---
--- Begin Message --- Subject: Re: bug#7680: 23.2.91; [PATCH] dnd-get-local-file-name bug Date: Mon, 20 Dec 2010 21:11:17 +0100 User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; sv-SE; rv:1.9.2.13) Gecko/20101129 Thunderbird/3.1.7


Leo skrev 2010-12-20 09.56:
On 2010-12-20 07:07 +0000, Jan Djärv wrote:
To conform to the policy in
http://lists.gnu.org/archive/html/emacs-devel/2006-05/msg01060.html we
should also decode it with the file name coding system when must-exist
is nil. AFAIK, dnd-get-local-file-name is only called with must-exist
t.

        Jan D.

OK. The original dnd-get-local-file-name could return an uncoded file
name. Should that be kept? In the attached patch, I assume returned file
name should always be decoded.

It is better the way you have it now, i.e. always return a decoded file name.
It is confusing if it can return two things.  Installed.


        Jan D.

diff --git a/lisp/dnd.el b/lisp/dnd.el
index aadfad6..e508d52 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -134,6 +134,16 @@ Return nil if URI is not a local file."
                 (string-equal system-name-no-dot hostname)))
        (concat "file://" (substring uri (+ 7 (length hostname)))))))

+(defsubst dnd-unescape-uri (uri)
+  (replace-regexp-in-string
+   "%[A-Fa-f0-9][A-Fa-f0-9]"
+   (lambda (arg)
+     (let ((str (make-string 1 0)))
+       (aset str 0 (string-to-number (substring arg 1) 16))
+       str))
+   uri t t))
+
+;; http://lists.gnu.org/archive/html/emacs-devel/2006-05/msg01060.html
  (defun dnd-get-local-file-name (uri&optional must-exist)
    "Return file name converted from file:/// or file: syntax.
  URI is the uri for the file.  If MUST-EXIST is given and non-nil,
@@ -143,21 +153,11 @@ Return nil if URI is not a local file."
                  (substring uri (1- (match-end 0))))
                 ((string-match "^file:" uri)         ; Old KDE, Motif, Sun
                  (substring uri (match-end 0))))))
-    (when (and f must-exist)
-      (setq f (replace-regexp-in-string
-              "%[A-Fa-f0-9][A-Fa-f0-9]"
-              (lambda (arg)
-                (let ((str (make-string 1 0)))
-                  (aset str 0 (string-to-number (substring arg 1) 16))
-                  str))
-              f t t))
-      (let* ((decoded-f (decode-coding-string
-                        f
-                        (or file-name-coding-system
-                            default-file-name-coding-system))))
-       (setq f (cond ((file-readable-p decoded-f) decoded-f)
-                     ((file-readable-p f) f)
-                     (t nil)))))
+    (and f (setq f (decode-coding-string (dnd-unescape-uri f)
+                                         (or file-name-coding-system
+                                             
default-file-name-coding-system))))
+    (when (and f must-exist (not (file-readable-p f)))
+      (setq f nil))
      f))

  (defun dnd-open-local-file (uri action)







--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]