]> git.eshelyaron.com Git - emacs.git/commitdiff
Add file name handler support for file-system-info
authorMichael Albinus <michael.albinus@gmx.de>
Tue, 3 Oct 2017 14:15:08 +0000 (16:15 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Tue, 3 Oct 2017 14:15:08 +0000 (16:15 +0200)
* doc/lispref/files.texi (Magic File Names): Add file-system-info.

* etc/NEWS: Mention get-free-disk-space working on remote systems.

* lisp/files.el (get-free-disk-space): Do not block on remote systems.

* src/w32fns.c (Ffile_system_info):
* src/fileio.c (Ffile_system_info): Call file name handler if exists.
(syms_of_fileio): Add Qfile_system_info.

doc/lispref/files.texi
etc/NEWS
lisp/files.el
src/fileio.c
src/w32fns.c

index 0a37eeb2a85d54bb150f06ccaed7c7b534c3eb4b..0f0ce157cad93863e864877c5a4ad6784a02bd5e 100644 (file)
@@ -3135,7 +3135,8 @@ first, before handlers for jobs such as remote file access.
 @code{file-ownership-preserved-p},
 @code{file-readable-p}, @code{file-regular-p},
 @code{file-remote-p}, @code{file-selinux-context},
-@code{file-symlink-p}, @code{file-truename}, @code{file-writable-p},
+@code{file-symlink-p}, @code{file-system-info},
+@code{file-truename}, @code{file-writable-p},
 @code{find-backup-file-name},@*
 @code{get-file-buffer},
 @code{insert-directory},
@@ -3191,7 +3192,8 @@ first, before handlers for jobs such as remote file access.
 @code{file-ownership-pre@discretionary{}{}{}served-p},
 @code{file-readable-p}, @code{file-regular-p},
 @code{file-remote-p}, @code{file-selinux-context},
-@code{file-symlink-p}, @code{file-truename}, @code{file-writable-p},
+@code{file-symlink-p}, @code{file-system-info},
+@code{file-truename}, @code{file-writable-p},
 @code{find-backup-file-name},
 @code{get-file-buffer},
 @code{insert-directory},
index 28789a956ae3e38c24466cbc184287e044ba1844..15661808c766863a8a31423c608cc1bf588433aa 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -70,13 +70,19 @@ Programs that called it with multiple arguments before should pass
 them through 'format' first.  Even that is discouraged: for ElDoc
 support, you should set 'eldoc-documentation-function' instead of
 calling 'eldoc-message' directly.
+
 \f
 * Lisp Changes in Emacs 27.1
 
+---
 ** The 'file-system-info' function is now available on all platforms.
-instead of just Microsoft platforms.  This fixes a get-free-disk-space
+instead of just Microsoft platforms.  This fixes a 'get-free-disk-space'
 bug on OS X 10.8 and later (Bug#28639).
 
+---
+** The function 'get-free-disk-space' returns now a non-nil value for
+remote systems, which support this check.
+
 \f
 * Changes in Emacs 27.1 on Non-Free Operating Systems
 
index 194c87ab68087133b75d1442cc479991b21ff389..666654da2c965b11d27b95b5cb5f5b53882d7287 100644 (file)
@@ -6407,12 +6407,10 @@ This variable is obsolete; Emacs no longer uses it."
 The return value is a string describing the amount of free
 space (normally, the number of free 1KB blocks).
 
-If DIR's free space cannot be obtained, or if DIR is a remote
-directory, this function returns nil."
-  (unless (file-remote-p (expand-file-name dir))
-    (let ((avail (nth 2 (file-system-info dir))))
-      (if avail
-         (format "%.0f" (/ avail 1024))))))
+If DIR's free space cannot be obtained, this function returns nil."
+  (let ((avail (nth 2 (file-system-info dir))))
+    (if avail
+       (format "%.0f" (/ avail 1024)))))
 
 ;; The following expression replaces `dired-move-to-filename-regexp'.
 (defvar directory-listing-before-filename-regexp
index 11370279d1bb4ae9d89174ea384a7dc78dc3f6e8..d460f123a826b7f31e69688da604dd8927d7424a 100644 (file)
@@ -5789,6 +5789,18 @@ If the underlying system call fails, value is nil.  */)
   (Lisp_Object filename)
 {
   Lisp_Object encoded = ENCODE_FILE (Fexpand_file_name (filename, Qnil));
+
+  /* If the file name has special constructs in it,
+     call the corresponding file handler.  */
+  Lisp_Object handler = Ffind_file_name_handler (encoded, Qfile_system_info);
+  if (!NILP (handler))
+    {
+      Lisp_Object result = call2 (handler, Qfile_system_info, encoded);
+      if (CONSP (result) || NILP (result))
+       return result;
+      error ("Invalid handler in `file-name-handler-alist'");
+    }
+
   struct fs_usage u;
   if (get_fs_usage (SSDATA (encoded), NULL, &u) != 0)
     return Qnil;
@@ -5870,6 +5882,7 @@ syms_of_fileio (void)
   DEFSYM (Qwrite_region, "write-region");
   DEFSYM (Qverify_visited_file_modtime, "verify-visited-file-modtime");
   DEFSYM (Qset_visited_file_modtime, "set-visited-file-modtime");
+  DEFSYM (Qfile_system_info, "file-system-info");
 
   /* The symbol bound to coding-system-for-read when
      insert-file-contents is called for recovering a file.  This is not
index efbd81b22d9866ca78ab8557bf80be9b82f3ebe0..e3de22d68abe0a80d573b72fe67be12e46a202b9 100644 (file)
@@ -9336,6 +9336,17 @@ If the underlying system call fails, value is nil.  */)
   filename = Fexpand_file_name (filename, Qnil);
   encoded = ENCODE_FILE (filename);
 
+  /* If the file name has special constructs in it,
+     call the corresponding file handler.  */
+  Lisp_Object handler = Ffind_file_name_handler (encoded, Qfile_system_info);
+  if (!NILP (handler))
+    {
+      value = call2 (handler, Qfile_system_info, encoded);
+      if (CONSP (value) || NILP (value))
+       return value;
+      error ("Invalid handler in `file-name-handler-alist'");
+    }
+
   value = Qnil;
 
   /* Determining the required information on Windows turns out, sadly,