[Top][All Lists]

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

bug#7680: 23.2.91; [PATCH] dnd-get-local-file-name bug

From: Jan Djärv
Subject: 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: 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

        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
+    (when (and f must-exist (not (file-readable-p f)))
+      (setq f nil))

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

reply via email to

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