summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/calc/calc.el2
-rw-r--r--lisp/dired-aux.el37
-rw-r--r--lisp/dired.el7
-rw-r--r--lisp/emacs-lisp/cl-extra.el8
-rw-r--r--lisp/files.el4
-rw-r--r--lisp/gnus/mm-encode.el2
-rw-r--r--lisp/net/tramp-archive.el15
-rw-r--r--lisp/net/tramp.el17
-rw-r--r--lisp/outline.el73
-rw-r--r--lisp/progmodes/vhdl-mode.el32
-rw-r--r--lisp/simple.el4
-rw-r--r--lisp/vc/vc-bzr.el2
-rw-r--r--lisp/vc/vc-cvs.el2
-rw-r--r--lisp/vc/vc-dav.el4
-rw-r--r--lisp/vc/vc-rcs.el2
-rw-r--r--lisp/vc/vc-sccs.el2
-rw-r--r--lisp/vc/vc-src.el12
-rw-r--r--lisp/vc/vc.el2
18 files changed, 132 insertions, 95 deletions
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 3b1cf248fd9..2c139a02385 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -1816,7 +1816,7 @@ See calc-keypad for details."
(if win
(progn
(calc-cursor-stack-index 0)
- (vertical-motion (- 2 (window-height win)))
+ (vertical-motion (- 3 (window-height win 'floor)))
(set-window-start win (point)))))
(calc-cursor-stack-index 0)
(if (looking-at " *\\.$")
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index c49e4e91d83..7edfde08f80 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1896,22 +1896,23 @@ rename them using `vc-rename-file'."
"Rename FILE to NEWNAME.
Signal a `file-already-exists' error if a file NEWNAME already exists
unless OK-IF-ALREADY-EXISTS is non-nil."
- (dired-handle-overwrite newname)
- (dired-maybe-create-dirs (file-name-directory newname))
- (if (and dired-vc-rename-file
- (vc-backend file)
- (ignore-errors (vc-responsible-backend newname)))
- (vc-rename-file file newname)
- ;; error is caught in -create-files
- (rename-file file newname ok-if-already-exists))
- ;; Silently rename the visited file of any buffer visiting this file.
- (and (get-file-buffer file)
- (with-current-buffer (get-file-buffer file)
- (set-visited-file-name newname nil t)))
- (dired-remove-file file)
- ;; See if it's an inserted subdir, and rename that, too.
- (when (file-directory-p file)
- (dired-rename-subdir file newname)))
+ (let ((file-is-dir-p (file-directory-p file)))
+ (dired-handle-overwrite newname)
+ (dired-maybe-create-dirs (file-name-directory newname))
+ (if (and dired-vc-rename-file
+ (vc-backend file)
+ (ignore-errors (vc-responsible-backend newname)))
+ (vc-rename-file file newname)
+ ;; error is caught in -create-files
+ (rename-file file newname ok-if-already-exists))
+ ;; Silently rename the visited file of any buffer visiting this file.
+ (and (get-file-buffer file)
+ (with-current-buffer (get-file-buffer file)
+ (set-visited-file-name newname nil t)))
+ (dired-remove-file file)
+ ;; See if it's an inserted subdir, and rename that, too.
+ (when file-is-dir-p
+ (dired-rename-subdir file newname))))
(defun dired-rename-subdir (from-dir to-dir)
(setq from-dir (file-name-as-directory from-dir)
@@ -1924,7 +1925,7 @@ unless OK-IF-ALREADY-EXISTS is non-nil."
(while blist
(with-current-buffer (car blist)
(if (and buffer-file-name
- (file-in-directory-p buffer-file-name expanded-from-dir))
+ (dired-in-this-tree-p buffer-file-name expanded-from-dir))
(let ((modflag (buffer-modified-p))
(to-file (replace-regexp-in-string
(concat "^" (regexp-quote from-dir))
@@ -1943,7 +1944,7 @@ unless OK-IF-ALREADY-EXISTS is non-nil."
(while alist
(setq elt (car alist)
alist (cdr alist))
- (if (file-in-directory-p (car elt) expanded-dir)
+ (if (dired-in-this-tree-p (car elt) expanded-dir)
;; ELT's subdir is affected by the rename
(dired-rename-subdir-2 elt dir to)))
(if (equal dir default-directory)
diff --git a/lisp/dired.el b/lisp/dired.el
index d0cf72adc58..2856c5d2435 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1034,8 +1034,11 @@ If a directory or nothing is found at point, return nil."
;;;###autoload
(defun dired (dirname &optional switches)
"\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.
-Optional second argument SWITCHES specifies the `ls' options used.
-\(Interactively, use a prefix argument to be able to specify SWITCHES.)
+Optional second argument SWITCHES specifies the options to be used
+when invoking `insert-directory-program', usually `ls', which produces
+the listing of the directory files and their attributes.
+Interactively, a prefix argument will cause the command to prompt
+for SWITCHES.
If DIRNAME is a string, Dired displays a list of files in DIRNAME (which
may also have shell wildcards appended to select certain files).
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index ed9b1b7d836..8e38df43c87 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -553,10 +553,14 @@ too large if positive or too small if negative)."
,new)))))
(seq-subseq seq start end))
+;;; This isn't a defalias because autoloading defalises doesn't work
+;;; very well.
+
;;;###autoload
-(defalias 'cl-concatenate #'seq-concatenate
+(defun cl-concatenate (type &rest sequences)
"Concatenate, into a sequence of type TYPE, the argument SEQUENCEs.
-\n(fn TYPE SEQUENCE...)")
+\n(fn TYPE SEQUENCE...)"
+ (apply #'seq-concatenate type sequences))
;;; List functions.
diff --git a/lisp/files.el b/lisp/files.el
index 2aa6c9dedc6..b5ec7d45005 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -7325,7 +7325,9 @@ need to be passed verbatim to shell commands."
(defvar insert-directory-program (purecopy "ls")
- "Absolute or relative name of the `ls' program used by `insert-directory'.")
+ "Absolute or relative name of the `ls'-like program.
+This is used by `insert-directory' and `dired-insert-directory'
+\(thus, also by `dired').")
(defcustom directory-free-space-program (purecopy "df")
"Program to get the amount of free space on a file system.
diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el
index ead3bae219d..39b1ad1f3b9 100644
--- a/lisp/gnus/mm-encode.el
+++ b/lisp/gnus/mm-encode.el
@@ -99,7 +99,7 @@ This variable should never be set directly, but bound before a call to
;;;###autoload
(define-obsolete-function-alias 'mm-default-file-encoding
- #'mm-default-file-type "future") ;Old bad name.
+ #'mm-default-file-type "28.1") ;Old bad name.
;;;###autoload
(defun mm-default-file-type (file)
"Return a default content type for FILE."
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 7f4eca3f7c7..4a020c7150f 100644
--- a/lisp/net/tramp-archive.el
+++ b/lisp/net/tramp-archive.el
@@ -362,14 +362,13 @@ arguments to pass to the OPERATION."
(progn (defun tramp-archive-autoload-file-name-handler (operation &rest args)
"Load Tramp archive file name handler, and perform OPERATION."
(defvar tramp-archive-autoload)
- (when tramp-archive-enabled
- ;; We cannot use `tramp-compat-temporary-file-directory' here due
- ;; to autoload. When installing Tramp's GNU ELPA package, there
- ;; might be an older, incompatible version active. We try to
- ;; overload this.
- (let ((default-directory temporary-file-directory)
- (tramp-archive-autoload t))
- (apply #'tramp-autoload-file-name-handler operation args)))))
+ (let (;; We cannot use `tramp-compat-temporary-file-directory' here
+ ;; due to autoload. When installing Tramp's GNU ELPA package,
+ ;; there might be an older, incompatible version active. We
+ ;; try to overload this.
+ (default-directory temporary-file-directory)
+ (tramp-archive-autoload tramp-archive-enabled))
+ (apply #'tramp-autoload-file-name-handler operation args))))
(put #'tramp-archive-autoload-file-name-handler 'tramp-autoload t)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 1f429edf4f8..d7d375e111d 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -5915,14 +5915,15 @@ verbosity of 6."
"Return t if system process PROCESS-NAME is running for `user-login-name'."
(when (stringp process-name)
(catch 'result
- (dolist (pid (list-system-processes))
- (when-let ((attributes (process-attributes pid))
- (comm (cdr (assoc 'comm attributes))))
- (and (string-equal (cdr (assoc 'user attributes)) (user-login-name))
- ;; The returned command name could be truncated to 15
- ;; characters. Therefore, we cannot check for `string-equal'.
- (string-prefix-p comm process-name)
- (throw 'result t)))))))
+ (let ((default-directory temporary-file-directory))
+ (dolist (pid (list-system-processes))
+ (when-let ((attributes (process-attributes pid))
+ (comm (cdr (assoc 'comm attributes))))
+ (and (string-equal (cdr (assoc 'user attributes)) (user-login-name))
+ ;; The returned command name could be truncated to 15
+ ;; characters. Therefore, we cannot check for `string-equal'.
+ (string-prefix-p comm process-name)
+ (throw 'result t))))))))
;; When calling "emacs -Q", `auth-source-search' won't be called. If
;; you want to debug exactly this case, call "emacs -Q --eval '(setq
diff --git a/lisp/outline.el b/lisp/outline.el
index 696d109f1ee..9f73ca0d0c7 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -178,13 +178,22 @@ in the file it applies to.")
map))
(defcustom outline-minor-mode-cycle-filter nil
- "Filter out positions on the heading available for cycling."
+ "Control where on a heading the visibility-cycling commands are bound to keys.
+This option controls, in Outline minor mode, where on a heading typing
+the key sequences bound to visibility-cycling commands like `outline-cycle'
+and `outline-cycle-buffer' will invoke those commands. By default, you can
+invoke these commands by typing `TAB' and `S-TAB' anywhere on a heading line,
+but customizing this option can make those bindings be in effect only at
+specific positions on the heading, like only at the line's beginning or
+line's end. This allows these keys to be bound to their usual commands,
+as determined by the major mode, elsewhere on the heading lines.
+This option is only in effect when `outline-minor-mode-cycle' is non-nil."
:type '(choice (const :tag "Everywhere" nil)
(const :tag "At line beginning" bolp)
(const :tag "Not at line beginning"
(lambda () (not (bolp))))
(const :tag "At line end" eolp)
- (function :tag "Custom filter"))
+ (function :tag "Custom filter function"))
:version "28.1")
(defvar outline-minor-mode-cycle)
@@ -371,28 +380,33 @@ After that, changing the prefix key requires manipulating keymaps."
(set-default sym val)))
(defcustom outline-minor-mode-cycle nil
- "Enable cycling of headings in `outline-minor-mode'.
-When enabled, it puts a keymap with cycling keys on heading lines.
-When point is on a heading line, then typing `TAB' cycles between `hide all',
-`headings only' and `show all' (`outline-cycle'). Typing `S-TAB' on
-a heading line cycles the whole buffer (`outline-cycle-buffer').
-Typing these keys anywhere outside heading lines uses their default bindings."
+ "Enable visibility-cycling commands on headings in `outline-minor-mode'.
+If enabled, typing `TAB' on a heading line cycles the visibility
+state of that heading's body between `hide all', `headings only'
+and `show all' (`outline-cycle'), and typing `S-TAB' on a heading
+line likewise cycles the visibility state of the whole buffer
+\(`outline-cycle-buffer').
+Typing these keys anywhere outside heading lines invokes their default
+bindings, per the current major mode."
:type 'boolean
:safe #'booleanp
:version "28.1")
(defcustom outline-minor-mode-highlight nil
- "Highlight headings in `outline-minor-mode' using font-lock keywords.
-Non-nil value works well only when outline font-lock keywords
-don't conflict with the major mode's font-lock keywords.
-When t, it puts outline faces only if there are no major mode's faces
-on headings. When `override', it completely overwrites major mode's
-faces with outline faces. When `append', it tries to append outline
-faces to major mode's faces."
- :type '(choice (const :tag "No highlighting" nil)
- (const :tag "Overwrite major mode faces" override)
- (const :tag "Append outline faces to major mode faces" append)
- (const :tag "Highlight separately from major mode faces" t))
+ "Whether to highlight headings in `outline-minor-mode' using font-lock keywords.
+This option controles whether `outline-minor-mode' will use its font-lock
+keywords to highlight headings, which could potentially conflict with
+font-lock faces defined by the major mode. Thus, a non-nil value will
+work well only when there's no such conflict.
+If the value is t, use outline faces only if there are no major mode's
+font-lock faces on headings. When `override', completely overwrite major
+mode's font-lock faces with outline faces. When `append', try to append
+outline font-lock faces to those of major mode."
+ :type '(choice (const :tag "Do not use outline font-lock highlighting" nil)
+ (const :tag "Overwrite major mode font-lock faces" override)
+ (const :tag "Append outline font-lock faces to major mode's"
+ append)
+ (const :tag "Highlight with outline font-lock faces only if major mode doesn't" t))
:safe #'symbolp
:version "28.1")
@@ -1521,11 +1535,14 @@ Return either 'hide-all, 'headings-only, or 'show-all."
(save-excursion (outline-end-of-subtree) (point)))))
(defun outline-cycle ()
- "Cycle between `hide all', `headings only' and `show all'.
+ "Cycle visibility state of the current heading line's body.
-`Hide all' means hide all subheadings and their bodies.
-`Headings only' means show sub headings but not their bodies.
-`Show all' means show all subheadings and their bodies."
+This cycles the visibility of the current heading line's subheadings
+and body between `hide all', `headings only' and `show all'.
+
+`Hide all' means hide all the subheadings and their bodies.
+`Headings only' means show the subheadings, but not their bodies.
+`Show all' means show all the subheadings and their bodies."
(interactive)
(condition-case nil
(pcase (outline--cycle-state)
@@ -1547,7 +1564,15 @@ Return either 'hide-all, 'headings-only, or 'show-all."
"Internal variable used for tracking buffer cycle state.")
(defun outline-cycle-buffer ()
- "Cycle the whole buffer like in `outline-cycle'."
+ "Cycle visibility state of the body lines of the whole buffer.
+
+This cycles the visibility of all the subheadings and bodies of all
+the heading lines in the buffer. It cycles them between `hide all',
+`headings only' and `show all'.
+
+`Hide all' means hide all the buffer's subheadings and their bodies.
+`Headings only' means show all the subheadings, but not their bodies.
+`Show all' means show all the buffer's subheadings and their bodies."
(interactive)
(let (has-top-level)
(save-excursion
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index c6693b4de53..642aad509c4 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -8396,30 +8396,30 @@ buffer."
((visible-list (vhdl-get-visible-signals))
;; define syntactic regions where signals are read
(scan-regions-list
- '(;; right-hand side of signal/variable assignment
+ `(;; right-hand side of signal/variable assignment
;; (special case: "<=" is relational operator in a condition)
- ((vhdl-re-search-forward "[<:]=" proc-end t)
- (vhdl-re-search-forward ";\\|\\<\\(then\\|loop\\|report\\|severity\\|is\\)\\>" proc-end t))
+ ((vhdl-re-search-forward "[<:]=" ,proc-end t)
+ (vhdl-re-search-forward ";\\|\\<\\(then\\|loop\\|report\\|severity\\|is\\)\\>" ,proc-end t))
;; if condition
- ((vhdl-re-search-forward "^\\s-*if\\>" proc-end t)
- (vhdl-re-search-forward "\\<then\\>" proc-end t))
+ ((vhdl-re-search-forward "^\\s-*if\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\<then\\>" ,proc-end t))
;; elsif condition
- ((vhdl-re-search-forward "\\<elsif\\>" proc-end t)
- (vhdl-re-search-forward "\\<then\\>" proc-end t))
+ ((vhdl-re-search-forward "\\<elsif\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\<then\\>" ,proc-end t))
;; while loop condition
- ((vhdl-re-search-forward "^\\s-*while\\>" proc-end t)
- (vhdl-re-search-forward "\\<loop\\>" proc-end t))
+ ((vhdl-re-search-forward "^\\s-*while\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\<loop\\>" ,proc-end t))
;; exit/next condition
- ((vhdl-re-search-forward "\\<\\(exit\\|next\\)\\s-+\\w+\\s-+when\\>" proc-end t)
- (vhdl-re-search-forward ";" proc-end t))
+ ((vhdl-re-search-forward "\\<\\(exit\\|next\\)\\s-+\\w+\\s-+when\\>" ,proc-end t)
+ (vhdl-re-search-forward ";" ,proc-end t))
;; assert condition
- ((vhdl-re-search-forward "\\<assert\\>" proc-end t)
- (vhdl-re-search-forward "\\(\\<report\\>\\|\\<severity\\>\\|;\\)" proc-end t))
+ ((vhdl-re-search-forward "\\<assert\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\(\\<report\\>\\|\\<severity\\>\\|;\\)" ,proc-end t))
;; case expression
- ((vhdl-re-search-forward "^\\s-*case\\>" proc-end t)
- (vhdl-re-search-forward "\\<is\\>" proc-end t))
+ ((vhdl-re-search-forward "^\\s-*case\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\<is\\>" ,proc-end t))
;; parameter list of procedure call, array index
- ((and (re-search-forward "^\\s-*\\(\\w\\|\\.\\)+[ \t\n\r\f]*(" proc-end t)
+ ((and (re-search-forward "^\\s-*\\(\\w\\|\\.\\)+[ \t\n\r\f]*(" ,proc-end t)
(1- (point)))
(progn (backward-char) (forward-sexp)
(while (looking-at "(") (forward-sexp)) (point)))))
diff --git a/lisp/simple.el b/lisp/simple.el
index bbab57703de..7e964c9d1d5 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -222,7 +222,7 @@ rejected, and the function returns nil."
(defcustom next-error-find-buffer-function #'ignore
"Function called to find a `next-error' capable buffer.
-This functions takes the same three arguments as the function
+This function takes the same three arguments as the function
`next-error-find-buffer', and should return the buffer to be
used by the subsequent invocation of the command `next-error'
and `previous-error'.
@@ -5289,7 +5289,7 @@ If `kill-append-merge-undo' is non-nil, remove the last undo
boundary in the current buffer."
(let ((cur (car kill-ring)))
(kill-new (if before-p (concat string cur) (concat cur string))
- (or (string= cur "")
+ (or (= (length cur) 0)
(null (get-text-property 0 'yank-handler cur)))))
(when (and kill-append-merge-undo (not buffer-read-only))
(let ((prev buffer-undo-list)
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 836630acb5d..ee394a93af4 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -640,7 +640,7 @@ Returns nil if unable to find this information."
;; Could run `bzr status' in the directory and see if it succeeds, but
;; that's relatively expensive.
(defalias 'vc-bzr-responsible-p #'vc-bzr-root
- "Return non-nil if FILE is (potentially) controlled by bzr.
+ "Return the directory if FILE is (potentially) controlled by bzr.
The criterion is that there is a `.bzr' directory in the same
or a superior directory.")
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index e234b9a0447..8f06d5a847a 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -308,7 +308,7 @@ to the CVS command."
(vc-switches 'CVS 'register)))
(defun vc-cvs-responsible-p (file)
- "Return non-nil if CVS thinks it is responsible for FILE."
+ "Return the directory if CVS thinks it is responsible for FILE."
(let ((dir (if (file-directory-p file)
file
(file-name-directory file))))
diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el
index 61e2cd23900..94621599e4a 100644
--- a/lisp/vc/vc-dav.el
+++ b/lisp/vc/vc-dav.el
@@ -137,9 +137,9 @@ It should return a status of either 0 (no differences found), or
)
(defun vc-dav-responsible-p (url)
- "Return non-nil if DAV considers itself `responsible' for URL."
+ "Return the URL if DAV considers itself `responsible' for URL."
;; Check for DAV support on the web server.
- (and t url))
+ url)
;;; Unimplemented functions
;;
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 20f3b1fba71..fb57b2bbc6e 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -288,7 +288,7 @@ to the RCS command."
(match-string 1))))))
(defun vc-rcs-responsible-p (file)
- "Return non-nil if RCS thinks it would be responsible for registering FILE."
+ "Return the directory if RCS thinks it would be responsible for FILE."
;; TODO: check for all the patterns in vc-rcs-master-templates
(let ((dir (if (file-directory-p file)
file
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 4bbf92b3274..1035ee9ce9d 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -212,7 +212,7 @@ to the SCCS command."
(vc-sccs-do-command nil 0 "get" (vc-master-name file)))))
(defun vc-sccs-responsible-p (file)
- "Return non-nil if SCCS thinks it would be responsible for registering FILE."
+ "Return the directory if SCCS thinks it would be responsible for FILE."
;; TODO: check for all the patterns in vc-sccs-master-templates
(or (and (file-directory-p
(expand-file-name "SCCS" (file-name-directory file)))
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index 1c1a7b5d139..5a252c55cb2 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -242,11 +242,13 @@ This function differs from vc-do-command in that it invokes `vc-src-program'."
(vc-src-command nil files "add"))
(defun vc-src-responsible-p (file)
- "Return non-nil if SRC thinks it would be responsible for registering FILE."
- (file-directory-p (expand-file-name ".src"
- (if (file-directory-p file)
- file
- (file-name-directory file)))))
+ "Return the directory if SRC thinks it would be responsible for FILE."
+ (let ((dir (expand-file-name ".src"
+ (if (file-directory-p file)
+ file
+ (file-name-directory file)))))
+ (and (file-directory-p dir)
+ dir)))
(defun vc-src-checkin (files comment &optional _rev)
"SRC-specific version of `vc-backend-checkin'.
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index a6124acadd2..3508f684c49 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -220,7 +220,7 @@
;;
;; - responsible-p (file)
;;
-;; Return non-nil if this backend considers itself "responsible" for
+;; Return the directory if this backend considers itself "responsible" for
;; FILE, which can also be a directory. This function is used to find
;; out what backend to use for registration of new files and for things
;; like change log generation. The default implementation always