]> git.eshelyaron.com Git - emacs.git/commitdiff
* net/tramp-sh.el (tramp-sh-file-gvfs-monitor-dir-process-filter):
authorMichael Albinus <michael.albinus@gmx.de>
Sat, 6 Jul 2013 16:17:16 +0000 (18:17 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Sat, 6 Jul 2013 16:17:16 +0000 (18:17 +0200)
(tramp-sh-file-inotifywait-process-filter): Handle file names with spaces.

lisp/ChangeLog
lisp/net/tramp-sh.el

index 0b7c65b218d183d6152f02b31d5623aa95c33ee9..872f4f566777d705dd70d725510dfbddd9261aca 100644 (file)
@@ -1,3 +1,9 @@
+2013-07-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       * net/tramp-sh.el (tramp-sh-file-gvfs-monitor-dir-process-filter):
+       (tramp-sh-file-inotifywait-process-filter): Handle file names with
+       spaces.
+
 2013-07-06  Martin Rudalics  <rudalics@gmx.at>
 
        * window.el (window-state-put-stale-windows): New variable.
index 1557acb78940a49f4a5971e29d681d8fe4cb2b3f..d7316b8d2ea29abdd818d30df2b08ae087a0bf5f 100644 (file)
@@ -3421,17 +3421,22 @@ Fall back to normal file name handler if no Tramp handler exists."
   (let ((remote-prefix
         (with-current-buffer (process-buffer proc)
           (file-remote-p default-directory)))
-       (previous-string (tramp-compat-process-get proc 'previous-string)))
-    (when previous-string
-      (tramp-message proc 10 (format "Previous string:\n%s" previous-string)))
+       (rest-string (tramp-compat-process-get proc 'rest-string)))
+    (when rest-string
+      (tramp-message proc 10 (format "Previous string:\n%s" rest-string)))
     (tramp-message proc 6 (format "%S\n%s" proc string))
-    (setq string (concat previous-string string)
+    (setq string (concat rest-string string)
          ;; Attribute change is returned in unused wording.
          string (replace-regexp-in-string
                  "ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string))
 
     (while (string-match
-           "^Directory Monitor Event:[\n\r]+Child = \\([^[:blank:]]+\\)[\n\r]+\\(Other = \\([^[:blank:]]+\\)[\n\r]+\\)?Event = \\([^[:blank:]]+\\)[\n\r]+$" string)
+           (concat "^[\n\r]*"
+                   "Directory Monitor Event:[\n\r]+"
+                   "Child = \\([^\n\r]+\\)[\n\r]+"
+                   "\\(Other = \\([^\n\r]+\\)[\n\r]+\\)?"
+                   "Event = \\([^[:blank:]]+\\)[\n\r]+")
+           string)
       (let ((object
             (list
              proc
@@ -3443,15 +3448,16 @@ Fall back to normal file name handler if no Tramp handler exists."
              (concat remote-prefix (match-string 1 string))
              (when (match-string 3 string)
                (concat remote-prefix (match-string 3 string))))))
+       (setq string (replace-match "" nil nil string))
        ;; Usually, we would add an Emacs event now.  Unfortunately,
        ;; `unread-command-events' does not accept several events at
        ;; once.  Therefore, we apply the callback directly.
-       (tramp-compat-funcall 'file-notify-callback object)
-       (setq string (replace-match "" nil nil string)))))
+       (tramp-compat-funcall 'file-notify-callback object)))
 
-  ;; Save rest of the string.
-  (when string (tramp-message proc 10 (format "Rest string:\n%s" string)))
-  (tramp-compat-process-put proc 'previous-string string))
+    ;; Save rest of the string.
+    (when (zerop (length string)) (setq string nil))
+    (when string (tramp-message proc 10 (format "Rest string:\n%s" string)))
+    (tramp-compat-process-put proc 'rest-string string)))
 
 (defun tramp-sh-file-inotifywait-process-filter (proc string)
   "Read output from \"inotifywait\" and add corresponding file-notify events."
@@ -3460,7 +3466,10 @@ Fall back to normal file name handler if no Tramp handler exists."
     ;; Check, whether there is a problem.
     (unless
        (string-match
-        "^[^[:blank:]]+[[:blank:]]+\\([^[:blank:]]+\\)+\\([[:blank:]]+\\([^[:blank:]]+\\)\\)?[[:blank:]]*$" line)
+        (concat "^[^[:blank:]]+"
+                "[[:blank:]]+\\([^[:blank:]]+\\)+"
+                "\\([[:blank:]]+\\([^\n\r]+\\)\\)?")
+        line)
       (tramp-error proc 'file-notify-error "%s" line))
 
     (let ((object