2021-04-10 12:08:36 -04:00
|
|
|
|
;;; files-x.el --- extended file handling commands -*- lexical-binding: t; -*-
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
2025-01-01 07:39:17 +00:00
|
|
|
|
;; Copyright (C) 2009-2025 Free Software Foundation, Inc.
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;; Author: Juri Linkov <juri@jurta.org>
|
2019-05-25 13:43:06 -07:00
|
|
|
|
;; Maintainer: emacs-devel@gnu.org
|
2009-08-12 20:29:30 +00:00
|
|
|
|
;; Keywords: files
|
2010-08-29 12:17:13 -04:00
|
|
|
|
;; Package: emacs
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
|
|
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
|
|
|
|
;; it under the terms of the GNU General Public License as published by
|
|
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
;; (at your option) any later version.
|
|
|
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2017-09-13 15:52:52 -07:00
|
|
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
|
|
;; This file defines additional infrequently used file- and
|
|
|
|
|
;; directory-handling commands that should not be in files.el
|
|
|
|
|
;; to not make the dumped image bigger.
|
|
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
2018-11-08 00:27:58 +02:00
|
|
|
|
(eval-when-compile (require 'subr-x)) ; for string-trim-right
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(declare-function dosified-file-name "dos-fns" (file-name))
|
|
|
|
|
(declare-function project-root "project" (project))
|
2018-11-08 00:27:58 +02:00
|
|
|
|
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;; Commands to add/delete file-local/directory-local variables.
|
|
|
|
|
|
|
|
|
|
(defun read-file-local-variable (prompt)
|
|
|
|
|
"Read file-local variable using PROMPT and completion.
|
|
|
|
|
Intended to be used in the `interactive' spec of
|
|
|
|
|
`add-file-local-variable', `delete-file-local-variable',
|
|
|
|
|
`add-dir-local-variable', `delete-dir-local-variable'."
|
2013-06-25 09:07:04 -04:00
|
|
|
|
(let* ((default (variable-at-point))
|
|
|
|
|
(default (and (symbolp default) (boundp default)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(symbol-name default)))
|
2013-06-25 09:07:04 -04:00
|
|
|
|
(variable
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(completing-read
|
Use `format-prompt' when prompting with default values
* lisp/woman.el (woman-file-name):
* lisp/wid-edit.el (widget-file-prompt-value)
(widget-coding-system-prompt-value):
* lisp/w32-fns.el (w32-set-system-coding-system):
* lisp/vc/vc.el (vc-print-root-log):
* lisp/vc/vc-annotate.el (vc-annotate):
* lisp/vc/emerge.el (emerge-read-file-name):
* lisp/vc/ediff.el (ediff-directories)
(ediff-directory-revisions, ediff-directories3)
(ediff-merge-directories, )
(ediff-merge-directories-with-ancestor)
(ediff-merge-directory-revisions)
(ediff-merge-directory-revisions-with-ancestor)
(ediff-merge-revisions, ediff-merge-revisions-with-ancestor)
(ediff-revision):
* lisp/vc/ediff-util.el (ediff-toggle-regexp-match):
* lisp/vc/ediff-mult.el (ediff-filegroup-action):
* lisp/vc/add-log.el (prompt-for-change-log-name):
* lisp/textmodes/table.el (table-insert-row-column)
(table-span-cell, table-split-cell-horizontally)
(table-split-cell, table-justify, table-generate-source)
(table-insert-sequence, table-capture)
(table--read-from-minibuffer, table--query-justification):
* lisp/textmodes/sgml-mode.el (sgml-tag, sgml-tag-help):
* lisp/textmodes/reftex-ref.el (reftex-goto-label):
* lisp/textmodes/refer.el (refer-get-bib-files):
* lisp/textmodes/css-mode.el (css-lookup-symbol):
* lisp/term.el (serial-read-name, serial-read-speed):
* lisp/speedbar.el (speedbar-change-initial-expansion-list):
* lisp/simple.el (previous-matching-history-element)
(set-variable):
* lisp/ses.el (ses-read-cell, ses-set-column-width):
* lisp/replace.el (query-replace-read-from)
(occur-read-primary-args):
* lisp/rect.el (string-rectangle, string-insert-rectangle):
* lisp/progmodes/tcl.el (tcl-help-on-word):
* lisp/progmodes/sh-script.el (sh-set-shell):
* lisp/progmodes/python.el (python-eldoc-at-point):
* lisp/progmodes/octave.el (octave-completing-read)
(octave-update-function-file-comment, octave-insert-defun):
* lisp/progmodes/inf-lisp.el (lisp-symprompt):
* lisp/progmodes/cperl-mode.el (cperl-info-on-command)
(cperl-perldoc):
* lisp/progmodes/compile.el (compilation-find-file):
* lisp/net/rcirc.el (rcirc-prompt-for-encryption):
* lisp/net/eww.el (eww):
* lisp/net/browse-url.el (browse-url-with-browser-kind):
* lisp/man.el (man):
* lisp/mail/sendmail.el (sendmail-query-user-about-smtp):
* lisp/mail/mailalias.el (build-mail-aliases):
* lisp/mail/mailabbrev.el (merge-mail-abbrevs)
(rebuild-mail-abbrevs):
* lisp/locate.el (locate-prompt-for-search-string):
* lisp/isearch.el (isearch-occur):
* lisp/international/ogonek.el (ogonek-read-encoding)
(ogonek-read-prefix):
* lisp/international/mule.el (read-buffer-file-coding-system)
(set-terminal-coding-system, set-keyboard-coding-system)
(set-next-selection-coding-system, recode-region):
* lisp/international/mule-cmds.el ()
(universal-coding-system-argument, search-unencodable-char)
(select-safe-coding-system-interactively):
* lisp/info.el (Info-search, Info-search-backward, Info-menu):
* lisp/info-look.el (info-lookup-interactive-arguments):
* lisp/imenu.el (imenu--completion-buffer):
* lisp/ibuf-ext.el (mode, used-mode, ibuffer-mark-by-mode):
* lisp/hi-lock.el (hi-lock-unface-buffer)
(hi-lock-read-face-name):
* lisp/help.el (view-emacs-news, where-is):
* lisp/help-fns.el (describe-variable, describe-symbol)
(describe-keymap):
* lisp/gnus/mm-decode.el (mm-save-part):
* lisp/gnus/gnus-sum.el (gnus-summary-browse-url):
* lisp/gnus/gnus-group.el (gnus-group--read-bug-ids)
(gnus-group-set-current-level):
* lisp/frame.el (make-frame-on-monitor)
(close-display-connection, select-frame-by-name):
* lisp/format.el (format-encode-buffer, format-encode-region):
* lisp/files.el (recode-file-name):
* lisp/files-x.el (read-file-local-variable)
(read-file-local-variable-value, )
(read-file-local-variable-mode):
* lisp/ffap.el (ffap-menu-ask):
* lisp/faces.el (face-read-string):
* lisp/facemenu.el (facemenu-set-charset):
* lisp/erc/erc-dcc.el (erc-dcc-do-GET-command):
* lisp/emulation/edt-mapper.el (edt-mapper):
* lisp/emacs-lisp/trace.el (trace--read-args)
(trace-function-foreground, trace-function-background):
* lisp/emacs-lisp/smie.el (smie-config-set-indent):
* lisp/emacs-lisp/re-builder.el (reb-change-syntax):
* lisp/emacs-lisp/package.el (describe-package):
* lisp/emacs-lisp/find-func.el (read-library-name)
(find-function-read):
* lisp/emacs-lisp/ert.el (ert-read-test-name)
(ert-run-tests-interactively):
* lisp/emacs-lisp/disass.el (disassemble):
* lisp/emacs-lisp/debug.el (debug-on-entry)
(debug-on-variable-change):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-read-regexp):
* lisp/dired-x.el (dired--mark-suffix-interactive-spec):
* lisp/dired-aux.el (dired-diff):
* lisp/cus-edit.el (custom-variable-prompt, customize-mode)
(customize-changed-options):
* lisp/completion.el (interactive-completion-string-reader):
* lisp/calendar/timeclock.el (timeclock-ask-for-project):
* lisp/calc/calcalg3.el (calc-get-fit-variables):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-bin.el (calc-word-size):
* lisp/bookmark.el (bookmark-set-internal):
* lisp/abbrev.el (read-abbrev-file): Use `format-prompt' for
prompting (bug#12443).
2020-09-06 16:56:44 +02:00
|
|
|
|
(format-prompt prompt default)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
obarray
|
|
|
|
|
(lambda (sym)
|
2012-04-09 20:36:01 +08:00
|
|
|
|
(or (custom-variable-p sym)
|
2009-10-07 14:33:31 +00:00
|
|
|
|
(get sym 'safe-local-variable)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(memq sym '(mode eval coding unibyte))))
|
2013-06-25 09:07:04 -04:00
|
|
|
|
nil nil nil default nil)))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(and (stringp variable) (intern variable))))
|
|
|
|
|
|
|
|
|
|
(defun read-file-local-variable-value (variable)
|
|
|
|
|
"Read value of file-local VARIABLE using completion.
|
|
|
|
|
Intended to be used in the `interactive' spec of
|
|
|
|
|
`add-file-local-variable' and `add-dir-local-variable'."
|
2013-06-25 09:07:04 -04:00
|
|
|
|
(cond
|
|
|
|
|
((eq variable 'mode)
|
|
|
|
|
(let* ((default (and (symbolp major-mode) (symbol-name major-mode)))
|
|
|
|
|
(value
|
|
|
|
|
(completing-read
|
Use `format-prompt' when prompting with default values
* lisp/woman.el (woman-file-name):
* lisp/wid-edit.el (widget-file-prompt-value)
(widget-coding-system-prompt-value):
* lisp/w32-fns.el (w32-set-system-coding-system):
* lisp/vc/vc.el (vc-print-root-log):
* lisp/vc/vc-annotate.el (vc-annotate):
* lisp/vc/emerge.el (emerge-read-file-name):
* lisp/vc/ediff.el (ediff-directories)
(ediff-directory-revisions, ediff-directories3)
(ediff-merge-directories, )
(ediff-merge-directories-with-ancestor)
(ediff-merge-directory-revisions)
(ediff-merge-directory-revisions-with-ancestor)
(ediff-merge-revisions, ediff-merge-revisions-with-ancestor)
(ediff-revision):
* lisp/vc/ediff-util.el (ediff-toggle-regexp-match):
* lisp/vc/ediff-mult.el (ediff-filegroup-action):
* lisp/vc/add-log.el (prompt-for-change-log-name):
* lisp/textmodes/table.el (table-insert-row-column)
(table-span-cell, table-split-cell-horizontally)
(table-split-cell, table-justify, table-generate-source)
(table-insert-sequence, table-capture)
(table--read-from-minibuffer, table--query-justification):
* lisp/textmodes/sgml-mode.el (sgml-tag, sgml-tag-help):
* lisp/textmodes/reftex-ref.el (reftex-goto-label):
* lisp/textmodes/refer.el (refer-get-bib-files):
* lisp/textmodes/css-mode.el (css-lookup-symbol):
* lisp/term.el (serial-read-name, serial-read-speed):
* lisp/speedbar.el (speedbar-change-initial-expansion-list):
* lisp/simple.el (previous-matching-history-element)
(set-variable):
* lisp/ses.el (ses-read-cell, ses-set-column-width):
* lisp/replace.el (query-replace-read-from)
(occur-read-primary-args):
* lisp/rect.el (string-rectangle, string-insert-rectangle):
* lisp/progmodes/tcl.el (tcl-help-on-word):
* lisp/progmodes/sh-script.el (sh-set-shell):
* lisp/progmodes/python.el (python-eldoc-at-point):
* lisp/progmodes/octave.el (octave-completing-read)
(octave-update-function-file-comment, octave-insert-defun):
* lisp/progmodes/inf-lisp.el (lisp-symprompt):
* lisp/progmodes/cperl-mode.el (cperl-info-on-command)
(cperl-perldoc):
* lisp/progmodes/compile.el (compilation-find-file):
* lisp/net/rcirc.el (rcirc-prompt-for-encryption):
* lisp/net/eww.el (eww):
* lisp/net/browse-url.el (browse-url-with-browser-kind):
* lisp/man.el (man):
* lisp/mail/sendmail.el (sendmail-query-user-about-smtp):
* lisp/mail/mailalias.el (build-mail-aliases):
* lisp/mail/mailabbrev.el (merge-mail-abbrevs)
(rebuild-mail-abbrevs):
* lisp/locate.el (locate-prompt-for-search-string):
* lisp/isearch.el (isearch-occur):
* lisp/international/ogonek.el (ogonek-read-encoding)
(ogonek-read-prefix):
* lisp/international/mule.el (read-buffer-file-coding-system)
(set-terminal-coding-system, set-keyboard-coding-system)
(set-next-selection-coding-system, recode-region):
* lisp/international/mule-cmds.el ()
(universal-coding-system-argument, search-unencodable-char)
(select-safe-coding-system-interactively):
* lisp/info.el (Info-search, Info-search-backward, Info-menu):
* lisp/info-look.el (info-lookup-interactive-arguments):
* lisp/imenu.el (imenu--completion-buffer):
* lisp/ibuf-ext.el (mode, used-mode, ibuffer-mark-by-mode):
* lisp/hi-lock.el (hi-lock-unface-buffer)
(hi-lock-read-face-name):
* lisp/help.el (view-emacs-news, where-is):
* lisp/help-fns.el (describe-variable, describe-symbol)
(describe-keymap):
* lisp/gnus/mm-decode.el (mm-save-part):
* lisp/gnus/gnus-sum.el (gnus-summary-browse-url):
* lisp/gnus/gnus-group.el (gnus-group--read-bug-ids)
(gnus-group-set-current-level):
* lisp/frame.el (make-frame-on-monitor)
(close-display-connection, select-frame-by-name):
* lisp/format.el (format-encode-buffer, format-encode-region):
* lisp/files.el (recode-file-name):
* lisp/files-x.el (read-file-local-variable)
(read-file-local-variable-value, )
(read-file-local-variable-mode):
* lisp/ffap.el (ffap-menu-ask):
* lisp/faces.el (face-read-string):
* lisp/facemenu.el (facemenu-set-charset):
* lisp/erc/erc-dcc.el (erc-dcc-do-GET-command):
* lisp/emulation/edt-mapper.el (edt-mapper):
* lisp/emacs-lisp/trace.el (trace--read-args)
(trace-function-foreground, trace-function-background):
* lisp/emacs-lisp/smie.el (smie-config-set-indent):
* lisp/emacs-lisp/re-builder.el (reb-change-syntax):
* lisp/emacs-lisp/package.el (describe-package):
* lisp/emacs-lisp/find-func.el (read-library-name)
(find-function-read):
* lisp/emacs-lisp/ert.el (ert-read-test-name)
(ert-run-tests-interactively):
* lisp/emacs-lisp/disass.el (disassemble):
* lisp/emacs-lisp/debug.el (debug-on-entry)
(debug-on-variable-change):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-read-regexp):
* lisp/dired-x.el (dired--mark-suffix-interactive-spec):
* lisp/dired-aux.el (dired-diff):
* lisp/cus-edit.el (custom-variable-prompt, customize-mode)
(customize-changed-options):
* lisp/completion.el (interactive-completion-string-reader):
* lisp/calendar/timeclock.el (timeclock-ask-for-project):
* lisp/calc/calcalg3.el (calc-get-fit-variables):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-bin.el (calc-word-size):
* lisp/bookmark.el (bookmark-set-internal):
* lisp/abbrev.el (read-abbrev-file): Use `format-prompt' for
prompting (bug#12443).
2020-09-06 16:56:44 +02:00
|
|
|
|
(format-prompt "Add %s with value" default variable)
|
2013-06-25 09:07:04 -04:00
|
|
|
|
obarray
|
|
|
|
|
(lambda (sym)
|
|
|
|
|
(string-match-p "-mode\\'" (symbol-name sym)))
|
|
|
|
|
nil nil nil default nil)))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(and (stringp value)
|
2013-06-25 09:07:04 -04:00
|
|
|
|
(intern (replace-regexp-in-string "-mode\\'" "" value)))))
|
|
|
|
|
((eq variable 'eval)
|
|
|
|
|
(read--expression (format "Add %s with expression: " variable)))
|
|
|
|
|
((eq variable 'coding)
|
|
|
|
|
(let ((default (and (symbolp buffer-file-coding-system)
|
|
|
|
|
(symbol-name buffer-file-coding-system))))
|
Use `format-prompt' when prompting with default values
* lisp/woman.el (woman-file-name):
* lisp/wid-edit.el (widget-file-prompt-value)
(widget-coding-system-prompt-value):
* lisp/w32-fns.el (w32-set-system-coding-system):
* lisp/vc/vc.el (vc-print-root-log):
* lisp/vc/vc-annotate.el (vc-annotate):
* lisp/vc/emerge.el (emerge-read-file-name):
* lisp/vc/ediff.el (ediff-directories)
(ediff-directory-revisions, ediff-directories3)
(ediff-merge-directories, )
(ediff-merge-directories-with-ancestor)
(ediff-merge-directory-revisions)
(ediff-merge-directory-revisions-with-ancestor)
(ediff-merge-revisions, ediff-merge-revisions-with-ancestor)
(ediff-revision):
* lisp/vc/ediff-util.el (ediff-toggle-regexp-match):
* lisp/vc/ediff-mult.el (ediff-filegroup-action):
* lisp/vc/add-log.el (prompt-for-change-log-name):
* lisp/textmodes/table.el (table-insert-row-column)
(table-span-cell, table-split-cell-horizontally)
(table-split-cell, table-justify, table-generate-source)
(table-insert-sequence, table-capture)
(table--read-from-minibuffer, table--query-justification):
* lisp/textmodes/sgml-mode.el (sgml-tag, sgml-tag-help):
* lisp/textmodes/reftex-ref.el (reftex-goto-label):
* lisp/textmodes/refer.el (refer-get-bib-files):
* lisp/textmodes/css-mode.el (css-lookup-symbol):
* lisp/term.el (serial-read-name, serial-read-speed):
* lisp/speedbar.el (speedbar-change-initial-expansion-list):
* lisp/simple.el (previous-matching-history-element)
(set-variable):
* lisp/ses.el (ses-read-cell, ses-set-column-width):
* lisp/replace.el (query-replace-read-from)
(occur-read-primary-args):
* lisp/rect.el (string-rectangle, string-insert-rectangle):
* lisp/progmodes/tcl.el (tcl-help-on-word):
* lisp/progmodes/sh-script.el (sh-set-shell):
* lisp/progmodes/python.el (python-eldoc-at-point):
* lisp/progmodes/octave.el (octave-completing-read)
(octave-update-function-file-comment, octave-insert-defun):
* lisp/progmodes/inf-lisp.el (lisp-symprompt):
* lisp/progmodes/cperl-mode.el (cperl-info-on-command)
(cperl-perldoc):
* lisp/progmodes/compile.el (compilation-find-file):
* lisp/net/rcirc.el (rcirc-prompt-for-encryption):
* lisp/net/eww.el (eww):
* lisp/net/browse-url.el (browse-url-with-browser-kind):
* lisp/man.el (man):
* lisp/mail/sendmail.el (sendmail-query-user-about-smtp):
* lisp/mail/mailalias.el (build-mail-aliases):
* lisp/mail/mailabbrev.el (merge-mail-abbrevs)
(rebuild-mail-abbrevs):
* lisp/locate.el (locate-prompt-for-search-string):
* lisp/isearch.el (isearch-occur):
* lisp/international/ogonek.el (ogonek-read-encoding)
(ogonek-read-prefix):
* lisp/international/mule.el (read-buffer-file-coding-system)
(set-terminal-coding-system, set-keyboard-coding-system)
(set-next-selection-coding-system, recode-region):
* lisp/international/mule-cmds.el ()
(universal-coding-system-argument, search-unencodable-char)
(select-safe-coding-system-interactively):
* lisp/info.el (Info-search, Info-search-backward, Info-menu):
* lisp/info-look.el (info-lookup-interactive-arguments):
* lisp/imenu.el (imenu--completion-buffer):
* lisp/ibuf-ext.el (mode, used-mode, ibuffer-mark-by-mode):
* lisp/hi-lock.el (hi-lock-unface-buffer)
(hi-lock-read-face-name):
* lisp/help.el (view-emacs-news, where-is):
* lisp/help-fns.el (describe-variable, describe-symbol)
(describe-keymap):
* lisp/gnus/mm-decode.el (mm-save-part):
* lisp/gnus/gnus-sum.el (gnus-summary-browse-url):
* lisp/gnus/gnus-group.el (gnus-group--read-bug-ids)
(gnus-group-set-current-level):
* lisp/frame.el (make-frame-on-monitor)
(close-display-connection, select-frame-by-name):
* lisp/format.el (format-encode-buffer, format-encode-region):
* lisp/files.el (recode-file-name):
* lisp/files-x.el (read-file-local-variable)
(read-file-local-variable-value, )
(read-file-local-variable-mode):
* lisp/ffap.el (ffap-menu-ask):
* lisp/faces.el (face-read-string):
* lisp/facemenu.el (facemenu-set-charset):
* lisp/erc/erc-dcc.el (erc-dcc-do-GET-command):
* lisp/emulation/edt-mapper.el (edt-mapper):
* lisp/emacs-lisp/trace.el (trace--read-args)
(trace-function-foreground, trace-function-background):
* lisp/emacs-lisp/smie.el (smie-config-set-indent):
* lisp/emacs-lisp/re-builder.el (reb-change-syntax):
* lisp/emacs-lisp/package.el (describe-package):
* lisp/emacs-lisp/find-func.el (read-library-name)
(find-function-read):
* lisp/emacs-lisp/ert.el (ert-read-test-name)
(ert-run-tests-interactively):
* lisp/emacs-lisp/disass.el (disassemble):
* lisp/emacs-lisp/debug.el (debug-on-entry)
(debug-on-variable-change):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-read-regexp):
* lisp/dired-x.el (dired--mark-suffix-interactive-spec):
* lisp/dired-aux.el (dired-diff):
* lisp/cus-edit.el (custom-variable-prompt, customize-mode)
(customize-changed-options):
* lisp/completion.el (interactive-completion-string-reader):
* lisp/calendar/timeclock.el (timeclock-ask-for-project):
* lisp/calc/calcalg3.el (calc-get-fit-variables):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-bin.el (calc-word-size):
* lisp/bookmark.el (bookmark-set-internal):
* lisp/abbrev.el (read-abbrev-file): Use `format-prompt' for
prompting (bug#12443).
2020-09-06 16:56:44 +02:00
|
|
|
|
(read-coding-system (format-prompt "Add %s with value" default variable)
|
|
|
|
|
default)))
|
2013-06-25 09:07:04 -04:00
|
|
|
|
(t
|
|
|
|
|
(let ((default (format "%S"
|
|
|
|
|
(cond ((eq variable 'unibyte) t)
|
|
|
|
|
((boundp variable)
|
Remove many items obsolete since 24.1
* lisp/allout.el (allout-abbreviate-flattened-numbering)
(allout-mode-deactivate-hook):
* lisp/ansi-color.el (ansi-color-unfontify-region):
* lisp/auth-source.el (auth-source-hide-passwords)
(auth-source-user-or-password)
(auth-source-forget-user-or-password):
* lisp/cedet/data-debug.el (data-debug-map):
* lisp/cedet/semantic/grammar.el (semantic-grammar-syntax-table)
(semantic-grammar-map):
* lisp/chistory.el (command-history-map):
* lisp/comint.el (comint-dynamic-complete)
(comint-dynamic-complete-as-filename)
(comint-dynamic-simple-complete):
* lisp/dired-x.el (read-filename-at-point)
(dired-x-submit-report):
* lisp/dos-fns.el (register-name-alist, make-register)
(register-value, set-register-value, intdos, mode25, mode4350):
* lisp/emacs-lisp/bytecomp.el (byte-compile-disable-print-circle):
* lisp/emacs-lisp/chart.el (chart-map):
* lisp/emacs-lisp/package.el (package-menu-view-commentary):
* lisp/emacs-lock.el (toggle-emacs-lock, emacs-lock-from-exiting):
* lisp/erc/erc.el (erc-complete-word):
* lisp/eshell/em-cmpl.el (eshell-cmpl-suffix-list):
* lisp/eshell/esh-util.el (eshell-for):
* lisp/files.el (inhibit-first-line-modes-regexps)
(inhibit-first-line-modes-suffixes):
* lisp/gnus/gnus-msg.el (gnus-outgoing-message-group)
(gnus-debug-files, gnus-debug-exclude-variables):
* lisp/gnus/gnus-registry.el (gnus-registry-user-format-function-M):
* lisp/gnus/gnus.el (gnus-local-domain, gnus-carpal):
* lisp/gnus/nnimap.el (nnimap-split-rule):
* lisp/iimage.el (turn-on-iimage-mode):
* lisp/image.el (image-extension-data, image-library-alist):
* lisp/mail/emacsbug.el (report-emacs-bug-pretest-address):
* lisp/mail/mail-utils.el (rmail-dont-reply-to):
* lisp/mail/mailalias.el (mail-complete-function)
(mail-completion-at-point-function):
* lisp/mail/rmail.el (rmail-dont-reply-to-names)
(rmail-default-dont-reply-to-names):
* lisp/mail/sendmail.el (mail-mailer-swallows-blank-line)
(mail-sent-via):
* lisp/menu-bar.el (menu-bar-kill-ring-save):
* lisp/minibuffer.el (completion-annotate-function)
(minibuffer-local-filename-must-match-map):
* lisp/msb.el (msb-after-load-hooks):
* lisp/obsolete/eieio-compat.el (eieio-defmethod)
(eieio-defgeneric):
* lisp/obsolete/info-edit.el (Info-edit-map):
* lisp/obsolete/starttls.el (starttls-any-program-available):
* lisp/progmodes/cfengine.el (cfengine-mode-abbrevs):
* lisp/progmodes/cwarn.el (turn-on-cwarn-mode):
* lisp/progmodes/make-mode.el (makefile-complete):
* lisp/progmodes/meta-mode.el (meta-complete-symbol)
(meta-mode-map):
* lisp/progmodes/pascal.el (pascal-toggle-completions)
(pascal-last-completions, pascal-show-completions):
* lisp/progmodes/prolog.el (prolog-char-quote-workaround):
* lisp/progmodes/which-func.el (which-func-mode): [FUNCTION]
* lisp/simple.el (count-lines-region, minibuffer-completing-symbol):
* lisp/speedbar.el (speedbar-syntax-table, speedbar-key-map):
* lisp/strokes.el (strokes-report-bug):
* lisp/subr.el (condition-case-no-debug):
* lisp/term/ns-win.el (ns-alternatives-map)
(ns-store-cut-buffer-internal):
* lisp/term/w32-win.el (w32-default-color-map):
* lisp/term/x-win.el (x-cut-buffer-or-selection-value):
* lisp/textmodes/bibtex.el (bibtex-complete)
(bibtex-entry-field-alist):
* lisp/textmodes/reftex-index.el (reftex-index-map)
(reftex-index-phrases-map):
* lisp/textmodes/reftex-sel.el (reftex-select-label-map)
(reftex-select-bib-map):
* lisp/textmodes/reftex-toc.el (reftex-toc-map):
* lisp/textmodes/rst.el (rst-block-face, rst-external-face)
(rst-definition-face, rst-directive-face, rst-comment-face)
(rst-emphasis1-face, rst-emphasis2-face, rst-literal-face)
(rst-reference-face):
* lisp/vc/vc-hooks.el (vc-toggle-read-only):
* lisp/view.el (view-return-to-alist)
(view-return-to-alist-update): Remove many functions and variables
obsolete since 24.1.
* lisp/textmodes/bibtex.el (bibtex-entry-alist): Don't use above
removed variable 'bibtex-entry-field-alist'.
* lisp/cedet/data-debug.el (data-debug-edebug-expr)
(data-debug-eval-expression):
* lisp/emacs-lisp/trace.el (trace--read-args):
* lisp/files-x.el (read-file-local-variable-value):
* lisp/simple.el (read--expression): Don't use above removed variable
'minibuffer-completing-symbol'.
* lisp/textmodes/rst.el (rst-font-lock-keywords): Don't use above
removed variables.
* src/w32fns.c (Fw32_default_color_map): Delete obsolete function.
(syms_of_w32fns): Delete defsubr for above defun.
* src/keyboard.c (syms_of_keyboard) <Vdeferred_action_list>
<Vdeferred_action_function>: Delete DEFVARs.
<Qdeferred_action_function>: Delete DEFSYM.
(syms_of_keyboard_for_pdumper): Adjust for above change.
(command_loop_1): Don't run deferred-action-function hook.
* lisp/subr.el (deferred-action-list, deferred-action-function):
Delete obsoletion statements.
* lisp/emacs-lisp/ert-x.el (ert-simulate-command): Don't run
'deferred-action-list' hook.
* doc/lispref/hooks.texi (Standard Hooks): Delete
'deferred-action-function'.
* lisp/emacs-lisp/lisp.el (field-complete):
* lisp/eshell/em-cmpl.el (eshell-cmpl-initialize):
* lisp/gnus/gnus-msg.el (gnus-inews-insert-gcc):
* lisp/gnus/nnmail.el (nnmail-fancy-expiry-target):
* lisp/mail/mail-utils.el (mail-dont-reply-to):
* lisp/mail/sendmail.el (sendmail-send-it):
* lisp/mail/smtpmail.el (smtpmail-send-it):
* lisp/minibuffer.el (minibuffer-completion-help):
* lisp/progmodes/python.el: Don't use above removed items.
* lisp/emacs-lisp/eieio-core.el:
* lisp/mail/mailalias.el (mail-complete-alist): Doc fixes; don't refer
to above removed items.
; * etc/NEWS: List removed items.
2021-12-03 23:17:04 +01:00
|
|
|
|
(symbol-value variable))))))
|
2013-06-25 09:07:04 -04:00
|
|
|
|
(read-from-minibuffer (format "Add %s with value: " variable)
|
|
|
|
|
nil read-expression-map t
|
2013-06-25 23:48:54 +03:00
|
|
|
|
'set-variable-value-history
|
|
|
|
|
default)))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
(defun read-file-local-variable-mode ()
|
|
|
|
|
"Read per-directory file-local variable's mode using completion.
|
|
|
|
|
Intended to be used in the `interactive' spec of
|
|
|
|
|
`add-dir-local-variable', `delete-dir-local-variable'."
|
|
|
|
|
(let* ((default (and (symbolp major-mode) (symbol-name major-mode)))
|
|
|
|
|
(mode
|
|
|
|
|
(completing-read
|
Use `format-prompt' when prompting with default values
* lisp/woman.el (woman-file-name):
* lisp/wid-edit.el (widget-file-prompt-value)
(widget-coding-system-prompt-value):
* lisp/w32-fns.el (w32-set-system-coding-system):
* lisp/vc/vc.el (vc-print-root-log):
* lisp/vc/vc-annotate.el (vc-annotate):
* lisp/vc/emerge.el (emerge-read-file-name):
* lisp/vc/ediff.el (ediff-directories)
(ediff-directory-revisions, ediff-directories3)
(ediff-merge-directories, )
(ediff-merge-directories-with-ancestor)
(ediff-merge-directory-revisions)
(ediff-merge-directory-revisions-with-ancestor)
(ediff-merge-revisions, ediff-merge-revisions-with-ancestor)
(ediff-revision):
* lisp/vc/ediff-util.el (ediff-toggle-regexp-match):
* lisp/vc/ediff-mult.el (ediff-filegroup-action):
* lisp/vc/add-log.el (prompt-for-change-log-name):
* lisp/textmodes/table.el (table-insert-row-column)
(table-span-cell, table-split-cell-horizontally)
(table-split-cell, table-justify, table-generate-source)
(table-insert-sequence, table-capture)
(table--read-from-minibuffer, table--query-justification):
* lisp/textmodes/sgml-mode.el (sgml-tag, sgml-tag-help):
* lisp/textmodes/reftex-ref.el (reftex-goto-label):
* lisp/textmodes/refer.el (refer-get-bib-files):
* lisp/textmodes/css-mode.el (css-lookup-symbol):
* lisp/term.el (serial-read-name, serial-read-speed):
* lisp/speedbar.el (speedbar-change-initial-expansion-list):
* lisp/simple.el (previous-matching-history-element)
(set-variable):
* lisp/ses.el (ses-read-cell, ses-set-column-width):
* lisp/replace.el (query-replace-read-from)
(occur-read-primary-args):
* lisp/rect.el (string-rectangle, string-insert-rectangle):
* lisp/progmodes/tcl.el (tcl-help-on-word):
* lisp/progmodes/sh-script.el (sh-set-shell):
* lisp/progmodes/python.el (python-eldoc-at-point):
* lisp/progmodes/octave.el (octave-completing-read)
(octave-update-function-file-comment, octave-insert-defun):
* lisp/progmodes/inf-lisp.el (lisp-symprompt):
* lisp/progmodes/cperl-mode.el (cperl-info-on-command)
(cperl-perldoc):
* lisp/progmodes/compile.el (compilation-find-file):
* lisp/net/rcirc.el (rcirc-prompt-for-encryption):
* lisp/net/eww.el (eww):
* lisp/net/browse-url.el (browse-url-with-browser-kind):
* lisp/man.el (man):
* lisp/mail/sendmail.el (sendmail-query-user-about-smtp):
* lisp/mail/mailalias.el (build-mail-aliases):
* lisp/mail/mailabbrev.el (merge-mail-abbrevs)
(rebuild-mail-abbrevs):
* lisp/locate.el (locate-prompt-for-search-string):
* lisp/isearch.el (isearch-occur):
* lisp/international/ogonek.el (ogonek-read-encoding)
(ogonek-read-prefix):
* lisp/international/mule.el (read-buffer-file-coding-system)
(set-terminal-coding-system, set-keyboard-coding-system)
(set-next-selection-coding-system, recode-region):
* lisp/international/mule-cmds.el ()
(universal-coding-system-argument, search-unencodable-char)
(select-safe-coding-system-interactively):
* lisp/info.el (Info-search, Info-search-backward, Info-menu):
* lisp/info-look.el (info-lookup-interactive-arguments):
* lisp/imenu.el (imenu--completion-buffer):
* lisp/ibuf-ext.el (mode, used-mode, ibuffer-mark-by-mode):
* lisp/hi-lock.el (hi-lock-unface-buffer)
(hi-lock-read-face-name):
* lisp/help.el (view-emacs-news, where-is):
* lisp/help-fns.el (describe-variable, describe-symbol)
(describe-keymap):
* lisp/gnus/mm-decode.el (mm-save-part):
* lisp/gnus/gnus-sum.el (gnus-summary-browse-url):
* lisp/gnus/gnus-group.el (gnus-group--read-bug-ids)
(gnus-group-set-current-level):
* lisp/frame.el (make-frame-on-monitor)
(close-display-connection, select-frame-by-name):
* lisp/format.el (format-encode-buffer, format-encode-region):
* lisp/files.el (recode-file-name):
* lisp/files-x.el (read-file-local-variable)
(read-file-local-variable-value, )
(read-file-local-variable-mode):
* lisp/ffap.el (ffap-menu-ask):
* lisp/faces.el (face-read-string):
* lisp/facemenu.el (facemenu-set-charset):
* lisp/erc/erc-dcc.el (erc-dcc-do-GET-command):
* lisp/emulation/edt-mapper.el (edt-mapper):
* lisp/emacs-lisp/trace.el (trace--read-args)
(trace-function-foreground, trace-function-background):
* lisp/emacs-lisp/smie.el (smie-config-set-indent):
* lisp/emacs-lisp/re-builder.el (reb-change-syntax):
* lisp/emacs-lisp/package.el (describe-package):
* lisp/emacs-lisp/find-func.el (read-library-name)
(find-function-read):
* lisp/emacs-lisp/ert.el (ert-read-test-name)
(ert-run-tests-interactively):
* lisp/emacs-lisp/disass.el (disassemble):
* lisp/emacs-lisp/debug.el (debug-on-entry)
(debug-on-variable-change):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-read-regexp):
* lisp/dired-x.el (dired--mark-suffix-interactive-spec):
* lisp/dired-aux.el (dired-diff):
* lisp/cus-edit.el (custom-variable-prompt, customize-mode)
(customize-changed-options):
* lisp/completion.el (interactive-completion-string-reader):
* lisp/calendar/timeclock.el (timeclock-ask-for-project):
* lisp/calc/calcalg3.el (calc-get-fit-variables):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-bin.el (calc-word-size):
* lisp/bookmark.el (bookmark-set-internal):
* lisp/abbrev.el (read-abbrev-file): Use `format-prompt' for
prompting (bug#12443).
2020-09-06 16:56:44 +02:00
|
|
|
|
(format-prompt "Mode or subdirectory" default)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
obarray
|
|
|
|
|
(lambda (sym)
|
|
|
|
|
(and (string-match-p "-mode\\'" (symbol-name sym))
|
2013-06-25 09:07:04 -04:00
|
|
|
|
(not (or (memq sym minor-mode-list)
|
|
|
|
|
(string-match-p "-minor-mode\\'"
|
|
|
|
|
(symbol-name sym))))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
nil nil nil default nil)))
|
|
|
|
|
(cond
|
|
|
|
|
((equal mode "nil") nil)
|
|
|
|
|
((and (stringp mode) (fboundp (intern mode))) (intern mode))
|
|
|
|
|
(t mode))))
|
|
|
|
|
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(defun modify-file-local-variable-message (variable value op)
|
|
|
|
|
(let* ((not-value (make-symbol ""))
|
|
|
|
|
(old-value (cond ((eq variable 'mode)
|
|
|
|
|
major-mode)
|
|
|
|
|
((eq variable 'coding)
|
|
|
|
|
buffer-file-coding-system)
|
|
|
|
|
(t (if (and (symbolp variable)
|
|
|
|
|
(boundp variable))
|
|
|
|
|
(symbol-value variable)
|
|
|
|
|
not-value))))
|
|
|
|
|
(new-value (if (eq op 'delete)
|
|
|
|
|
(cond ((eq variable 'mode)
|
|
|
|
|
(default-value 'major-mode))
|
|
|
|
|
((eq variable 'coding)
|
|
|
|
|
(default-value 'buffer-file-coding-system))
|
|
|
|
|
(t (if (and (symbolp variable)
|
|
|
|
|
(default-boundp variable))
|
|
|
|
|
(default-value variable)
|
|
|
|
|
not-value)))
|
|
|
|
|
(cond ((eq variable 'mode)
|
|
|
|
|
(let ((string (format "%S" value)))
|
|
|
|
|
(if (string-match-p "-mode\\'" string)
|
|
|
|
|
value
|
|
|
|
|
(intern (concat string "-mode")))))
|
|
|
|
|
(t value)))))
|
|
|
|
|
(when (or (eq old-value not-value)
|
|
|
|
|
(eq new-value not-value)
|
|
|
|
|
(not (equal old-value new-value)))
|
|
|
|
|
(message "%s" (substitute-command-keys
|
2023-07-25 17:51:58 +03:00
|
|
|
|
(if (and (stringp buffer-file-name)
|
|
|
|
|
(file-exists-p buffer-file-name))
|
|
|
|
|
"For this change to take effect revisit file using \\[revert-buffer]"
|
|
|
|
|
"For this change to take effect use \\[normal-mode]"))))))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
|
|
|
|
|
(defun modify-file-local-variable (variable value op &optional interactive)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
"Modify file-local VARIABLE in Local Variables depending on operation OP.
|
|
|
|
|
|
|
|
|
|
If OP is `add-or-replace' then delete all existing settings of
|
|
|
|
|
VARIABLE (except `mode' and `eval') and add a new file-local VARIABLE
|
|
|
|
|
with VALUE to the Local Variables list.
|
|
|
|
|
|
|
|
|
|
If there is no Local Variables list in the current file buffer and OP
|
|
|
|
|
is not `delete' then this function adds the first line containing the
|
|
|
|
|
string `Local Variables:' and the last line containing the string `End:'.
|
|
|
|
|
|
|
|
|
|
If OP is `delete' then delete all existing settings of VARIABLE
|
|
|
|
|
from the Local Variables list ignoring the input argument VALUE."
|
|
|
|
|
(catch 'exit
|
|
|
|
|
(let ((beg (point)) end replaced-pos)
|
|
|
|
|
(unless enable-local-variables
|
|
|
|
|
(throw 'exit (message "File-local variables are disabled")))
|
|
|
|
|
|
|
|
|
|
;; Look for "Local variables:" line in last page.
|
|
|
|
|
(widen)
|
|
|
|
|
(goto-char (point-max))
|
|
|
|
|
(search-backward "\n\^L" (max (- (point-max) 3000) (point-min)) 'move)
|
|
|
|
|
|
|
|
|
|
;; Add "Local variables:" list if not found.
|
|
|
|
|
(unless (let ((case-fold-search t))
|
|
|
|
|
(search-forward "Local Variables:" nil t))
|
|
|
|
|
|
|
|
|
|
;; Don't add "Local variables:" list for the deletion operation.
|
|
|
|
|
(when (eq op 'delete)
|
|
|
|
|
(throw 'exit (progn (goto-char beg)
|
|
|
|
|
(message "Local Variables not found"))))
|
|
|
|
|
|
|
|
|
|
(goto-char (point-max))
|
|
|
|
|
(let ((comment-style 'plain)
|
2011-11-18 09:34:39 -05:00
|
|
|
|
(comment-start (or comment-start ";; ")))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(comment-region
|
|
|
|
|
(prog1 (setq beg (point))
|
|
|
|
|
(insert "\nLocal Variables:\nEnd:\n"))
|
|
|
|
|
(point)))
|
|
|
|
|
|
|
|
|
|
(unless (let ((case-fold-search t))
|
|
|
|
|
(goto-char beg)
|
|
|
|
|
(search-forward "Local Variables:" nil t))
|
Go back to grave quoting in source-code docstrings etc.
This reverts almost all my recent changes to use curved quotes
in docstrings and/or strings used for error diagnostics.
There are a few exceptions, e.g., Bahá’í proper names.
* admin/unidata/unidata-gen.el (unidata-gen-table):
* lisp/abbrev.el (expand-region-abbrevs):
* lisp/align.el (align-region):
* lisp/allout.el (allout-mode, allout-solicit-alternate-bullet)
(outlineify-sticky):
* lisp/apropos.el (apropos-library):
* lisp/bookmark.el (bookmark-default-annotation-text):
* lisp/button.el (button-category-symbol, button-put)
(make-text-button):
* lisp/calc/calc-aent.el (math-read-if, math-read-factor):
* lisp/calc/calc-embed.el (calc-do-embedded):
* lisp/calc/calc-ext.el (calc-user-function-list):
* lisp/calc/calc-graph.el (calc-graph-show-dumb):
* lisp/calc/calc-help.el (calc-describe-key)
(calc-describe-thing, calc-full-help):
* lisp/calc/calc-lang.el (calc-c-language)
(math-parse-fortran-vector-end, math-parse-tex-sum)
(math-parse-eqn-matrix, math-parse-eqn-prime)
(calc-yacas-language, calc-maxima-language, calc-giac-language)
(math-read-giac-subscr, math-read-math-subscr)
(math-read-big-rec, math-read-big-balance):
* lisp/calc/calc-misc.el (calc-help, report-calc-bug):
* lisp/calc/calc-mode.el (calc-auto-why, calc-save-modes)
(calc-auto-recompute):
* lisp/calc/calc-prog.el (calc-fix-token-name)
(calc-read-parse-table-part, calc-user-define-invocation)
(math-do-arg-check):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-units.el (math-build-units-table-buffer):
* lisp/calc/calc-vec.el (math-read-brackets):
* lisp/calc/calc-yank.el (calc-edit-mode):
* lisp/calc/calc.el (calc, calc-do, calc-user-invocation):
* lisp/calendar/appt.el (appt-display-message):
* lisp/calendar/diary-lib.el (diary-check-diary-file)
(diary-mail-entries, diary-from-outlook):
* lisp/calendar/icalendar.el (icalendar-export-region)
(icalendar--convert-float-to-ical)
(icalendar--convert-date-to-ical)
(icalendar--convert-ical-to-diary)
(icalendar--convert-recurring-to-diary)
(icalendar--add-diary-entry):
* lisp/calendar/time-date.el (format-seconds):
* lisp/calendar/timeclock.el (timeclock-mode-line-display)
(timeclock-make-hours-explicit, timeclock-log-data):
* lisp/calendar/todo-mode.el (todo-prefix, todo-delete-category)
(todo-item-mark, todo-check-format)
(todo-insert-item--next-param, todo-edit-item--next-key)
(todo-mode):
* lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules):
* lisp/cedet/mode-local.el (describe-mode-local-overload)
(mode-local-print-binding, mode-local-describe-bindings-2):
* lisp/cedet/semantic/complete.el (semantic-displayor-show-request):
* lisp/cedet/srecode/srt-mode.el (srecode-macro-help):
* lisp/cus-start.el (standard):
* lisp/cus-theme.el (describe-theme-1):
* lisp/custom.el (custom-add-dependencies, custom-check-theme)
(custom--sort-vars-1, load-theme):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/dired-x.el (dired-do-run-mail):
* lisp/dired.el (dired-log):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-enable-advice)
(ad-disable-advice, ad-remove-advice, ad-set-argument)
(ad-set-arguments, ad--defalias-fset, ad-activate)
(ad-deactivate):
* lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand)
(byte-compile-unfold-lambda, byte-optimize-form-code-walker)
(byte-optimize-while, byte-optimize-apply):
* lisp/emacs-lisp/byte-run.el (defun, defsubst):
* lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode)
(byte-compile-log-file, byte-compile-format-warn)
(byte-compile-nogroup-warn, byte-compile-arglist-warn)
(byte-compile-cl-warn)
(byte-compile-warn-about-unresolved-functions)
(byte-compile-file, byte-compile--declare-var)
(byte-compile-file-form-defmumble, byte-compile-form)
(byte-compile-normal-call, byte-compile-check-variable)
(byte-compile-variable-ref, byte-compile-variable-set)
(byte-compile-subr-wrong-args, byte-compile-setq-default)
(byte-compile-negation-optimizer)
(byte-compile-condition-case--old)
(byte-compile-condition-case--new, byte-compile-save-excursion)
(byte-compile-defvar, byte-compile-autoload)
(byte-compile-lambda-form)
(byte-compile-make-variable-buffer-local, display-call-tree)
(batch-byte-compile):
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use):
* lisp/emacs-lisp/chart.el (chart-space-usage):
* lisp/emacs-lisp/check-declare.el (check-declare-scan)
(check-declare-warn, check-declare-file)
(check-declare-directory):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine)
(checkdoc-message-text-engine):
* lisp/emacs-lisp/cl-extra.el (cl-parse-integer)
(cl--describe-class):
* lisp/emacs-lisp/cl-generic.el (cl-defgeneric)
(cl--generic-describe, cl-generic-generalizers):
* lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause, cl-tagbody)
(cl-symbol-macrolet):
* lisp/emacs-lisp/cl.el (cl-unload-function, flet):
* lisp/emacs-lisp/copyright.el (copyright)
(copyright-update-directory):
* lisp/emacs-lisp/edebug.el (edebug-read-list):
* lisp/emacs-lisp/eieio-base.el (eieio-persistent-read):
* lisp/emacs-lisp/eieio-core.el (eieio--slot-override)
(eieio-oref):
* lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor):
* lisp/emacs-lisp/eieio-speedbar.el:
(eieio-speedbar-child-make-tag-lines)
(eieio-speedbar-child-description):
* lisp/emacs-lisp/eieio.el (defclass, change-class):
* lisp/emacs-lisp/elint.el (elint-file, elint-get-top-forms)
(elint-init-form, elint-check-defalias-form)
(elint-check-let-form):
* lisp/emacs-lisp/ert.el (ert-get-test, ert-results-mode-menu)
(ert-results-pop-to-backtrace-for-test-at-point)
(ert-results-pop-to-messages-for-test-at-point)
(ert-results-pop-to-should-forms-for-test-at-point)
(ert-describe-test):
* lisp/emacs-lisp/find-func.el (find-function-search-for-symbol)
(find-function-library):
* lisp/emacs-lisp/generator.el (iter-yield):
* lisp/emacs-lisp/gv.el (gv-define-simple-setter):
* lisp/emacs-lisp/lisp-mnt.el (lm-verify):
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
* lisp/emacs-lisp/nadvice.el (advice--make-docstring)
(advice--make, define-advice):
* lisp/emacs-lisp/package-x.el (package-upload-file):
* lisp/emacs-lisp/package.el (package-version-join)
(package-disabled-p, package-activate-1, package-activate)
(package--download-one-archive)
(package--download-and-read-archives)
(package-compute-transaction, package-install-from-archive)
(package-install, package-install-selected-packages)
(package-delete, package-autoremove, describe-package-1)
(package-install-button-action, package-delete-button-action)
(package-menu-hide-package, package-menu--list-to-prompt)
(package-menu--perform-transaction)
(package-menu--find-and-notify-upgrades):
* lisp/emacs-lisp/pcase.el (pcase-exhaustive, pcase--u1):
* lisp/emacs-lisp/re-builder.el (reb-enter-subexp-mode):
* lisp/emacs-lisp/ring.el (ring-previous, ring-next):
* lisp/emacs-lisp/rx.el (rx-check, rx-anything)
(rx-check-any-string, rx-check-any, rx-check-not, rx-=)
(rx-repeat, rx-check-backref, rx-syntax, rx-check-category)
(rx-form):
* lisp/emacs-lisp/smie.el (smie-config-save):
* lisp/emacs-lisp/subr-x.el (internal--check-binding):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-put-tag):
* lisp/emacs-lisp/testcover.el (testcover-1value):
* lisp/emacs-lisp/timer.el (timer-event-handler):
* lisp/emulation/viper-cmd.el (viper-toggle-parse-sexp-ignore-comments)
(viper-toggle-search-style, viper-kill-buffer)
(viper-brac-function):
* lisp/emulation/viper-macs.el (viper-record-kbd-macro):
* lisp/env.el (setenv):
* lisp/erc/erc-button.el (erc-nick-popup):
* lisp/erc/erc.el (erc-cmd-LOAD, erc-handle-login, english):
* lisp/eshell/em-dirs.el (eshell/cd):
* lisp/eshell/em-glob.el (eshell-glob-regexp)
(eshell-glob-entries):
* lisp/eshell/em-pred.el (eshell-parse-modifiers):
* lisp/eshell/esh-opt.el (eshell-show-usage):
* lisp/facemenu.el (facemenu-add-new-face)
(facemenu-add-new-color):
* lisp/faces.el (read-face-name, read-face-font, describe-face)
(x-resolve-font-name):
* lisp/files-x.el (modify-file-local-variable):
* lisp/files.el (locate-user-emacs-file, find-alternate-file)
(set-auto-mode, hack-one-local-variable--obsolete)
(dir-locals-set-directory-class, write-file, basic-save-buffer)
(delete-directory, copy-directory, recover-session)
(recover-session-finish, insert-directory)
(file-modes-char-to-who, file-modes-symbolic-to-number)
(move-file-to-trash):
* lisp/filesets.el (filesets-add-buffer, filesets-remove-buffer):
* lisp/find-cmd.el (find-generic, find-to-string):
* lisp/finder.el (finder-commentary):
* lisp/font-lock.el (font-lock-fontify-buffer):
* lisp/format.el (format-write-file, format-find-file)
(format-insert-file):
* lisp/frame.el (get-device-terminal, select-frame-by-name):
* lisp/fringe.el (fringe--check-style):
* lisp/gnus/nnmairix.el (nnmairix-widget-create-query):
* lisp/help-fns.el (help-fns--key-bindings)
(help-fns--compiler-macro, help-fns--parent-mode)
(help-fns--obsolete, help-fns--interactive-only)
(describe-function-1, describe-variable):
* lisp/help.el (describe-mode)
(describe-minor-mode-from-indicator):
* lisp/image.el (image-type):
* lisp/international/ccl.el (ccl-dump):
* lisp/international/fontset.el (x-must-resolve-font-name):
* lisp/international/mule-cmds.el (prefer-coding-system)
(select-safe-coding-system-interactively)
(select-safe-coding-system, activate-input-method)
(toggle-input-method, describe-current-input-method)
(describe-language-environment):
* lisp/international/mule-conf.el (code-offset):
* lisp/international/mule-diag.el (describe-character-set)
(list-input-methods-1):
* lisp/mail/feedmail.el (feedmail-run-the-queue):
* lisp/mouse.el (minor-mode-menu-from-indicator):
* lisp/mpc.el (mpc-playlist-rename):
* lisp/msb.el (msb--choose-menu):
* lisp/net/ange-ftp.el (ange-ftp-shell-command):
* lisp/net/imap.el (imap-interactive-login):
* lisp/net/mairix.el (mairix-widget-create-query):
* lisp/net/newst-backend.el (newsticker--sentinel-work):
* lisp/net/newst-treeview.el (newsticker--treeview-load):
* lisp/net/rlogin.el (rlogin):
* lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
* lisp/obsolete/otodo-mode.el (todo-more-important-p):
* lisp/obsolete/pgg-gpg.el (pgg-gpg-process-region):
* lisp/obsolete/pgg-pgp.el (pgg-pgp-process-region):
* lisp/obsolete/pgg-pgp5.el (pgg-pgp5-process-region):
* lisp/org/ob-core.el (org-babel-goto-named-src-block)
(org-babel-goto-named-result):
* lisp/org/ob-fortran.el (org-babel-fortran-ensure-main-wrap):
* lisp/org/ob-ref.el (org-babel-ref-resolve):
* lisp/org/org-agenda.el (org-agenda-prepare):
* lisp/org/org-clock.el (org-clock-notify-once-if-expired)
(org-clock-resolve):
* lisp/org/org-ctags.el (org-ctags-ask-rebuild-tags-file-then-find-tag):
* lisp/org/org-feed.el (org-feed-parse-atom-entry):
* lisp/org/org-habit.el (org-habit-parse-todo):
* lisp/org/org-mouse.el (org-mouse-popup-global-menu)
(org-mouse-context-menu):
* lisp/org/org-table.el (org-table-edit-formulas):
* lisp/org/ox.el (org-export-async-start):
* lisp/proced.el (proced-log):
* lisp/progmodes/ada-mode.el (ada-get-indent-case)
(ada-check-matching-start, ada-goto-matching-start):
* lisp/progmodes/ada-prj.el (ada-prj-display-page):
* lisp/progmodes/ada-xref.el (ada-find-executable):
* lisp/progmodes/ebrowse.el (ebrowse-tags-apropos):
* lisp/progmodes/etags.el (etags-tags-apropos-additional):
* lisp/progmodes/flymake.el (flymake-parse-err-lines)
(flymake-start-syntax-check-process):
* lisp/progmodes/python.el (python-shell-get-process-or-error)
(python-define-auxiliary-skeleton):
* lisp/progmodes/sql.el (sql-comint):
* lisp/progmodes/verilog-mode.el (verilog-load-file-at-point):
* lisp/progmodes/vhdl-mode.el (vhdl-widget-directory-validate):
* lisp/recentf.el (recentf-open-files):
* lisp/replace.el (query-replace-read-from)
(occur-after-change-function, occur-1):
* lisp/scroll-bar.el (scroll-bar-columns):
* lisp/server.el (server-get-auth-key):
* lisp/simple.el (execute-extended-command)
(undo-outer-limit-truncate, list-processes--refresh)
(compose-mail, set-variable, choose-completion-string)
(define-alternatives):
* lisp/startup.el (site-run-file, tty-handle-args, command-line)
(command-line-1):
* lisp/subr.el (noreturn, define-error, add-to-list)
(read-char-choice, version-to-list):
* lisp/term/common-win.el (x-handle-xrm-switch)
(x-handle-name-switch, x-handle-args):
* lisp/term/x-win.el (x-handle-parent-id, x-handle-smid):
* lisp/textmodes/reftex-ref.el (reftex-label):
* lisp/textmodes/reftex-toc.el (reftex-toc-rename-label):
* lisp/textmodes/two-column.el (2C-split):
* lisp/tutorial.el (tutorial--describe-nonstandard-key)
(tutorial--find-changed-keys):
* lisp/type-break.el (type-break-noninteractive-query):
* lisp/wdired.el (wdired-do-renames, wdired-do-symlink-changes)
(wdired-do-perm-changes):
* lisp/whitespace.el (whitespace-report-region):
Prefer grave quoting in source-code strings used to generate help
and diagnostics.
* lisp/faces.el (face-documentation):
No need to convert quotes, since the result is a docstring.
* lisp/info.el (Info-virtual-index-find-node)
(Info-virtual-index, info-apropos):
Simplify by generating only curved quotes, since info files are
typically that ways nowadays anyway.
* lisp/international/mule-diag.el (list-input-methods):
Don’t assume text quoting style is curved.
* lisp/org/org-bibtex.el (org-bibtex-fields):
Revert my recent changes, going back to the old quoting style.
2015-09-07 08:41:44 -07:00
|
|
|
|
(throw 'exit (message "Can't add file-local variables"))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;; prefix is what comes before "local variables:" in its line.
|
|
|
|
|
;; suffix is what comes after "local variables:" in its line.
|
|
|
|
|
(let* ((prefix (buffer-substring (line-beginning-position)
|
|
|
|
|
(match-beginning 0)))
|
|
|
|
|
(suffix (buffer-substring (point) (line-end-position)))
|
|
|
|
|
(prefix-re (concat "^" (regexp-quote prefix)))
|
|
|
|
|
(suffix-re (concat (regexp-quote suffix) "$")))
|
|
|
|
|
|
|
|
|
|
;; Find or add missing "End:".
|
|
|
|
|
(forward-line 1)
|
|
|
|
|
(setq beg (point))
|
|
|
|
|
(save-excursion
|
|
|
|
|
(unless (let ((case-fold-search t))
|
|
|
|
|
(re-search-forward
|
|
|
|
|
(concat prefix-re "[ \t]*End:[ \t]*" suffix-re)
|
|
|
|
|
nil t))
|
|
|
|
|
(save-excursion
|
|
|
|
|
(insert (format "%sEnd:%s\n" prefix suffix))))
|
|
|
|
|
(beginning-of-line)
|
|
|
|
|
(setq end (point-marker)))
|
|
|
|
|
|
|
|
|
|
;; Find and delete all existing variable/value pairs.
|
|
|
|
|
(when (member op '(add-or-replace delete))
|
|
|
|
|
(if (and (eq op 'add-or-replace) (memq variable '(mode eval)))
|
|
|
|
|
(goto-char end)
|
|
|
|
|
(goto-char beg)
|
|
|
|
|
(while (re-search-forward
|
|
|
|
|
(format "%s%S:.*%s" prefix-re variable suffix-re) end t)
|
|
|
|
|
(delete-region (match-beginning 0) (1+ (match-end 0)))
|
|
|
|
|
(setq replaced-pos (point)))))
|
|
|
|
|
|
|
|
|
|
;; Add a new variable/value pair. Add `mode' to the start, add new
|
|
|
|
|
;; variable to the end, and add a replaced variable to its last location.
|
|
|
|
|
(when (eq op 'add-or-replace)
|
|
|
|
|
(cond
|
|
|
|
|
((eq variable 'mode) (goto-char beg))
|
|
|
|
|
((null replaced-pos) (goto-char end))
|
|
|
|
|
(replaced-pos (goto-char replaced-pos)))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(insert (format "%s%S: %S%s\n" prefix variable value suffix))))
|
|
|
|
|
|
|
|
|
|
(when interactive
|
|
|
|
|
(modify-file-local-variable-message variable value op)))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(defun add-file-local-variable (variable value &optional interactive)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
"Add file-local VARIABLE with its VALUE to the Local Variables list.
|
|
|
|
|
|
|
|
|
|
This command deletes all existing settings of VARIABLE (except `mode'
|
|
|
|
|
and `eval') and adds a new file-local VARIABLE with VALUE to the
|
|
|
|
|
Local Variables list.
|
|
|
|
|
|
2024-11-09 14:02:06 +02:00
|
|
|
|
If there is no Local Variables list in the current file buffer,
|
|
|
|
|
then this function adds it at the end of the file, with the first
|
|
|
|
|
line containing the string `Local Variables:' and the last line
|
|
|
|
|
containing the string `End:'.
|
|
|
|
|
|
|
|
|
|
For adding local variables on the first line of a file, for example
|
|
|
|
|
for settings like `lexical-binding, which must be specified there,
|
|
|
|
|
use the `add-file-local-variable-prop-line' command instead."
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(interactive
|
|
|
|
|
(let ((variable (read-file-local-variable "Add file-local variable")))
|
2015-06-10 16:38:18 -04:00
|
|
|
|
;; Error before reading value.
|
|
|
|
|
(if (equal variable 'lexical-binding)
|
2024-11-09 14:02:06 +02:00
|
|
|
|
(user-error "Use `add-file-local-variable-prop-line' to add the `%s' variable"
|
2015-06-10 16:38:18 -04:00
|
|
|
|
variable))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(list variable (read-file-local-variable-value variable) t)))
|
2015-06-10 16:38:18 -04:00
|
|
|
|
(if (equal variable 'lexical-binding)
|
2024-11-09 14:02:06 +02:00
|
|
|
|
(user-error "Use `add-file-local-variable-prop-line' to add the `%s' variable"
|
2015-06-10 16:38:18 -04:00
|
|
|
|
variable))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(modify-file-local-variable variable value 'add-or-replace interactive))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(defun delete-file-local-variable (variable &optional interactive)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
"Delete all settings of file-local VARIABLE from the Local Variables list."
|
|
|
|
|
(interactive
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(list (read-file-local-variable "Delete file-local variable") t))
|
|
|
|
|
(modify-file-local-variable variable nil 'delete interactive))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(defun modify-file-local-variable-prop-line (variable value op &optional interactive)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
"Modify file-local VARIABLE in the -*- line depending on operation OP.
|
|
|
|
|
|
|
|
|
|
If OP is `add-or-replace' then delete all existing settings of
|
|
|
|
|
VARIABLE (except `mode' and `eval') and add a new file-local VARIABLE
|
|
|
|
|
with VALUE to the -*- line.
|
|
|
|
|
|
|
|
|
|
If there is no -*- line at the beginning of the current file buffer
|
|
|
|
|
and OP is not `delete' then this function adds the -*- line.
|
|
|
|
|
|
|
|
|
|
If OP is `delete' then delete all existing settings of VARIABLE
|
|
|
|
|
from the -*- line ignoring the input argument VALUE."
|
|
|
|
|
(catch 'exit
|
|
|
|
|
(let ((beg (point)) end replaced-pos)
|
|
|
|
|
(unless enable-local-variables
|
|
|
|
|
(throw 'exit (message "File-local variables are disabled")))
|
|
|
|
|
|
|
|
|
|
;; Find the -*- line at the beginning of the current buffer.
|
|
|
|
|
(widen)
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(setq end (set-auto-mode-1))
|
|
|
|
|
|
|
|
|
|
(if end
|
|
|
|
|
(setq beg (point-marker) end (copy-marker end))
|
|
|
|
|
|
|
|
|
|
;; Add the -*- line if not found.
|
|
|
|
|
;; Don't add the -*- line for the deletion operation.
|
|
|
|
|
(when (eq op 'delete)
|
|
|
|
|
(throw 'exit (progn (goto-char beg)
|
|
|
|
|
(message "The -*- line not found"))))
|
|
|
|
|
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
|
2013-06-16 01:44:38 +03:00
|
|
|
|
;; Skip interpreter magic line "#!" or XML declaration.
|
|
|
|
|
(when (or (looking-at file-auto-mode-skip)
|
|
|
|
|
(looking-at "<\\?xml[^>\n]*>$"))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(forward-line 1))
|
|
|
|
|
|
|
|
|
|
(let ((comment-style 'plain)
|
2013-06-16 01:44:38 +03:00
|
|
|
|
(comment-start (or comment-start ";;; "))
|
|
|
|
|
(line-beg (line-beginning-position))
|
|
|
|
|
(ce nil))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(comment-normalize-vars)
|
2013-06-16 01:44:38 +03:00
|
|
|
|
;; If the first line contains a comment.
|
|
|
|
|
(if (save-excursion
|
|
|
|
|
(and (looking-at comment-start-skip)
|
|
|
|
|
(goto-char (match-end 0))
|
|
|
|
|
(re-search-forward comment-end-skip)
|
|
|
|
|
(goto-char (match-beginning 0))
|
|
|
|
|
;; Still on the same line?
|
|
|
|
|
(equal line-beg (line-beginning-position))
|
|
|
|
|
(setq ce (point))))
|
|
|
|
|
;; Add local variables to the end of the existing comment.
|
|
|
|
|
(progn
|
|
|
|
|
(goto-char ce)
|
|
|
|
|
(insert " -*-")
|
|
|
|
|
(setq beg (point-marker))
|
|
|
|
|
(setq end (point-marker))
|
|
|
|
|
(insert "-*-"))
|
|
|
|
|
;; Otherwise, add a new comment before the first line.
|
|
|
|
|
(comment-region
|
|
|
|
|
(prog1 (point)
|
|
|
|
|
(insert "-*-")
|
|
|
|
|
(setq beg (point-marker))
|
|
|
|
|
(setq end (point-marker))
|
|
|
|
|
(insert "-*-\n"))
|
|
|
|
|
(point)))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
(cond
|
|
|
|
|
((looking-at "[ \t]*\\([^ \t\n\r:;]+\\)\\([ \t]*-\\*-\\)")
|
|
|
|
|
;; Simple form: "-*- MODENAME -*-".
|
|
|
|
|
(if (eq variable 'mode)
|
|
|
|
|
;; Replace or delete MODENAME
|
|
|
|
|
(progn
|
|
|
|
|
(when (member op '(add-or-replace delete))
|
|
|
|
|
(delete-region (match-beginning 1) (match-end 1)))
|
|
|
|
|
(when (eq op 'add-or-replace)
|
|
|
|
|
(goto-char (match-beginning 1))
|
|
|
|
|
(insert (format "%S" value))))
|
|
|
|
|
;; Else, turn `MODENAME' into `mode:MODENAME'
|
|
|
|
|
;; and add `VARIABLE: VALUE;'
|
|
|
|
|
(goto-char (match-beginning 2))
|
|
|
|
|
(insert (format "; %S: %S; " variable value))
|
|
|
|
|
(goto-char (match-beginning 1))
|
|
|
|
|
(insert " mode: ")))
|
|
|
|
|
|
|
|
|
|
(t
|
|
|
|
|
;; Hairy form: '-*-' [ <variable> ':' <value> ';' ]* '-*-'
|
|
|
|
|
;; Find and delete all existing variable/value pairs.
|
|
|
|
|
(when (member op '(add-or-replace delete))
|
|
|
|
|
(if (and (eq op 'add-or-replace) (memq variable '(mode eval)))
|
|
|
|
|
(goto-char end)
|
|
|
|
|
(goto-char beg)
|
|
|
|
|
(while (< (point) end)
|
|
|
|
|
(or (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*")
|
|
|
|
|
(throw 'exit (message "Malformed -*- line")))
|
|
|
|
|
(goto-char (match-end 0))
|
2011-04-19 15:44:55 +02:00
|
|
|
|
(let ((key (intern (match-string 1))))
|
|
|
|
|
(save-restriction
|
|
|
|
|
(narrow-to-region (point) end)
|
|
|
|
|
(let ((read-circle nil))
|
|
|
|
|
(read (current-buffer))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(skip-chars-forward " \t;")
|
|
|
|
|
(when (eq key variable)
|
|
|
|
|
(delete-region (match-beginning 0) (point))
|
|
|
|
|
(setq replaced-pos (point)))))))
|
|
|
|
|
;; Add a new variable/value pair. Add `mode' to the start, add new
|
|
|
|
|
;; variable to the end, and add a replaced variable to its last location.
|
|
|
|
|
(when (eq op 'add-or-replace)
|
|
|
|
|
(cond
|
|
|
|
|
((eq variable 'mode) (goto-char beg))
|
|
|
|
|
((null replaced-pos) (goto-char end))
|
|
|
|
|
(replaced-pos (goto-char replaced-pos)))
|
2018-08-14 11:44:18 +03:00
|
|
|
|
(if (and (save-excursion
|
|
|
|
|
(skip-chars-backward " \t")
|
|
|
|
|
(not (eq (char-before) ?\;)))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(not (equal (point) (marker-position beg)))
|
|
|
|
|
;; When existing `-*- -*-' is empty, beg > end.
|
|
|
|
|
(not (> (marker-position beg) (marker-position end))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(insert ";"))
|
|
|
|
|
(unless (eq (char-before) ?\s) (insert " "))
|
|
|
|
|
(insert (format "%S: %S;" variable value))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(unless (eq (char-after) ?\s) (insert " ")))))
|
|
|
|
|
|
|
|
|
|
(when interactive
|
|
|
|
|
(modify-file-local-variable-message variable value op)))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(defun add-file-local-variable-prop-line (variable value &optional interactive)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
"Add file-local VARIABLE with its VALUE to the -*- line.
|
|
|
|
|
|
|
|
|
|
This command deletes all existing settings of VARIABLE (except `mode'
|
|
|
|
|
and `eval') and adds a new file-local VARIABLE with VALUE to
|
2024-11-09 14:02:06 +02:00
|
|
|
|
the -*- line at the beginning of the file.
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
If there is no -*- line at the beginning of the current file buffer
|
2024-11-09 14:02:06 +02:00
|
|
|
|
then this function adds it.
|
|
|
|
|
|
|
|
|
|
To add variables to the Local Variables list at the end of the file,
|
|
|
|
|
use the `add-file-local-variable' command instead."
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(interactive
|
|
|
|
|
(let ((variable (read-file-local-variable "Add -*- file-local variable")))
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(list variable (read-file-local-variable-value variable) t)))
|
|
|
|
|
(modify-file-local-variable-prop-line variable value 'add-or-replace interactive))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(defun delete-file-local-variable-prop-line (variable &optional interactive)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
"Delete all settings of file-local VARIABLE from the -*- line."
|
|
|
|
|
(interactive
|
2013-06-18 23:38:43 +03:00
|
|
|
|
(list (read-file-local-variable "Delete -*- file-local variable") t))
|
|
|
|
|
(modify-file-local-variable-prop-line variable nil 'delete interactive))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
2011-04-19 15:44:55 +02:00
|
|
|
|
(defvar auto-insert) ; from autoinsert.el
|
|
|
|
|
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(defun modify-dir-local-variable (mode variable value op &optional file)
|
2009-08-12 20:29:30 +00:00
|
|
|
|
"Modify directory-local VARIABLE in .dir-locals.el depending on operation OP.
|
|
|
|
|
|
|
|
|
|
If OP is `add-or-replace' then delete all existing settings of
|
|
|
|
|
VARIABLE (except `mode' and `eval') and add a new directory-local VARIABLE
|
|
|
|
|
with VALUE to the MODE alist where MODE can be a mode name symbol or
|
|
|
|
|
a subdirectory name.
|
|
|
|
|
|
|
|
|
|
If .dir-locals.el was not found and OP is not `delete' then create
|
|
|
|
|
this file in the current directory.
|
|
|
|
|
|
|
|
|
|
If OP is `delete' then delete all existing settings of VARIABLE
|
2023-10-21 11:02:36 -03:00
|
|
|
|
from the MODE alist ignoring the input argument VALUE.
|
|
|
|
|
|
|
|
|
|
Optional argument FILE, when non-nil, specifies what file to modify. It
|
|
|
|
|
should be an expanded filename."
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(catch 'exit
|
|
|
|
|
(unless enable-local-variables
|
|
|
|
|
(throw 'exit (message "Directory-local variables are disabled")))
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(let ((variables-file
|
|
|
|
|
(if (stringp file)
|
|
|
|
|
file
|
|
|
|
|
(let ((dir-or-cache
|
|
|
|
|
(and (buffer-file-name)
|
|
|
|
|
(not (file-remote-p (buffer-file-name)))
|
|
|
|
|
(dir-locals-find-file (buffer-file-name)))))
|
|
|
|
|
;; If there are several .dir-locals, the user probably
|
|
|
|
|
;; wants to edit the last one (the highest priority).
|
|
|
|
|
(cond
|
|
|
|
|
((stringp dir-or-cache)
|
|
|
|
|
(car (last (dir-locals--all-files dir-or-cache))))
|
|
|
|
|
((consp dir-or-cache) ; result from cache
|
|
|
|
|
;; If cache element has an mtime, assume it came
|
|
|
|
|
;; from a file. Otherwise, assume it was set
|
|
|
|
|
;; directly.
|
|
|
|
|
(if (nth 2 dir-or-cache)
|
|
|
|
|
(car (last (dir-locals--all-files (car dir-or-cache))))
|
|
|
|
|
(cadr dir-or-cache)))
|
|
|
|
|
;; Try to make a proper file-name.
|
|
|
|
|
(t (expand-file-name (if (eq system-type 'ms-dos)
|
|
|
|
|
(dosified-file-name dir-locals-file)
|
|
|
|
|
dir-locals-file)))))))
|
|
|
|
|
variables)
|
2011-02-24 00:45:25 -08:00
|
|
|
|
;; I can't be bothered to handle this case right now.
|
|
|
|
|
;; Dir locals were set directly from a class. You need to
|
|
|
|
|
;; directly modify the class in dir-locals-class-alist.
|
|
|
|
|
(and variables-file (not (stringp variables-file))
|
|
|
|
|
(throw 'exit (message "Directory locals were not set from a file")))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
;; Don't create ".dir-locals.el" for the deletion operation.
|
2011-02-24 00:45:25 -08:00
|
|
|
|
(and (eq op 'delete)
|
|
|
|
|
(or (not variables-file)
|
|
|
|
|
(not (file-exists-p variables-file)))
|
|
|
|
|
(throw 'exit (message "No .dir-locals.el file was found")))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(let ((auto-insert nil))
|
|
|
|
|
(find-file variables-file))
|
|
|
|
|
(widen)
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
|
|
|
|
|
;; Read alist of directory-local variables.
|
|
|
|
|
(ignore-errors
|
|
|
|
|
(delete-region
|
|
|
|
|
(prog1 (point)
|
|
|
|
|
(setq variables (let ((read-circle nil))
|
|
|
|
|
(read (current-buffer)))))
|
|
|
|
|
(point)))
|
|
|
|
|
|
|
|
|
|
;; Add or replace variable in alist of directory-local variables.
|
|
|
|
|
(let ((mode-assoc (assoc mode variables)))
|
|
|
|
|
(if mode-assoc
|
|
|
|
|
(setq variables
|
|
|
|
|
(cons (cons mode
|
|
|
|
|
(if (eq op 'delete)
|
|
|
|
|
(assq-delete-all variable (cdr mode-assoc))
|
|
|
|
|
(cons
|
|
|
|
|
(cons variable value)
|
|
|
|
|
(if (memq variable '(mode eval))
|
|
|
|
|
(cdr mode-assoc)
|
|
|
|
|
(assq-delete-all variable (cdr mode-assoc))))))
|
2018-11-08 00:27:58 +02:00
|
|
|
|
(assoc-delete-all mode variables)))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(setq variables
|
|
|
|
|
(cons `(,mode . ((,variable . ,value)))
|
|
|
|
|
variables))))
|
|
|
|
|
|
2019-08-18 15:49:24 -07:00
|
|
|
|
;; Invalidate cache (may be needed if this .dir-locals.el file
|
|
|
|
|
;; will be written with the same timestamp as is already present
|
|
|
|
|
;; in the cache, see bug#13860).
|
|
|
|
|
(setq dir-locals-directory-cache
|
|
|
|
|
(assoc-delete-all (file-name-directory variables-file)
|
|
|
|
|
dir-locals-directory-cache))
|
|
|
|
|
|
2009-08-12 20:29:30 +00:00
|
|
|
|
;; Insert modified alist of directory-local variables.
|
2022-10-15 13:07:29 +02:00
|
|
|
|
;; When changing this, also update the ".dir-locals.el" file for
|
|
|
|
|
;; Emacs itself, as well as the template in autoinsert.el.
|
2022-10-05 19:45:27 +02:00
|
|
|
|
(insert ";;; Directory Local Variables -*- no-byte-compile: t -*-\n")
|
2013-06-25 23:23:10 +03:00
|
|
|
|
(insert ";;; For more information see (info \"(emacs) Directory Variables\")\n\n")
|
2018-09-25 22:40:23 +03:00
|
|
|
|
(princ (dir-locals-to-string
|
2018-09-24 23:52:57 +03:00
|
|
|
|
(sort variables
|
|
|
|
|
(lambda (a b)
|
|
|
|
|
(cond
|
|
|
|
|
((null (car a)) t)
|
|
|
|
|
((null (car b)) nil)
|
|
|
|
|
((and (symbolp (car a)) (stringp (car b))) t)
|
|
|
|
|
((and (symbolp (car b)) (stringp (car a))) nil)
|
|
|
|
|
(t (string< (car a) (car b)))))))
|
|
|
|
|
(current-buffer))
|
2022-07-07 09:31:02 +03:00
|
|
|
|
(when (eobp) (insert "\n"))
|
2018-09-24 23:52:57 +03:00
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(indent-sexp))))
|
|
|
|
|
|
2018-09-25 22:40:23 +03:00
|
|
|
|
(defun dir-locals-to-string (variables)
|
2018-09-24 23:52:57 +03:00
|
|
|
|
"Output alists of VARIABLES to string in dotted pair notation syntax."
|
2022-07-07 09:31:02 +03:00
|
|
|
|
(format "(%s)"
|
2022-07-07 02:09:30 +02:00
|
|
|
|
(mapconcat
|
|
|
|
|
(lambda (mode-variables)
|
|
|
|
|
(format "(%S . %s)"
|
|
|
|
|
(car mode-variables)
|
|
|
|
|
(format "(%s)" (mapconcat
|
|
|
|
|
(lambda (variable-value)
|
|
|
|
|
(format "(%S . %s)"
|
|
|
|
|
(car variable-value)
|
|
|
|
|
(string-trim-right
|
|
|
|
|
(pp-to-string
|
|
|
|
|
(cdr variable-value)))))
|
|
|
|
|
(cdr mode-variables) "\n"))))
|
|
|
|
|
variables "\n")))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(defun read-dir-locals-file ()
|
|
|
|
|
"Read a dir-locals filename using completion.
|
|
|
|
|
Intended to be used in the `interactive' spec of `add-dir-local-variable',
|
|
|
|
|
`delete-dir-local-variable' and `copy-file-locals-to-dir-locals'.
|
|
|
|
|
|
|
|
|
|
Returns the filename, expanded."
|
|
|
|
|
(let* ((pri dir-locals-file)
|
|
|
|
|
(sec (replace-regexp-in-string ".el$" "-2.el" dir-locals-file))
|
|
|
|
|
(dir (or (locate-dominating-file default-directory pri)
|
|
|
|
|
(locate-dominating-file default-directory sec))))
|
|
|
|
|
(expand-file-name
|
|
|
|
|
(read-file-name
|
|
|
|
|
"File: "
|
|
|
|
|
(cond (dir)
|
Mark if-let and when-let obsolete
* lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark
if-let and when-let obsolete (bug#73853 and elsewhere). Move
docstring text around so that if-let* and when-let* descriptions
no longer refer to if-let and when-let.
* etc/NEWS: Announce the change.
* admin/admin.el (reminder-for-release-blocking-bugs):
* doc/misc/erc.texi (display-buffer):
* lisp/ansi-color.el (ansi-color-apply)
(ansi-color--face-vec-face):
* lisp/ansi-osc.el (ansi-osc-apply-on-region)
(ansi-osc-hyperlink):
* lisp/arc-mode.el (archive-goto-file)
(archive-next-file-displayer):
* lisp/auth-source-pass.el (auth-source-pass-search)
(auth-source-pass--parse-data)
(auth-source-pass--find-match-many):
* lisp/autorevert.el (auto-revert-notify-rm-watch):
* lisp/buff-menu.el (Buffer-menu-unmark-all-buffers)
(Buffer-menu-group-by-root):
* lisp/calendar/parse-time.el (parse-iso8601-time-string):
* lisp/cedet/pulse.el (pulse-tick):
* lisp/comint.el (comint--fontify-input-ppss-flush-indirect)
(comint--intersect-regions):
* lisp/completion-preview.el (completion-preview--try-table)
(completion-preview--capf-wrapper, completion-preview--update):
* lisp/cus-edit.el (setopt--set)
(custom-dirlocals-maybe-update-cons, custom-dirlocals-validate):
* lisp/custom.el (load-theme):
* lisp/descr-text.el (describe-char):
* lisp/desktop.el (desktop--emacs-pid-running-p):
* lisp/dired-x.el (menu):
* lisp/dired.el (dired-font-lock-keywords)
(dired-insert-directory, dired--insert-disk-space, dired-mode):
* lisp/dnd.el (dnd-handle-multiple-urls):
* lisp/dom.el (dom-remove-attribute):
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare):
* lisp/emacs-lisp/comp-common.el (comp-function-type-spec):
* lisp/emacs-lisp/comp-cstr.el (comp--all-classes)
(comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem)
(comp-cstr-intersection-no-mem, comp-cstr-fixnum-p)
(comp-cstr-type-p):
* lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install)
(native--compile-async):
* lisp/emacs-lisp/comp.el (comp--get-function-cstr)
(comp--function-pure-p, comp--intern-func-in-ctxt)
(comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar)
(comp--add-call-cstr, comp--compute-dominator-tree)
(comp--dom-tree-walker, comp--ssa-rename)
(comp--function-call-maybe-fold, comp--fwprop-call)
(comp--call-optim-func):
* lisp/emacs-lisp/edebug.el (edebug-global-prefix)
(edebug-remove-instrumentation):
* lisp/emacs-lisp/eieio.el (initialize-instance):
* lisp/emacs-lisp/ert-x.el (ert-resource-directory):
* lisp/emacs-lisp/ert.el (ert--expand-should-1)
(ert-test-location, ert-write-junit-test-report)
(ert-test--erts-test):
* lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string)
(icons--create):
* lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p):
* lisp/emacs-lisp/loaddefs-gen.el
(loaddefs-generate--make-autoload)
(loaddefs-generate--parse-file):
* lisp/emacs-lisp/multisession.el
(multisession-edit-mode--revert, multisession-edit-value):
* lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data)
(package-vc--version, package-vc--clone):
* lisp/emacs-lisp/package.el (package--reload-previously-loaded):
* lisp/emacs-lisp/pp.el (pp--insert-lisp):
* lisp/emacs-lisp/subr-x.el (add-display-text-property):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print):
* lisp/emacs-lisp/timer.el (run-at-time):
* lisp/emacs-lisp/vtable.el (vtable-goto-table)
(vtable-goto-column, vtable-update-object, vtable--insert-line)
(vtable--compute-widths, vtable--make-keymap):
* lisp/emacs-lisp/warnings.el (display-warning):
* lisp/epa-file.el (epa-file-insert-file-contents):
* lisp/epa.el (epa-show-key):
* lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt)
(PRIVMSG, erc--get-isupport-entry):
* lisp/erc/erc-button.el (erc-button-add-nickname-buttons)
(erc--button-next):
* lisp/erc/erc-common.el (erc--find-group):
* lisp/erc/erc-fill.el (erc-fill, erc-fill-static)
(erc-fill--wrap-escape-hidden-speaker)
(erc-fill--wrap-unmerge-on-date-stamp)
(erc-fill--wrap-massage-initial-message-post-clear)
(erc-fill-wrap, erc-fill--wrap-rejigger-region):
* lisp/erc/erc-goodies.el (erc--scrolltobottom-all)
(erc--keep-place-indicator-on-window-buffer-change)
(keep-place-indicator, erc--keep-place-indicator-adjust-on-clear)
(erc-keep-place-move, erc--command-indicator-display):
* lisp/erc/erc-ibuffer.el (erc-members):
* lisp/erc/erc-join.el (erc-join--remove-requested-channel)
(erc-autojoin--join):
* lisp/erc/erc-networks.el
(erc-networks--id-qualifying-init-parts, erc-networks--id-reload)
(erc-networks--id-ensure-comparable)
(erc-networks--reclaim-orphaned-target-buffers)
(erc-networks--server-select):
* lisp/erc/erc-nicks.el (erc-nicks-invert)
(erc-nicks--redirect-face-widget-link, erc-nicks--highlight)
(erc-nicks--highlight-button)
(erc-nicks--list-faces-help-button-action, erc-nicks-list-faces)
(erc-nicks-refresh, erc-nicks--colors-from-faces)
(erc-nicks--track-prioritize)
(erc-nicks--remember-face-for-track):
* lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next)
(erc--querypoll-on-352, erc--querypoll-send):
* lisp/erc/erc-sasl.el (erc-sasl--read-password):
* lisp/erc/erc-services.el
(erc-services-issue-ghost-and-retry-nick):
* lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar)
(erc-speedbar-toggle-nicknames-window-lock)
(erc-speedbar--compose-nicks-face):
* lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect)
(erc-stamp-prefix-log-filter, erc--conceal-prompt)
(erc--insert-timestamp-left, erc-insert-timestamp-right)
(erc-stamp--defer-date-insertion-on-post-modify)
(erc-insert-timestamp-left-and-right)
(erc-stamp--redo-right-stamp-post-clear)
(erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps):
* lisp/erc/erc-status-sidebar.el (bufbar)
(erc-status-sidebar-prefer-target-as-name)
(erc-status-sidebar-default-allsort, erc-status-sidebar-click):
* lisp/erc/erc-track.el (erc-track--shortened-names-get)
(erc-track--setup, erc-track--select-mode-line-face)
(erc-track-modified-channels, erc-track--collect-faces-in)
(erc-track--switch-buffer, erc-track--replace-killed-buffer):
* lisp/erc/erc-truncate.el (erc-truncate--setup)
(erc-truncate-buffer):
* lisp/erc/erc.el (erc--ensure-query-member)
(erc--ensure-query-members, erc--remove-channel-users-but)
(erc--cusr-change-status, erc--find-mode, erc--update-modules)
(erc-log-irc-protocol, erc--refresh-prompt)
(erc--restore-important-text-props)
(erc--order-text-properties-from-hash, erc-send-input-line)
(erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY)
(erc-cmd-BANLIST, erc--speakerize-nick)
(erc--format-speaker-input-message, erc-channel-receive-names)
(erc-send-current-line, erc-format-target-and/or-network)
(erc-kill-buffer-function, erc-restore-text-properties)
(erc--get-eq-comparable-cmd):
* lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which)
(eshell-maybe-replace-by-alias):
* lisp/eshell/em-glob.el (eshell-glob-convert):
* lisp/eshell/em-pred.el (eshell-pred-user-or-group)
(eshell-pred-file-time, eshell-pred-file-type)
(eshell-pred-file-mode, eshell-pred-file-links)
(eshell-pred-file-size):
* lisp/eshell/em-prompt.el (eshell-forward-paragraph)
(eshell-next-prompt):
* lisp/eshell/esh-arg.el (eshell-resolve-current-argument):
* lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which)
(eshell-plain-command--which, eshell-plain-command):
* lisp/eshell/esh-io.el (eshell-duplicate-handles)
(eshell-protect-handles, eshell-get-target, eshell-close-target):
* lisp/eshell/esh-proc.el (eshell-sentinel):
* lisp/eshell/esh-var.el (eshell-parse-variable-ref)
(eshell-get-variable, eshell-set-variable):
* lisp/faces.el (face-at-point):
* lisp/ffap.el (ffap-in-project):
* lisp/filenotify.el (file-notify--rm-descriptor):
* lisp/files-x.el (read-dir-locals-file)
(connection-local-update-profile-variables)
(connection-local-value):
* lisp/files.el (file-remote-p, abbreviate-file-name)
(set-auto-mode, hack-local-variables)
(revert-buffer-restore-read-only):
* lisp/find-dired.el (find-dired-sort-by-filename):
* lisp/font-lock.el (font-lock--filter-keywords):
* lisp/gnus/gnus-art.el (article-emojize-symbols):
* lisp/gnus/gnus-int.el (gnus-close-server):
* lisp/gnus/gnus-search.el (gnus-search-transform)
(gnus-search-indexed-parse-output, gnus-search-server-to-engine):
* lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url):
* lisp/gnus/gnus.el (gnus-check-backend-function):
* lisp/gnus/message.el (message-send-mail):
* lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers):
* lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article)
(nnatom--read-article-or-group-authors, nnatom--read-publish)
(nnatom--read-update, nnatom--read-links):
* lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server)
(nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article)
(nnfeed-retrieve-headers, nnfeed--print-part)
(nnfeed-request-article, nnfeed-request-group)
(nnfeed-request-list, nnfeed--group-description)
(nnfeed-request-group-description)
(nnfeed-request-list-newsgroups, nnfeed-request-rename-group):
* lisp/gnus/nnmh.el (nnmh-update-gnus-unreads):
* lisp/help-fns.el (help-find-source)
(help-fns--insert-menu-bindings, help-fns--mention-first-release)
(help-fns--mention-shortdoc-groups)
(help-fns--customize-variable-version)
(help-fns--face-custom-version-info, describe-mode):
* lisp/help-mode.el (help-make-xrefs):
* lisp/help.el (help-key-description, help--describe-command):
* lisp/hfy-cmap.el (htmlfontify-load-rgb-file):
* lisp/ibuf-ext.el (ibuffer-jump-to-filter-group)
(ibuffer-kill-filter-group, ibuffer-kill-line)
(ibuffer-save-filter-groups, ibuffer-save-filters, filename)
(basename, file-extension, ibuffer-diff-buffer-with-file-1)
(ibuffer-mark-by-file-name-regexp)
(ibuffer-mark-by-content-regexp):
* lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen):
* lisp/ibuffer.el (ibuffer-mouse-toggle-mark)
(ibuffer-toggle-marks, ibuffer-mark-interactive)
(ibuffer-compile-format, process, ibuffer-map-lines):
* lisp/image.el (image--compute-map)
(image--compute-original-map):
* lisp/image/exif.el (exif-parse-buffer):
* lisp/image/image-converter.el (image-convert-p, image-convert)
(image-converter--find-converter):
* lisp/image/image-dired-util.el
(image-dired-file-name-at-point):
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--with-thumbnail-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired--slideshow-step, image-dired-display-image):
* lisp/image/wallpaper.el (wallpaper--init-action-kill)
(wallpaper--find-setter, wallpaper--find-command)
(wallpaper--find-command-args, wallpaper--x-monitor-name):
* lisp/info-look.el (info-lookup-interactive-arguments)
(info-complete)::(:mode):
* lisp/info.el (info-pop-to-buffer, Info-read-node-name-1):
* lisp/international/emoji.el (emoji--adjust-displayable-1)
(emoji--add-recent):
* lisp/jsonrpc.el (jsonrpc--call-deferred)
(jsonrpc--process-sentinel, jsonrpc--remove):
* lisp/keymap.el (keymap-local-lookup):
* lisp/mail/emacsbug.el (report-emacs-bug-hook)
(submit-emacs-patch):
* lisp/mail/ietf-drums.el (ietf-drums-parse-addresses):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/rfc6068.el (rfc6068-parse-mailto-url):
* lisp/mail/undigest.el (rmail-digest-parse-mixed-mime):
* lisp/minibuffer.el (completion-metadata-get)
(completions--after-change)
(minibuffer-visible-completions--filter):
* lisp/net/browse-url.el (browse-url-url-at-point)
(browse-url-file-url, browse-url-emacs):
* lisp/net/dbus.el (dbus-byte-array-to-string)
(dbus-monitor-goto-serial):
* lisp/net/dictionary.el (dictionary-search):
* lisp/net/eww.el (eww--download-directory)
(eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit)
(eww-follow-link, eww-read-alternate-url)
(eww-copy-alternate-url):
* lisp/net/goto-addr.el (goto-address-at-point):
* lisp/net/mailcap.el (mailcap-mime-info):
* lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string)
(rcirc-kill-buffer-hook, rcirc-print, rcirc-when)
(rcirc-color-attributes, rcirc-handler-NICK)
(rcirc-handler-TAGMSG, rcirc-handler-BATCH):
* lisp/net/shr.el (shr-descend, shr-adaptive-fill-function)
(shr-correct-dom-case, shr-tag-a):
* lisp/net/sieve.el (sieve-manage-quit):
* lisp/outline.el (outline-cycle-buffer):
* lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate):
* lisp/proced.el (proced-auto-update-timer):
* lisp/progmodes/bug-reference.el
(bug-reference-try-setup-from-vc):
* lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph):
* lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset)
(c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun):
* lisp/progmodes/compile.el (compilation-error-properties)
(compilation-find-file-1):
* lisp/progmodes/eglot.el (eglot--check-object)
(eglot--read-server, eglot-upgrade-eglot)
(eglot-handle-notification, eglot--CompletionParams)
(eglot-completion-at-point, eglot--sig-info)
(eglot-register-capability):
* lisp/progmodes/elisp-mode.el
(emacs-lisp-native-compile-and-load)
(elisp-eldoc-var-docstring-with-value):
* lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test):
* lisp/progmodes/flymake.el (flymake--update-eol-overlays)
(flymake-eldoc-function):
* lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom)
(gdb-frame-handler):
* lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring)
(go-ts-mode--comment-on-previous-line-p)
(go-ts-mode--get-test-regexp-at-point)
(go-ts-mode-test-this-file):
* lisp/progmodes/grep.el (lgrep, rgrep-default-command)
(grep-file-at-point):
* lisp/progmodes/perl-mode.el (perl--end-of-format-p):
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun):
* lisp/progmodes/project.el (project--other-place-command)
(project--find-default-from, project--transplant-file-name)
(project-prefixed-buffer-name, project--remove-from-project-list)
(project-prompt-project-name, project-remember-projects-under)
(project--switch-project-command)
(project-uniquify-dirname-transform, project-mode-line-format):
* lisp/progmodes/python.el
(python-font-lock-keywords-maximum-decoration)
(python--treesit-fontify-union-types)
(python-shell-get-process-name, python-shell-restart)
(python-shell-completion-at-point, python-ffap-module-path)
(python-util-comint-end-of-output-p, python--import-sources)
(python-add-import, python-remove-import, python-fix-imports):
* lisp/progmodes/xref.el (xref--add-log-current-defun):
* lisp/repeat.el (repeat-echo-message-string):
* lisp/saveplace.el (save-place-dired-hook):
* lisp/server.el (server-save-buffers-kill-terminal):
* lisp/shadowfile.el (shadow-make-fullname)
(shadow-contract-file-name, shadow-define-literal-group):
* lisp/shell.el (shell-highlight-undef-mode):
* lisp/simple.el (command-completion-using-modes-p)
(command-execute, file-user-uid, file-group-gid)
(first-completion, last-completion, switch-to-completions):
* lisp/startup.el (startup--load-user-init-file):
* lisp/tab-line.el (tab-line-tabs-buffer-group-by-project):
* lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer):
* lisp/term/android-win.el (android-encode-select-string)
(gui-backend-set-selection):
* lisp/term/haiku-win.el (haiku-dnd-convert-string)
(haiku-select-encode-xstring, haiku-select-encode-utf-8-string):
* lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize):
* lisp/textmodes/ispell.el (ispell-completion-at-point):
* lisp/textmodes/sgml-mode.el (sgml-validate)
(html-mode--complete-at-point):
* lisp/textmodes/tex-mode.el (tex-recenter-output-buffer)
(xref-backend-references):
* lisp/thingatpt.el (thing-at-point-file-at-point)
(thing-at-point-face-at-point):
* lisp/thread.el (thread-list--get-status):
* lisp/time.el (world-clock-copy-time-as-kill, world-clock):
* lisp/touch-screen.el (touch-screen-handle-touch):
* lisp/treesit.el (treesit-language-at, treesit-node-at)
(treesit-node-on, treesit-buffer-root-node)
(treesit-node-field-name, treesit-local-parsers-at)
(treesit-local-parsers-on, treesit--cleanup-local-range-overlays)
(treesit-font-lock-recompute-features)
(treesit-font-lock-fontify-region, treesit-transpose-sexps)
(treesit-add-log-current-defun, treesit-major-mode-setup)
(treesit--explorer-refresh, treesit-install-language-grammar):
* lisp/url/url.el (url-retrieve-synchronously):
* lisp/vc/smerge-mode.el (smerge-diff):
* lisp/vc/vc-dir.el (vc-dir):
* lisp/vc/vc-dispatcher.el (vc-do-async-command):
* lisp/vc/vc-git.el (vc-git-dir--branch-headers)
(vc-git-dir--stash-headers, vc-git--log-edit-summary-check)
(vc-git-stash-list):
* lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset)
(vc-clone):
* lisp/visual-wrap.el (visual-wrap--apply-to-line):
* lisp/wid-edit.el (widget-text)
(widget-editable-list-insert-before):
* lisp/window-tool-bar.el
(window-tool-bar--keymap-entry-to-string):
* lisp/window.el (display-buffer, display-buffer-full-frame)
(window-point-context-set, window-point-context-use)
(window-point-context-use-default-function):
* lisp/xdg.el (xdg-current-desktop):
* lisp/xwidget.el (xwidget-webkit-callback):
* lisp/yank-media.el (yank-media--get-selection)
(yank-media-types):
* test/lisp/comint-tests.el
(comint-tests/test-password-function):
* test/lisp/completion-preview-tests.el
(completion-preview-tests--capf):
* test/lisp/cus-edit-tests.el (with-cus-edit-test):
* test/lisp/erc/erc-scenarios-base-local-modules.el
(-phony-sblm-):
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--on-post-modify):
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--asp-parse-entry):
* test/lisp/erc/erc-tests.el (erc-modules--internal-property)
(erc--find-mode, erc-tests--update-modules):
* test/lisp/erc/resources/erc-d/erc-d-i.el
(erc-d-i--parse-message):
* test/lisp/erc/resources/erc-d/erc-d-t.el
(erc-d-t-kill-related-buffers, erc-d-t-with-cleanup):
* test/lisp/erc/resources/erc-d/erc-d-tests.el
(erc-d-i--parse-message--irc-parser-tests):
* test/lisp/erc/resources/erc-d/erc-d-u.el
(erc-d-u--read-exchange-slowly):
* test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire)
(erc-d--finalize-done, erc-d--command-handle-all):
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common-with-cleanup):
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests--common-display-message)
(erc-tests-common-create-subprocess):
* test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058):
* test/lisp/international/mule-tests.el
(mule-cmds-tests--ucs-names-missing-names):
* test/lisp/progmodes/python-tests.el
(python-tests-get-shell-interpreter)
(python-tests--get-interpreter-info):
* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-resource-file):
* test/lisp/replace-tests.el (replace-tests-with-undo):
* test/src/emacs-tests.el (emacs-tests--seccomp-debug):
* test/src/process-tests.el (process-tests--emacs-command)
(process-tests--emacs-binary, process-tests--dump-file):
* test/src/treesit-tests.el (treesit--ert-test-defun-navigation):
Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
|
|
|
|
((when-let* ((proj (and (featurep 'project) (project-current))))
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(project-root proj))))
|
|
|
|
|
nil
|
|
|
|
|
(lambda (fname)
|
|
|
|
|
(member (file-name-nondirectory fname) (list pri sec)))
|
|
|
|
|
dir-locals-file))))
|
|
|
|
|
|
2009-08-12 20:29:30 +00:00
|
|
|
|
;;;###autoload
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(defun add-dir-local-variable (mode variable value &optional file)
|
|
|
|
|
"Add directory-local VARIABLE with its VALUE and MODE to .dir-locals.el.
|
|
|
|
|
|
|
|
|
|
With a prefix argument, prompt for the file to modify.
|
|
|
|
|
|
|
|
|
|
When called from Lisp, FILE may be the expanded name of the dir-locals file
|
|
|
|
|
where to add VARIABLE."
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(interactive
|
|
|
|
|
(let (variable)
|
|
|
|
|
(list
|
|
|
|
|
(read-file-local-variable-mode)
|
|
|
|
|
(setq variable (read-file-local-variable "Add directory-local variable"))
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(read-file-local-variable-value variable)
|
|
|
|
|
(when current-prefix-arg
|
|
|
|
|
(read-dir-locals-file)))))
|
|
|
|
|
(modify-dir-local-variable mode variable value 'add-or-replace file))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(defun delete-dir-local-variable (mode variable &optional file)
|
|
|
|
|
"Delete all MODE settings of dir-local VARIABLE from .dir-locals.el.
|
|
|
|
|
|
|
|
|
|
With a prefix argument, prompt for the file to modify.
|
|
|
|
|
|
|
|
|
|
When called from Lisp, FILE may be the expanded name of the dir-locals file
|
|
|
|
|
from where to delete VARIABLE."
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(interactive
|
|
|
|
|
(list
|
|
|
|
|
(read-file-local-variable-mode)
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(read-file-local-variable "Delete directory-local variable")
|
|
|
|
|
(when current-prefix-arg
|
|
|
|
|
(read-dir-locals-file))))
|
|
|
|
|
(modify-dir-local-variable mode variable nil 'delete file))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(defun copy-file-locals-to-dir-locals (&optional file)
|
|
|
|
|
"Copy file-local variables to .dir-locals.el.
|
|
|
|
|
|
|
|
|
|
With a prefix argument, prompt for the file to modify.
|
|
|
|
|
|
|
|
|
|
When called from Lisp, FILE may be the expanded name of the dir-locals file
|
|
|
|
|
where to copy the file-local variables."
|
|
|
|
|
(interactive
|
|
|
|
|
(list (when current-prefix-arg
|
|
|
|
|
(read-dir-locals-file))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(dolist (elt file-local-variables-alist)
|
|
|
|
|
(unless (assq (car elt) dir-local-variables-alist)
|
2023-10-21 11:02:36 -03:00
|
|
|
|
(add-dir-local-variable major-mode (car elt) (cdr elt) file))))
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun copy-dir-locals-to-file-locals ()
|
|
|
|
|
"Copy directory-local variables to the Local Variables list."
|
|
|
|
|
(interactive)
|
|
|
|
|
(dolist (elt dir-local-variables-alist)
|
|
|
|
|
(add-file-local-variable (car elt) (cdr elt))))
|
|
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun copy-dir-locals-to-file-locals-prop-line ()
|
2009-10-04 01:44:39 +00:00
|
|
|
|
"Copy directory-local variables to the -*- line."
|
2009-08-12 20:29:30 +00:00
|
|
|
|
(interactive)
|
|
|
|
|
(dolist (elt dir-local-variables-alist)
|
|
|
|
|
(add-file-local-variable-prop-line (car elt) (cdr elt))))
|
|
|
|
|
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
|
|
|
|
;;; connection-local variables.
|
|
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
|
(defvar enable-connection-local-variables t
|
|
|
|
|
"Non-nil means enable use of connection-local variables.")
|
|
|
|
|
|
Prefer defvar-local in remaining libraries
* lisp/align.el (align-mode-rules-list)
(align-mode-exclude-rules-list):
* lisp/bookmark.el (bookmark-current-bookmark)
(bookmark-annotation-name)
(bookmark--annotation-from-bookmark-list):
* lisp/calc/calc-embed.el (calc-embedded-all-active)
(calc-embedded-some-active):
* lisp/comint.el (comint-password-function):
* lisp/completion.el (completion-syntax-table):
* lisp/dframe.el (dframe-track-mouse-function)
(dframe-help-echo-function, dframe-mouse-click-function)
(dframe-mouse-position-function, dframe-timer)
(dframe-attached-frame, dframe-controlled):
* lisp/ehelp.el (electric-help-orig-major-mode):
* lisp/eshell/esh-util.el (eshell-path-env):
* lisp/expand.el (expand-pos, expand-index, expand-point):
* lisp/face-remap.el (text-scale-mode-remapping)
(text-scale-mode-lighter, text-scale-mode-amount)
(text-scale-remap-header-line, buffer-face-mode-remapping):
* lisp/ffap.el (ffap-menu-alist):
* lisp/files-x.el (connection-local-variables-alist):
* lisp/foldout.el (foldout-fold-list, foldout-mode-line-string):
* lisp/follow.el (follow-start-end-invalid):
* lisp/forms.el (forms--mode-setup):
* lisp/gnus/message.el (message-cross-post-old-target)
(message-options):
* lisp/help-mode.el (help-xref-stack, help-xref-forward-stack)
(help-xref-stack-item, help-xref-stack-forward-item):
* lisp/hexl.el (hexl-mode--old-var-vals, hexl-ascii-overlay):
* lisp/hilit-chg.el (hilit-chg-string):
* lisp/ido.el (ido-eoinput):
* lisp/imenu.el (imenu-generic-expression)
(imenu-create-index-function, imenu-default-goto-function)
(imenu-prev-index-position-function)
(imenu-extract-index-name-function, imenu-name-lookup-function)
(imenu-syntax-alist, imenu-case-fold-search):
* lisp/jka-compr.el (jka-compr-really-do-compress):
* lisp/language/ethio-util.el (ethio-prefer-ascii-space):
* lisp/leim/quail/hangul.el (hangul-input-method-help-text):
* lisp/leim/quail/japanese.el (quail-japanese-package-saved):
* lisp/linum.el (linum-overlays, linum-available):
* lisp/man.el (Man-original-frame, Man-arguments, Man--sections)
(Man--refpages, Man-page-list, Man-current-page)
(Man-page-mode-string):
* lisp/pcomplete.el (pcomplete-current-completions)
(pcomplete-last-completion-length)
(pcomplete-last-completion-stub, pcomplete-last-completion-raw)
(pcomplete-last-window-config, pcomplete-window-restore-timer):
* lisp/reveal.el (reveal-open-spots, reveal-last-tick):
* lisp/ruler-mode.el (ruler-mode):
* lisp/scroll-lock.el (scroll-lock-preserve-screen-pos-save):
* lisp/server.el (server-buffer-clients, server-existing-buffer):
* lisp/tab-line.el (tab-line-exclude):
* lisp/tar-mode.el (tar-data-buffer, tar-data-swapped):
* lisp/thumbs.el (thumbs-current-tmp-filename)
(thumbs-current-image-filename, thumbs-extra-images)
(thumbs-image-num, thumbs-buffer, thumbs-marked-list):
* lisp/tutorial.el (tutorial--point-before-chkeys)
(tutorial--point-after-chkeys, tutorial--lang):
* lisp/url/url-vars.el (url-current-object)
(url-current-mime-headers, url-current-lastloc):
* lisp/view.el (view-mode, view-old-buffer-read-only)
(view-old-Helper-return-blurb, view-page-size)
(view-half-page-size, view-last-regexp, view-return-to-alist)
(view-exit-action, view-overlay):
* lisp/wid-edit.el (widget-global-map, widget-field-new)
(widget-field-list, widget-field-last, widget-field-was):
* lisp/woman.el (woman-imenu-done): Prefer defvar-local.
2021-02-02 09:55:40 +01:00
|
|
|
|
(defvar-local connection-local-variables-alist nil
|
2016-11-14 13:56:58 +01:00
|
|
|
|
"Alist of connection-local variable settings in the current buffer.
|
|
|
|
|
Each element in this list has the form (VAR . VALUE), where VAR
|
|
|
|
|
is a connection-local variable (a symbol) and VALUE is its value.
|
|
|
|
|
The actual value in the buffer may differ from VALUE, if it is
|
|
|
|
|
changed by the user.")
|
|
|
|
|
(setq ignored-local-variables
|
|
|
|
|
(cons 'connection-local-variables-alist ignored-local-variables))
|
|
|
|
|
|
2022-02-07 19:32:38 +01:00
|
|
|
|
(defcustom connection-local-profile-alist nil
|
2017-02-19 17:14:35 +01:00
|
|
|
|
"Alist mapping connection profiles to variable lists.
|
|
|
|
|
Each element in this list has the form (PROFILE VARIABLES).
|
|
|
|
|
PROFILE is the name of a connection profile (a symbol).
|
2016-11-14 13:56:58 +01:00
|
|
|
|
VARIABLES is a list that declares connection-local variables for
|
2017-02-19 17:14:35 +01:00
|
|
|
|
PROFILE. An element in VARIABLES is an alist whose elements are
|
2022-02-07 19:32:38 +01:00
|
|
|
|
of the form (VAR . VALUE)."
|
|
|
|
|
:type '(repeat (cons (symbol :tag "Profile")
|
|
|
|
|
(repeat :tag "Variables"
|
|
|
|
|
(cons (symbol :tag "Variable")
|
|
|
|
|
(sexp :tag "Value")))))
|
|
|
|
|
:group 'files
|
|
|
|
|
:group 'tramp
|
|
|
|
|
:version "29.1")
|
|
|
|
|
|
|
|
|
|
(defcustom connection-local-criteria-alist nil
|
2017-02-19 17:14:35 +01:00
|
|
|
|
"Alist mapping connection criteria to connection profiles.
|
|
|
|
|
Each element in this list has the form (CRITERIA PROFILES).
|
|
|
|
|
CRITERIA is a plist identifying a connection and the application
|
|
|
|
|
using this connection. Property names might be `:application',
|
|
|
|
|
`:protocol', `:user' and `:machine'. The property value of
|
|
|
|
|
`:application' is a symbol, all other property values are
|
|
|
|
|
strings. All properties are optional; if CRITERIA is nil, it
|
|
|
|
|
always applies.
|
2022-02-07 19:32:38 +01:00
|
|
|
|
PROFILES is a list of connection profiles (symbols)."
|
|
|
|
|
:type '(repeat (cons (plist :tag "Criteria"
|
|
|
|
|
;; Give the most common options as checkboxes.
|
|
|
|
|
:options (((const :format "%v " :application)
|
|
|
|
|
symbol)
|
|
|
|
|
((const :format "%v " :protocol) string)
|
|
|
|
|
((const :format "%v " :user) string)
|
|
|
|
|
((const :format "%v " :machine) string)))
|
|
|
|
|
(repeat :tag "Profiles"
|
|
|
|
|
(symbol :tag "Profile"))))
|
|
|
|
|
:group 'files
|
|
|
|
|
:group 'tramp
|
|
|
|
|
:version "29.1")
|
2017-02-19 17:14:35 +01:00
|
|
|
|
|
2022-10-11 22:11:04 -07:00
|
|
|
|
(defvar connection-local-criteria nil
|
|
|
|
|
"The current connection-local criteria, or nil.
|
|
|
|
|
This is set while executing the body of
|
|
|
|
|
`with-connection-local-variables'.")
|
|
|
|
|
|
|
|
|
|
(defvar connection-local-profile-name-for-setq nil
|
|
|
|
|
"The current connection-local profile name, or nil.
|
|
|
|
|
This is the name of the profile to use when setting variables via
|
|
|
|
|
`setq-connection-local'. Its value is derived from
|
|
|
|
|
`connection-local-criteria' and is set while executing the body
|
|
|
|
|
of `with-connection-local-variables'.")
|
|
|
|
|
|
2018-07-09 16:03:49 +02:00
|
|
|
|
(defsubst connection-local-normalize-criteria (criteria)
|
|
|
|
|
"Normalize plist CRITERIA according to properties.
|
|
|
|
|
Return a reordered plist."
|
Audit some plist uses with new predicate argument
* doc/lispref/lists.texi (Plist Access): Improve description of
default predicate.
* lisp/emacs-lisp/cl-extra.el (cl-getf, cl--set-getf): Assume
plist-member always returns a cons.
* lisp/emacs-lisp/gv.el (plist-get): Support new optional predicate
argument (bug#47425#91).
* lisp/emacs-lisp/map.el: Bump minor version.
(map--dispatch): Remove now that bug#58563 is fixed. Break two
remaining uses out into corresponding cl-defmethods.
(map--plist-p): Add docstring.
(map--plist-has-predicate, map--plist-member-1, map--plist-member)
(map--plist-put-1, map--plist-put): New definitions for supporting
predicate argument backward compatibly.
(map-elt): Fix generalized variable getter under a
predicate (bug#58531). Use predicate when given a plist.
(map-put): Avoid gratuitous warnings when called without the hidden
predicate argument. Improve obsoletion message.
(map-put!): Use predicate when given a plist.
(map-contains-key): Ditto. Declare forgotten
advertised-calling-convention (bug#58531#19).
(map--put): Group definition in file together with that of map-put!.
* lisp/files-x.el (connection-local-normalize-criteria): Simplify
using mapcan + plist-get.
* lisp/net/eudc.el (eudc--plist-member): New convenience function.
(eudc-plist-member, eudc-plist-get, eudc-lax-plist-get): Use it
instead of open-coding plist-member.
* src/fns.c (Fplist_get, plist_get, Fplist_put, plist_put): Pass the
plist element as the first argument to the predicate, for
consistency with assoc + alist-get.
(Fplist_member, plist_member): Move from widget to plist section.
Open-code the EQ case in plist_member, and call it from
Fplist_member in that case, rather than the other way around.
* test/lisp/apropos-tests.el (apropos-tests-format-plist): Avoid
polluting obarray.
* test/lisp/emacs-lisp/cl-extra-tests.el (cl-getf): Extend test with
generalized variables, degenerate plists, and improper lists.
* test/lisp/emacs-lisp/gv-tests.el: Byte-compile file; in the
meantime bug#24402 seems to have been fixed or worked around.
(gv-setter-edebug): Inhibit printing messages.
(gv-plist-get): Avoid modifying constant literals. Also test with a
predicate argument.
* test/lisp/emacs-lisp/map-tests.el (with-maps-do): Simplify
docstring.
(test-map-elt-testfn): Rename...
(test-map-elt-testfn-alist): ...to this. Also test with a predicate
argument.
(test-map-elt-testfn-plist, test-map-elt-gv, test-map-elt-signature)
(test-map-put!-plist, test-map-put!-signature)
(test-map-contains-key-signature, test-map-plist-member)
(test-map-plist-put): New tests.
(test-map-contains-key-testfn): Also test with a predicate argument.
(test-map-setf-alist-overwrite-key, test-map-setf-plist-insert-key)
(test-map-setf-plist-overwrite-key): Avoid modifying constant
literals.
(test-hash-table-setf-insert-key)
(test-hash-table-setf-overwrite-key): Fix indentation.
(test-setf-map-with-function): Make test more precise.
* test/lisp/net/eudc-tests.el: New file.
* test/lisp/subr-tests.el (test-plistp): Extend test with circular
list.
* test/src/fns-tests.el (test-cycle-equal, test-cycle-nconc): Move
from plist section to circular list section.
(plist-put/odd-number-of-elements): Avoid modifying constant
literals.
(plist-member/improper-list): Simplify.
(test-plist): Move to plist section. Also test with a predicate
argument.
2022-08-20 16:32:33 +03:00
|
|
|
|
(mapcan (lambda (property)
|
|
|
|
|
(let ((value (plist-get criteria property)))
|
|
|
|
|
(and value (list property value))))
|
|
|
|
|
'(:application :protocol :user :machine)))
|
2017-02-19 17:14:35 +01:00
|
|
|
|
|
|
|
|
|
(defsubst connection-local-get-profiles (criteria)
|
|
|
|
|
"Return the connection profiles list for CRITERIA.
|
|
|
|
|
CRITERIA is a plist identifying a connection and the application
|
|
|
|
|
using this connection, see `connection-local-criteria-alist'."
|
2023-10-23 17:07:17 +02:00
|
|
|
|
(let ((criteria (connection-local-normalize-criteria criteria))
|
|
|
|
|
profiles)
|
2018-07-09 16:03:49 +02:00
|
|
|
|
(dolist (crit-alist connection-local-criteria-alist)
|
|
|
|
|
(let ((crit criteria)
|
|
|
|
|
(match t))
|
|
|
|
|
(while (and crit match)
|
|
|
|
|
(when (plist-member (car crit-alist) (car crit))
|
|
|
|
|
(setq match (equal (plist-get (car crit-alist) (car crit))
|
|
|
|
|
(plist-get criteria (car crit)))))
|
|
|
|
|
(setq crit (cddr crit)))
|
|
|
|
|
(when match
|
|
|
|
|
(setq profiles (append profiles (cdr crit-alist))))))
|
|
|
|
|
(delete-dups profiles)))
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(defun connection-local-set-profiles (criteria &rest profiles)
|
2017-04-02 11:02:54 +02:00
|
|
|
|
"Add PROFILES for CRITERIA.
|
|
|
|
|
CRITERIA is a plist identifying a connection and the application
|
|
|
|
|
using this connection, see `connection-local-criteria-alist'.
|
|
|
|
|
PROFILES are the names of connection profiles (a symbol).
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
|
|
|
|
When a connection to a remote server is opened and CRITERIA
|
2017-02-19 17:14:35 +01:00
|
|
|
|
matches to that server, the connection-local variables from
|
|
|
|
|
PROFILES are applied to the corresponding process buffer. The
|
|
|
|
|
variables for a connection profile are defined using
|
|
|
|
|
`connection-local-set-profile-variables'."
|
|
|
|
|
(unless (listp criteria)
|
2016-11-14 13:56:58 +01:00
|
|
|
|
(error "Wrong criteria `%s'" criteria))
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(dolist (profile profiles)
|
|
|
|
|
(unless (assq profile connection-local-profile-alist)
|
|
|
|
|
(error "No such connection profile `%s'" (symbol-name profile))))
|
2023-06-08 09:59:06 +02:00
|
|
|
|
;; Avoid saving the changed user option to file unless triggered
|
|
|
|
|
;; explicitly by user. This workaround can be removed once there is
|
|
|
|
|
;; a solution for bug#63891.
|
|
|
|
|
(let* ((saved-value (get 'connection-local-criteria-alist 'saved-value))
|
|
|
|
|
(criteria (connection-local-normalize-criteria criteria))
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(slot (assoc criteria connection-local-criteria-alist)))
|
2016-11-14 13:56:58 +01:00
|
|
|
|
(if slot
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(setcdr slot (delete-dups (append (cdr slot) profiles)))
|
2016-11-14 13:56:58 +01:00
|
|
|
|
(setq connection-local-criteria-alist
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(cons (cons criteria (delete-dups profiles))
|
2023-06-08 09:59:06 +02:00
|
|
|
|
connection-local-criteria-alist)))
|
|
|
|
|
(custom-set-variables
|
|
|
|
|
`(connection-local-criteria-alist ',connection-local-criteria-alist now))
|
|
|
|
|
(unless saved-value
|
|
|
|
|
(put 'connection-local-criteria-alist 'saved-value nil))))
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(defsubst connection-local-get-profile-variables (profile)
|
|
|
|
|
"Return the connection-local variable list for PROFILE."
|
|
|
|
|
(cdr (assq profile connection-local-profile-alist)))
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(defun connection-local-set-profile-variables (profile variables)
|
|
|
|
|
"Map the symbol PROFILE to a list of variable settings.
|
2016-11-14 13:56:58 +01:00
|
|
|
|
VARIABLES is a list that declares connection-local variables for
|
2017-02-19 17:14:35 +01:00
|
|
|
|
the connection profile. An element in VARIABLES is an alist
|
|
|
|
|
whose elements are of the form (VAR . VALUE).
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
|
|
|
|
When a connection to a remote server is opened, the server's
|
2017-02-19 17:14:35 +01:00
|
|
|
|
connection profiles are found. A server may be assigned a
|
2017-12-09 22:52:50 -05:00
|
|
|
|
connection profile using `connection-local-set-profiles'. Then
|
2017-02-19 17:14:35 +01:00
|
|
|
|
variables are set in the server's process buffer according to the
|
|
|
|
|
VARIABLES list of the connection profile. The list is processed
|
|
|
|
|
in order."
|
2023-06-08 09:59:06 +02:00
|
|
|
|
;; Avoid saving the changed user option to file unless triggered
|
|
|
|
|
;; explicitly by user. This workaround can be removed once there is
|
|
|
|
|
;; a solution for bug#63891.
|
|
|
|
|
(let ((saved-value (get 'connection-local-profile-alist 'saved-value)))
|
|
|
|
|
(setf (alist-get profile connection-local-profile-alist) variables)
|
|
|
|
|
(custom-set-variables
|
|
|
|
|
`(connection-local-profile-alist ',connection-local-profile-alist now))
|
|
|
|
|
(unless saved-value
|
|
|
|
|
(put 'connection-local-profile-alist 'saved-value nil))))
|
2017-02-19 17:14:35 +01:00
|
|
|
|
|
2022-10-11 22:11:04 -07:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun connection-local-update-profile-variables (profile variables)
|
|
|
|
|
"Update the variable settings for PROFILE in-place.
|
|
|
|
|
VARIABLES is a list that declares connection-local variables for
|
|
|
|
|
the connection profile. An element in VARIABLES is an alist
|
|
|
|
|
whose elements are of the form (VAR . VALUE).
|
|
|
|
|
|
|
|
|
|
Unlike `connection-local-set-profile-variables' (which see), this
|
|
|
|
|
function preserves the values of any existing variable
|
|
|
|
|
definitions that aren't listed in VARIABLES."
|
Mark if-let and when-let obsolete
* lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark
if-let and when-let obsolete (bug#73853 and elsewhere). Move
docstring text around so that if-let* and when-let* descriptions
no longer refer to if-let and when-let.
* etc/NEWS: Announce the change.
* admin/admin.el (reminder-for-release-blocking-bugs):
* doc/misc/erc.texi (display-buffer):
* lisp/ansi-color.el (ansi-color-apply)
(ansi-color--face-vec-face):
* lisp/ansi-osc.el (ansi-osc-apply-on-region)
(ansi-osc-hyperlink):
* lisp/arc-mode.el (archive-goto-file)
(archive-next-file-displayer):
* lisp/auth-source-pass.el (auth-source-pass-search)
(auth-source-pass--parse-data)
(auth-source-pass--find-match-many):
* lisp/autorevert.el (auto-revert-notify-rm-watch):
* lisp/buff-menu.el (Buffer-menu-unmark-all-buffers)
(Buffer-menu-group-by-root):
* lisp/calendar/parse-time.el (parse-iso8601-time-string):
* lisp/cedet/pulse.el (pulse-tick):
* lisp/comint.el (comint--fontify-input-ppss-flush-indirect)
(comint--intersect-regions):
* lisp/completion-preview.el (completion-preview--try-table)
(completion-preview--capf-wrapper, completion-preview--update):
* lisp/cus-edit.el (setopt--set)
(custom-dirlocals-maybe-update-cons, custom-dirlocals-validate):
* lisp/custom.el (load-theme):
* lisp/descr-text.el (describe-char):
* lisp/desktop.el (desktop--emacs-pid-running-p):
* lisp/dired-x.el (menu):
* lisp/dired.el (dired-font-lock-keywords)
(dired-insert-directory, dired--insert-disk-space, dired-mode):
* lisp/dnd.el (dnd-handle-multiple-urls):
* lisp/dom.el (dom-remove-attribute):
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare):
* lisp/emacs-lisp/comp-common.el (comp-function-type-spec):
* lisp/emacs-lisp/comp-cstr.el (comp--all-classes)
(comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem)
(comp-cstr-intersection-no-mem, comp-cstr-fixnum-p)
(comp-cstr-type-p):
* lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install)
(native--compile-async):
* lisp/emacs-lisp/comp.el (comp--get-function-cstr)
(comp--function-pure-p, comp--intern-func-in-ctxt)
(comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar)
(comp--add-call-cstr, comp--compute-dominator-tree)
(comp--dom-tree-walker, comp--ssa-rename)
(comp--function-call-maybe-fold, comp--fwprop-call)
(comp--call-optim-func):
* lisp/emacs-lisp/edebug.el (edebug-global-prefix)
(edebug-remove-instrumentation):
* lisp/emacs-lisp/eieio.el (initialize-instance):
* lisp/emacs-lisp/ert-x.el (ert-resource-directory):
* lisp/emacs-lisp/ert.el (ert--expand-should-1)
(ert-test-location, ert-write-junit-test-report)
(ert-test--erts-test):
* lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string)
(icons--create):
* lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p):
* lisp/emacs-lisp/loaddefs-gen.el
(loaddefs-generate--make-autoload)
(loaddefs-generate--parse-file):
* lisp/emacs-lisp/multisession.el
(multisession-edit-mode--revert, multisession-edit-value):
* lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data)
(package-vc--version, package-vc--clone):
* lisp/emacs-lisp/package.el (package--reload-previously-loaded):
* lisp/emacs-lisp/pp.el (pp--insert-lisp):
* lisp/emacs-lisp/subr-x.el (add-display-text-property):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print):
* lisp/emacs-lisp/timer.el (run-at-time):
* lisp/emacs-lisp/vtable.el (vtable-goto-table)
(vtable-goto-column, vtable-update-object, vtable--insert-line)
(vtable--compute-widths, vtable--make-keymap):
* lisp/emacs-lisp/warnings.el (display-warning):
* lisp/epa-file.el (epa-file-insert-file-contents):
* lisp/epa.el (epa-show-key):
* lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt)
(PRIVMSG, erc--get-isupport-entry):
* lisp/erc/erc-button.el (erc-button-add-nickname-buttons)
(erc--button-next):
* lisp/erc/erc-common.el (erc--find-group):
* lisp/erc/erc-fill.el (erc-fill, erc-fill-static)
(erc-fill--wrap-escape-hidden-speaker)
(erc-fill--wrap-unmerge-on-date-stamp)
(erc-fill--wrap-massage-initial-message-post-clear)
(erc-fill-wrap, erc-fill--wrap-rejigger-region):
* lisp/erc/erc-goodies.el (erc--scrolltobottom-all)
(erc--keep-place-indicator-on-window-buffer-change)
(keep-place-indicator, erc--keep-place-indicator-adjust-on-clear)
(erc-keep-place-move, erc--command-indicator-display):
* lisp/erc/erc-ibuffer.el (erc-members):
* lisp/erc/erc-join.el (erc-join--remove-requested-channel)
(erc-autojoin--join):
* lisp/erc/erc-networks.el
(erc-networks--id-qualifying-init-parts, erc-networks--id-reload)
(erc-networks--id-ensure-comparable)
(erc-networks--reclaim-orphaned-target-buffers)
(erc-networks--server-select):
* lisp/erc/erc-nicks.el (erc-nicks-invert)
(erc-nicks--redirect-face-widget-link, erc-nicks--highlight)
(erc-nicks--highlight-button)
(erc-nicks--list-faces-help-button-action, erc-nicks-list-faces)
(erc-nicks-refresh, erc-nicks--colors-from-faces)
(erc-nicks--track-prioritize)
(erc-nicks--remember-face-for-track):
* lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next)
(erc--querypoll-on-352, erc--querypoll-send):
* lisp/erc/erc-sasl.el (erc-sasl--read-password):
* lisp/erc/erc-services.el
(erc-services-issue-ghost-and-retry-nick):
* lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar)
(erc-speedbar-toggle-nicknames-window-lock)
(erc-speedbar--compose-nicks-face):
* lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect)
(erc-stamp-prefix-log-filter, erc--conceal-prompt)
(erc--insert-timestamp-left, erc-insert-timestamp-right)
(erc-stamp--defer-date-insertion-on-post-modify)
(erc-insert-timestamp-left-and-right)
(erc-stamp--redo-right-stamp-post-clear)
(erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps):
* lisp/erc/erc-status-sidebar.el (bufbar)
(erc-status-sidebar-prefer-target-as-name)
(erc-status-sidebar-default-allsort, erc-status-sidebar-click):
* lisp/erc/erc-track.el (erc-track--shortened-names-get)
(erc-track--setup, erc-track--select-mode-line-face)
(erc-track-modified-channels, erc-track--collect-faces-in)
(erc-track--switch-buffer, erc-track--replace-killed-buffer):
* lisp/erc/erc-truncate.el (erc-truncate--setup)
(erc-truncate-buffer):
* lisp/erc/erc.el (erc--ensure-query-member)
(erc--ensure-query-members, erc--remove-channel-users-but)
(erc--cusr-change-status, erc--find-mode, erc--update-modules)
(erc-log-irc-protocol, erc--refresh-prompt)
(erc--restore-important-text-props)
(erc--order-text-properties-from-hash, erc-send-input-line)
(erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY)
(erc-cmd-BANLIST, erc--speakerize-nick)
(erc--format-speaker-input-message, erc-channel-receive-names)
(erc-send-current-line, erc-format-target-and/or-network)
(erc-kill-buffer-function, erc-restore-text-properties)
(erc--get-eq-comparable-cmd):
* lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which)
(eshell-maybe-replace-by-alias):
* lisp/eshell/em-glob.el (eshell-glob-convert):
* lisp/eshell/em-pred.el (eshell-pred-user-or-group)
(eshell-pred-file-time, eshell-pred-file-type)
(eshell-pred-file-mode, eshell-pred-file-links)
(eshell-pred-file-size):
* lisp/eshell/em-prompt.el (eshell-forward-paragraph)
(eshell-next-prompt):
* lisp/eshell/esh-arg.el (eshell-resolve-current-argument):
* lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which)
(eshell-plain-command--which, eshell-plain-command):
* lisp/eshell/esh-io.el (eshell-duplicate-handles)
(eshell-protect-handles, eshell-get-target, eshell-close-target):
* lisp/eshell/esh-proc.el (eshell-sentinel):
* lisp/eshell/esh-var.el (eshell-parse-variable-ref)
(eshell-get-variable, eshell-set-variable):
* lisp/faces.el (face-at-point):
* lisp/ffap.el (ffap-in-project):
* lisp/filenotify.el (file-notify--rm-descriptor):
* lisp/files-x.el (read-dir-locals-file)
(connection-local-update-profile-variables)
(connection-local-value):
* lisp/files.el (file-remote-p, abbreviate-file-name)
(set-auto-mode, hack-local-variables)
(revert-buffer-restore-read-only):
* lisp/find-dired.el (find-dired-sort-by-filename):
* lisp/font-lock.el (font-lock--filter-keywords):
* lisp/gnus/gnus-art.el (article-emojize-symbols):
* lisp/gnus/gnus-int.el (gnus-close-server):
* lisp/gnus/gnus-search.el (gnus-search-transform)
(gnus-search-indexed-parse-output, gnus-search-server-to-engine):
* lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url):
* lisp/gnus/gnus.el (gnus-check-backend-function):
* lisp/gnus/message.el (message-send-mail):
* lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers):
* lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article)
(nnatom--read-article-or-group-authors, nnatom--read-publish)
(nnatom--read-update, nnatom--read-links):
* lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server)
(nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article)
(nnfeed-retrieve-headers, nnfeed--print-part)
(nnfeed-request-article, nnfeed-request-group)
(nnfeed-request-list, nnfeed--group-description)
(nnfeed-request-group-description)
(nnfeed-request-list-newsgroups, nnfeed-request-rename-group):
* lisp/gnus/nnmh.el (nnmh-update-gnus-unreads):
* lisp/help-fns.el (help-find-source)
(help-fns--insert-menu-bindings, help-fns--mention-first-release)
(help-fns--mention-shortdoc-groups)
(help-fns--customize-variable-version)
(help-fns--face-custom-version-info, describe-mode):
* lisp/help-mode.el (help-make-xrefs):
* lisp/help.el (help-key-description, help--describe-command):
* lisp/hfy-cmap.el (htmlfontify-load-rgb-file):
* lisp/ibuf-ext.el (ibuffer-jump-to-filter-group)
(ibuffer-kill-filter-group, ibuffer-kill-line)
(ibuffer-save-filter-groups, ibuffer-save-filters, filename)
(basename, file-extension, ibuffer-diff-buffer-with-file-1)
(ibuffer-mark-by-file-name-regexp)
(ibuffer-mark-by-content-regexp):
* lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen):
* lisp/ibuffer.el (ibuffer-mouse-toggle-mark)
(ibuffer-toggle-marks, ibuffer-mark-interactive)
(ibuffer-compile-format, process, ibuffer-map-lines):
* lisp/image.el (image--compute-map)
(image--compute-original-map):
* lisp/image/exif.el (exif-parse-buffer):
* lisp/image/image-converter.el (image-convert-p, image-convert)
(image-converter--find-converter):
* lisp/image/image-dired-util.el
(image-dired-file-name-at-point):
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--with-thumbnail-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired--slideshow-step, image-dired-display-image):
* lisp/image/wallpaper.el (wallpaper--init-action-kill)
(wallpaper--find-setter, wallpaper--find-command)
(wallpaper--find-command-args, wallpaper--x-monitor-name):
* lisp/info-look.el (info-lookup-interactive-arguments)
(info-complete)::(:mode):
* lisp/info.el (info-pop-to-buffer, Info-read-node-name-1):
* lisp/international/emoji.el (emoji--adjust-displayable-1)
(emoji--add-recent):
* lisp/jsonrpc.el (jsonrpc--call-deferred)
(jsonrpc--process-sentinel, jsonrpc--remove):
* lisp/keymap.el (keymap-local-lookup):
* lisp/mail/emacsbug.el (report-emacs-bug-hook)
(submit-emacs-patch):
* lisp/mail/ietf-drums.el (ietf-drums-parse-addresses):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/rfc6068.el (rfc6068-parse-mailto-url):
* lisp/mail/undigest.el (rmail-digest-parse-mixed-mime):
* lisp/minibuffer.el (completion-metadata-get)
(completions--after-change)
(minibuffer-visible-completions--filter):
* lisp/net/browse-url.el (browse-url-url-at-point)
(browse-url-file-url, browse-url-emacs):
* lisp/net/dbus.el (dbus-byte-array-to-string)
(dbus-monitor-goto-serial):
* lisp/net/dictionary.el (dictionary-search):
* lisp/net/eww.el (eww--download-directory)
(eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit)
(eww-follow-link, eww-read-alternate-url)
(eww-copy-alternate-url):
* lisp/net/goto-addr.el (goto-address-at-point):
* lisp/net/mailcap.el (mailcap-mime-info):
* lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string)
(rcirc-kill-buffer-hook, rcirc-print, rcirc-when)
(rcirc-color-attributes, rcirc-handler-NICK)
(rcirc-handler-TAGMSG, rcirc-handler-BATCH):
* lisp/net/shr.el (shr-descend, shr-adaptive-fill-function)
(shr-correct-dom-case, shr-tag-a):
* lisp/net/sieve.el (sieve-manage-quit):
* lisp/outline.el (outline-cycle-buffer):
* lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate):
* lisp/proced.el (proced-auto-update-timer):
* lisp/progmodes/bug-reference.el
(bug-reference-try-setup-from-vc):
* lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph):
* lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset)
(c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun):
* lisp/progmodes/compile.el (compilation-error-properties)
(compilation-find-file-1):
* lisp/progmodes/eglot.el (eglot--check-object)
(eglot--read-server, eglot-upgrade-eglot)
(eglot-handle-notification, eglot--CompletionParams)
(eglot-completion-at-point, eglot--sig-info)
(eglot-register-capability):
* lisp/progmodes/elisp-mode.el
(emacs-lisp-native-compile-and-load)
(elisp-eldoc-var-docstring-with-value):
* lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test):
* lisp/progmodes/flymake.el (flymake--update-eol-overlays)
(flymake-eldoc-function):
* lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom)
(gdb-frame-handler):
* lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring)
(go-ts-mode--comment-on-previous-line-p)
(go-ts-mode--get-test-regexp-at-point)
(go-ts-mode-test-this-file):
* lisp/progmodes/grep.el (lgrep, rgrep-default-command)
(grep-file-at-point):
* lisp/progmodes/perl-mode.el (perl--end-of-format-p):
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun):
* lisp/progmodes/project.el (project--other-place-command)
(project--find-default-from, project--transplant-file-name)
(project-prefixed-buffer-name, project--remove-from-project-list)
(project-prompt-project-name, project-remember-projects-under)
(project--switch-project-command)
(project-uniquify-dirname-transform, project-mode-line-format):
* lisp/progmodes/python.el
(python-font-lock-keywords-maximum-decoration)
(python--treesit-fontify-union-types)
(python-shell-get-process-name, python-shell-restart)
(python-shell-completion-at-point, python-ffap-module-path)
(python-util-comint-end-of-output-p, python--import-sources)
(python-add-import, python-remove-import, python-fix-imports):
* lisp/progmodes/xref.el (xref--add-log-current-defun):
* lisp/repeat.el (repeat-echo-message-string):
* lisp/saveplace.el (save-place-dired-hook):
* lisp/server.el (server-save-buffers-kill-terminal):
* lisp/shadowfile.el (shadow-make-fullname)
(shadow-contract-file-name, shadow-define-literal-group):
* lisp/shell.el (shell-highlight-undef-mode):
* lisp/simple.el (command-completion-using-modes-p)
(command-execute, file-user-uid, file-group-gid)
(first-completion, last-completion, switch-to-completions):
* lisp/startup.el (startup--load-user-init-file):
* lisp/tab-line.el (tab-line-tabs-buffer-group-by-project):
* lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer):
* lisp/term/android-win.el (android-encode-select-string)
(gui-backend-set-selection):
* lisp/term/haiku-win.el (haiku-dnd-convert-string)
(haiku-select-encode-xstring, haiku-select-encode-utf-8-string):
* lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize):
* lisp/textmodes/ispell.el (ispell-completion-at-point):
* lisp/textmodes/sgml-mode.el (sgml-validate)
(html-mode--complete-at-point):
* lisp/textmodes/tex-mode.el (tex-recenter-output-buffer)
(xref-backend-references):
* lisp/thingatpt.el (thing-at-point-file-at-point)
(thing-at-point-face-at-point):
* lisp/thread.el (thread-list--get-status):
* lisp/time.el (world-clock-copy-time-as-kill, world-clock):
* lisp/touch-screen.el (touch-screen-handle-touch):
* lisp/treesit.el (treesit-language-at, treesit-node-at)
(treesit-node-on, treesit-buffer-root-node)
(treesit-node-field-name, treesit-local-parsers-at)
(treesit-local-parsers-on, treesit--cleanup-local-range-overlays)
(treesit-font-lock-recompute-features)
(treesit-font-lock-fontify-region, treesit-transpose-sexps)
(treesit-add-log-current-defun, treesit-major-mode-setup)
(treesit--explorer-refresh, treesit-install-language-grammar):
* lisp/url/url.el (url-retrieve-synchronously):
* lisp/vc/smerge-mode.el (smerge-diff):
* lisp/vc/vc-dir.el (vc-dir):
* lisp/vc/vc-dispatcher.el (vc-do-async-command):
* lisp/vc/vc-git.el (vc-git-dir--branch-headers)
(vc-git-dir--stash-headers, vc-git--log-edit-summary-check)
(vc-git-stash-list):
* lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset)
(vc-clone):
* lisp/visual-wrap.el (visual-wrap--apply-to-line):
* lisp/wid-edit.el (widget-text)
(widget-editable-list-insert-before):
* lisp/window-tool-bar.el
(window-tool-bar--keymap-entry-to-string):
* lisp/window.el (display-buffer, display-buffer-full-frame)
(window-point-context-set, window-point-context-use)
(window-point-context-use-default-function):
* lisp/xdg.el (xdg-current-desktop):
* lisp/xwidget.el (xwidget-webkit-callback):
* lisp/yank-media.el (yank-media--get-selection)
(yank-media-types):
* test/lisp/comint-tests.el
(comint-tests/test-password-function):
* test/lisp/completion-preview-tests.el
(completion-preview-tests--capf):
* test/lisp/cus-edit-tests.el (with-cus-edit-test):
* test/lisp/erc/erc-scenarios-base-local-modules.el
(-phony-sblm-):
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--on-post-modify):
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--asp-parse-entry):
* test/lisp/erc/erc-tests.el (erc-modules--internal-property)
(erc--find-mode, erc-tests--update-modules):
* test/lisp/erc/resources/erc-d/erc-d-i.el
(erc-d-i--parse-message):
* test/lisp/erc/resources/erc-d/erc-d-t.el
(erc-d-t-kill-related-buffers, erc-d-t-with-cleanup):
* test/lisp/erc/resources/erc-d/erc-d-tests.el
(erc-d-i--parse-message--irc-parser-tests):
* test/lisp/erc/resources/erc-d/erc-d-u.el
(erc-d-u--read-exchange-slowly):
* test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire)
(erc-d--finalize-done, erc-d--command-handle-all):
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common-with-cleanup):
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests--common-display-message)
(erc-tests-common-create-subprocess):
* test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058):
* test/lisp/international/mule-tests.el
(mule-cmds-tests--ucs-names-missing-names):
* test/lisp/progmodes/python-tests.el
(python-tests-get-shell-interpreter)
(python-tests--get-interpreter-info):
* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-resource-file):
* test/lisp/replace-tests.el (replace-tests-with-undo):
* test/src/emacs-tests.el (emacs-tests--seccomp-debug):
* test/src/process-tests.el (process-tests--emacs-command)
(process-tests--emacs-binary, process-tests--dump-file):
* test/src/treesit-tests.el (treesit--ert-test-defun-navigation):
Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
|
|
|
|
(when-let* ((existing-variables
|
|
|
|
|
(nreverse (connection-local-get-profile-variables profile))))
|
2022-10-11 22:11:04 -07:00
|
|
|
|
(dolist (var variables)
|
|
|
|
|
(setf (alist-get (car var) existing-variables) (cdr var)))
|
|
|
|
|
(setq variables (nreverse existing-variables)))
|
|
|
|
|
(connection-local-set-profile-variables profile variables))
|
|
|
|
|
|
2023-12-10 15:15:12 +01:00
|
|
|
|
;;;###autoload
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(defun hack-connection-local-variables (criteria)
|
|
|
|
|
"Read connection-local variables according to CRITERIA.
|
|
|
|
|
Store the connection-local variables in buffer local
|
2021-09-12 18:33:03 +02:00
|
|
|
|
variable `connection-local-variables-alist'.
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
|
|
|
|
This does nothing if `enable-connection-local-variables' is nil."
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(when enable-connection-local-variables
|
|
|
|
|
;; Filter connection profiles.
|
|
|
|
|
(dolist (profile (connection-local-get-profiles criteria))
|
|
|
|
|
;; Loop over variables.
|
|
|
|
|
(dolist (variable (connection-local-get-profile-variables profile))
|
|
|
|
|
(unless (assq (car variable) connection-local-variables-alist)
|
2019-03-09 16:44:24 +01:00
|
|
|
|
(push variable connection-local-variables-alist))))
|
2019-03-23 09:55:04 +01:00
|
|
|
|
;; Push them to `file-local-variables-alist'. Connection-local
|
|
|
|
|
;; variables do not appear from external files. So we can regard
|
|
|
|
|
;; them as safe.
|
2019-03-24 14:24:31 +01:00
|
|
|
|
(let ((enable-local-variables :all))
|
2019-03-23 09:55:04 +01:00
|
|
|
|
(hack-local-variables-filter connection-local-variables-alist nil))))
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(defun hack-connection-local-variables-apply (criteria)
|
|
|
|
|
"Apply connection-local variables identified by CRITERIA.
|
2016-11-14 13:56:58 +01:00
|
|
|
|
Other local variables, like file-local and dir-local variables,
|
|
|
|
|
will not be changed."
|
2017-02-19 17:14:35 +01:00
|
|
|
|
(hack-connection-local-variables criteria)
|
2016-11-14 13:56:58 +01:00
|
|
|
|
(let ((file-local-variables-alist
|
|
|
|
|
(copy-tree connection-local-variables-alist)))
|
|
|
|
|
(hack-local-variables-apply)))
|
|
|
|
|
|
2022-03-18 12:25:32 +01:00
|
|
|
|
(defvar connection-local-default-application 'tramp
|
|
|
|
|
"Default application in connection-local functions, a symbol.
|
|
|
|
|
This variable must not be changed globally.")
|
|
|
|
|
|
2021-03-22 17:47:45 +01:00
|
|
|
|
(defsubst connection-local-criteria-for-default-directory (&optional application)
|
|
|
|
|
"Return a connection-local criteria, which represents `default-directory'.
|
2022-03-18 12:25:32 +01:00
|
|
|
|
If APPLICATION is nil, `connection-local-default-application' is used."
|
2019-03-09 16:44:24 +01:00
|
|
|
|
(when (file-remote-p default-directory)
|
2022-03-18 12:25:32 +01:00
|
|
|
|
`(:application ,(or application connection-local-default-application)
|
|
|
|
|
:protocol ,(file-remote-p default-directory 'method)
|
|
|
|
|
:user ,(file-remote-p default-directory 'user)
|
|
|
|
|
:machine ,(file-remote-p default-directory 'host))))
|
2019-03-09 16:44:24 +01:00
|
|
|
|
|
2022-10-11 22:11:04 -07:00
|
|
|
|
(defun connection-local-profile-name-for-criteria (criteria)
|
|
|
|
|
"Get a connection-local profile name based on CRITERIA."
|
|
|
|
|
(when criteria
|
|
|
|
|
(let (print-level print-length)
|
|
|
|
|
(intern (concat
|
|
|
|
|
"autogenerated-connection-local-profile/"
|
|
|
|
|
(prin1-to-string
|
|
|
|
|
(connection-local-normalize-criteria criteria)))))))
|
|
|
|
|
|
2016-11-14 13:56:58 +01:00
|
|
|
|
;;;###autoload
|
2019-03-09 16:44:24 +01:00
|
|
|
|
(defmacro with-connection-local-variables (&rest body)
|
|
|
|
|
"Apply connection-local variables according to `default-directory'.
|
2017-04-02 11:02:54 +02:00
|
|
|
|
Execute BODY, and unwind connection-local variables."
|
2019-03-09 16:44:24 +01:00
|
|
|
|
(declare (debug t))
|
2022-05-28 12:02:15 -04:00
|
|
|
|
`(with-connection-local-variables-1 (lambda () ,@body)))
|
|
|
|
|
|
2022-10-11 22:11:04 -07:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defmacro with-connection-local-application-variables (application &rest body)
|
|
|
|
|
"Apply connection-local variables for APPLICATION in `default-directory'.
|
|
|
|
|
Execute BODY, and unwind connection-local variables."
|
|
|
|
|
(declare (debug t) (indent 1))
|
|
|
|
|
`(let ((connection-local-default-application ,application))
|
|
|
|
|
(with-connection-local-variables-1 (lambda () ,@body))))
|
|
|
|
|
|
2022-05-28 12:02:15 -04:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun with-connection-local-variables-1 (body-fun)
|
|
|
|
|
"Apply connection-local variables according to `default-directory'.
|
|
|
|
|
Call BODY-FUN with no args, and then unwind connection-local variables."
|
|
|
|
|
(if (file-remote-p default-directory)
|
2022-10-11 22:11:04 -07:00
|
|
|
|
(let* ((enable-connection-local-variables t)
|
|
|
|
|
(connection-local-criteria
|
|
|
|
|
(connection-local-criteria-for-default-directory))
|
|
|
|
|
(connection-local-profile-name-for-setq
|
|
|
|
|
(connection-local-profile-name-for-criteria
|
|
|
|
|
connection-local-criteria))
|
|
|
|
|
(old-buffer-local-variables (buffer-local-variables))
|
|
|
|
|
connection-local-variables-alist)
|
|
|
|
|
(hack-connection-local-variables-apply connection-local-criteria)
|
2022-05-28 12:02:15 -04:00
|
|
|
|
(unwind-protect
|
|
|
|
|
(funcall body-fun)
|
|
|
|
|
;; Cleanup.
|
|
|
|
|
(dolist (variable connection-local-variables-alist)
|
|
|
|
|
(let ((elt (assq (car variable) old-buffer-local-variables)))
|
|
|
|
|
(if elt
|
|
|
|
|
(set (make-local-variable (car elt)) (cdr elt))
|
|
|
|
|
(kill-local-variable (car variable)))))))
|
|
|
|
|
;; No connection-local variables to apply.
|
|
|
|
|
(funcall body-fun)))
|
2016-11-14 13:56:58 +01:00
|
|
|
|
|
2022-10-11 22:11:04 -07:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defmacro setq-connection-local (&rest pairs)
|
|
|
|
|
"Set each VARIABLE connection-locally to VALUE.
|
|
|
|
|
|
|
|
|
|
When `connection-local-profile-name-for-setq' is set, assign each
|
|
|
|
|
variable's value on that connection profile, and set that profile
|
|
|
|
|
for `connection-local-criteria'. You can use this in combination
|
|
|
|
|
with `with-connection-local-variables', as in
|
|
|
|
|
|
|
|
|
|
(with-connection-local-variables
|
|
|
|
|
(setq-connection-local VARIABLE VALUE))
|
|
|
|
|
|
|
|
|
|
If there's no connection-local profile to use, just set the
|
|
|
|
|
variables normally, as with `setq'.
|
|
|
|
|
|
|
|
|
|
The variables are literal symbols and should not be quoted. The
|
|
|
|
|
second VALUE is not computed until after the first VARIABLE is
|
|
|
|
|
set, and so on; each VALUE can use the new value of variables set
|
|
|
|
|
earlier in the `setq-connection-local'. The return value of the
|
|
|
|
|
`setq-connection-local' form is the value of the last VALUE.
|
|
|
|
|
|
|
|
|
|
\(fn [VARIABLE VALUE]...)"
|
|
|
|
|
(declare (debug setq))
|
|
|
|
|
(unless (zerop (mod (length pairs) 2))
|
|
|
|
|
(error "PAIRS must have an even number of variable/value members"))
|
|
|
|
|
(let ((set-expr nil)
|
|
|
|
|
(profile-vars nil))
|
|
|
|
|
(while pairs
|
|
|
|
|
(unless (symbolp (car pairs))
|
|
|
|
|
(error "Attempting to set a non-symbol: %s" (car pairs)))
|
|
|
|
|
(push `(set ',(car pairs) ,(cadr pairs)) set-expr)
|
|
|
|
|
(push `(cons ',(car pairs) ,(car pairs)) profile-vars)
|
|
|
|
|
(setq pairs (cddr pairs)))
|
|
|
|
|
`(prog1
|
|
|
|
|
,(macroexp-progn (nreverse set-expr))
|
|
|
|
|
(when connection-local-profile-name-for-setq
|
|
|
|
|
(connection-local-update-profile-variables
|
|
|
|
|
connection-local-profile-name-for-setq
|
|
|
|
|
(list ,@(nreverse profile-vars)))
|
|
|
|
|
(connection-local-set-profiles
|
|
|
|
|
connection-local-criteria
|
|
|
|
|
connection-local-profile-name-for-setq)))))
|
|
|
|
|
|
2023-12-12 17:39:51 +01:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defmacro connection-local-p (variable &optional application)
|
|
|
|
|
"Non-nil if VARIABLE has a connection-local binding in `default-directory'.
|
2024-01-07 12:39:47 +01:00
|
|
|
|
`default-directory' must be a remote file name.
|
2023-12-12 17:39:51 +01:00
|
|
|
|
If APPLICATION is nil, the value of
|
|
|
|
|
`connection-local-default-application' is used."
|
|
|
|
|
(declare (debug (symbolp &optional form)))
|
|
|
|
|
(unless (symbolp variable)
|
|
|
|
|
(signal 'wrong-type-argument (list 'symbolp variable)))
|
2024-01-07 12:39:47 +01:00
|
|
|
|
`(let ((criteria
|
|
|
|
|
(connection-local-criteria-for-default-directory ,application))
|
|
|
|
|
connection-local-variables-alist file-local-variables-alist)
|
|
|
|
|
(when criteria
|
|
|
|
|
(hack-connection-local-variables criteria)
|
|
|
|
|
(and (assq ',variable connection-local-variables-alist) t))))
|
2023-12-12 17:39:51 +01:00
|
|
|
|
|
2023-12-09 10:13:14 +01:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defmacro connection-local-value (variable &optional application)
|
|
|
|
|
"Return connection-local VARIABLE for APPLICATION in `default-directory'.
|
2024-01-07 12:39:47 +01:00
|
|
|
|
`default-directory' must be a remote file name.
|
2023-12-10 12:26:38 +01:00
|
|
|
|
If APPLICATION is nil, the value of
|
|
|
|
|
`connection-local-default-application' is used.
|
|
|
|
|
If VARIABLE does not have a connection-local binding, the return
|
|
|
|
|
value is the default binding of the variable."
|
2023-12-12 17:39:51 +01:00
|
|
|
|
(declare (debug (symbolp &optional form)))
|
2023-12-09 10:13:14 +01:00
|
|
|
|
(unless (symbolp variable)
|
|
|
|
|
(signal 'wrong-type-argument (list 'symbolp variable)))
|
2024-01-07 12:39:47 +01:00
|
|
|
|
`(let ((criteria
|
|
|
|
|
(connection-local-criteria-for-default-directory ,application))
|
|
|
|
|
connection-local-variables-alist file-local-variables-alist)
|
|
|
|
|
(if (not criteria)
|
|
|
|
|
,variable
|
|
|
|
|
(hack-connection-local-variables criteria)
|
Mark if-let and when-let obsolete
* lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark
if-let and when-let obsolete (bug#73853 and elsewhere). Move
docstring text around so that if-let* and when-let* descriptions
no longer refer to if-let and when-let.
* etc/NEWS: Announce the change.
* admin/admin.el (reminder-for-release-blocking-bugs):
* doc/misc/erc.texi (display-buffer):
* lisp/ansi-color.el (ansi-color-apply)
(ansi-color--face-vec-face):
* lisp/ansi-osc.el (ansi-osc-apply-on-region)
(ansi-osc-hyperlink):
* lisp/arc-mode.el (archive-goto-file)
(archive-next-file-displayer):
* lisp/auth-source-pass.el (auth-source-pass-search)
(auth-source-pass--parse-data)
(auth-source-pass--find-match-many):
* lisp/autorevert.el (auto-revert-notify-rm-watch):
* lisp/buff-menu.el (Buffer-menu-unmark-all-buffers)
(Buffer-menu-group-by-root):
* lisp/calendar/parse-time.el (parse-iso8601-time-string):
* lisp/cedet/pulse.el (pulse-tick):
* lisp/comint.el (comint--fontify-input-ppss-flush-indirect)
(comint--intersect-regions):
* lisp/completion-preview.el (completion-preview--try-table)
(completion-preview--capf-wrapper, completion-preview--update):
* lisp/cus-edit.el (setopt--set)
(custom-dirlocals-maybe-update-cons, custom-dirlocals-validate):
* lisp/custom.el (load-theme):
* lisp/descr-text.el (describe-char):
* lisp/desktop.el (desktop--emacs-pid-running-p):
* lisp/dired-x.el (menu):
* lisp/dired.el (dired-font-lock-keywords)
(dired-insert-directory, dired--insert-disk-space, dired-mode):
* lisp/dnd.el (dnd-handle-multiple-urls):
* lisp/dom.el (dom-remove-attribute):
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare):
* lisp/emacs-lisp/comp-common.el (comp-function-type-spec):
* lisp/emacs-lisp/comp-cstr.el (comp--all-classes)
(comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem)
(comp-cstr-intersection-no-mem, comp-cstr-fixnum-p)
(comp-cstr-type-p):
* lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install)
(native--compile-async):
* lisp/emacs-lisp/comp.el (comp--get-function-cstr)
(comp--function-pure-p, comp--intern-func-in-ctxt)
(comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar)
(comp--add-call-cstr, comp--compute-dominator-tree)
(comp--dom-tree-walker, comp--ssa-rename)
(comp--function-call-maybe-fold, comp--fwprop-call)
(comp--call-optim-func):
* lisp/emacs-lisp/edebug.el (edebug-global-prefix)
(edebug-remove-instrumentation):
* lisp/emacs-lisp/eieio.el (initialize-instance):
* lisp/emacs-lisp/ert-x.el (ert-resource-directory):
* lisp/emacs-lisp/ert.el (ert--expand-should-1)
(ert-test-location, ert-write-junit-test-report)
(ert-test--erts-test):
* lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string)
(icons--create):
* lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p):
* lisp/emacs-lisp/loaddefs-gen.el
(loaddefs-generate--make-autoload)
(loaddefs-generate--parse-file):
* lisp/emacs-lisp/multisession.el
(multisession-edit-mode--revert, multisession-edit-value):
* lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data)
(package-vc--version, package-vc--clone):
* lisp/emacs-lisp/package.el (package--reload-previously-loaded):
* lisp/emacs-lisp/pp.el (pp--insert-lisp):
* lisp/emacs-lisp/subr-x.el (add-display-text-property):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print):
* lisp/emacs-lisp/timer.el (run-at-time):
* lisp/emacs-lisp/vtable.el (vtable-goto-table)
(vtable-goto-column, vtable-update-object, vtable--insert-line)
(vtable--compute-widths, vtable--make-keymap):
* lisp/emacs-lisp/warnings.el (display-warning):
* lisp/epa-file.el (epa-file-insert-file-contents):
* lisp/epa.el (epa-show-key):
* lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt)
(PRIVMSG, erc--get-isupport-entry):
* lisp/erc/erc-button.el (erc-button-add-nickname-buttons)
(erc--button-next):
* lisp/erc/erc-common.el (erc--find-group):
* lisp/erc/erc-fill.el (erc-fill, erc-fill-static)
(erc-fill--wrap-escape-hidden-speaker)
(erc-fill--wrap-unmerge-on-date-stamp)
(erc-fill--wrap-massage-initial-message-post-clear)
(erc-fill-wrap, erc-fill--wrap-rejigger-region):
* lisp/erc/erc-goodies.el (erc--scrolltobottom-all)
(erc--keep-place-indicator-on-window-buffer-change)
(keep-place-indicator, erc--keep-place-indicator-adjust-on-clear)
(erc-keep-place-move, erc--command-indicator-display):
* lisp/erc/erc-ibuffer.el (erc-members):
* lisp/erc/erc-join.el (erc-join--remove-requested-channel)
(erc-autojoin--join):
* lisp/erc/erc-networks.el
(erc-networks--id-qualifying-init-parts, erc-networks--id-reload)
(erc-networks--id-ensure-comparable)
(erc-networks--reclaim-orphaned-target-buffers)
(erc-networks--server-select):
* lisp/erc/erc-nicks.el (erc-nicks-invert)
(erc-nicks--redirect-face-widget-link, erc-nicks--highlight)
(erc-nicks--highlight-button)
(erc-nicks--list-faces-help-button-action, erc-nicks-list-faces)
(erc-nicks-refresh, erc-nicks--colors-from-faces)
(erc-nicks--track-prioritize)
(erc-nicks--remember-face-for-track):
* lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next)
(erc--querypoll-on-352, erc--querypoll-send):
* lisp/erc/erc-sasl.el (erc-sasl--read-password):
* lisp/erc/erc-services.el
(erc-services-issue-ghost-and-retry-nick):
* lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar)
(erc-speedbar-toggle-nicknames-window-lock)
(erc-speedbar--compose-nicks-face):
* lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect)
(erc-stamp-prefix-log-filter, erc--conceal-prompt)
(erc--insert-timestamp-left, erc-insert-timestamp-right)
(erc-stamp--defer-date-insertion-on-post-modify)
(erc-insert-timestamp-left-and-right)
(erc-stamp--redo-right-stamp-post-clear)
(erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps):
* lisp/erc/erc-status-sidebar.el (bufbar)
(erc-status-sidebar-prefer-target-as-name)
(erc-status-sidebar-default-allsort, erc-status-sidebar-click):
* lisp/erc/erc-track.el (erc-track--shortened-names-get)
(erc-track--setup, erc-track--select-mode-line-face)
(erc-track-modified-channels, erc-track--collect-faces-in)
(erc-track--switch-buffer, erc-track--replace-killed-buffer):
* lisp/erc/erc-truncate.el (erc-truncate--setup)
(erc-truncate-buffer):
* lisp/erc/erc.el (erc--ensure-query-member)
(erc--ensure-query-members, erc--remove-channel-users-but)
(erc--cusr-change-status, erc--find-mode, erc--update-modules)
(erc-log-irc-protocol, erc--refresh-prompt)
(erc--restore-important-text-props)
(erc--order-text-properties-from-hash, erc-send-input-line)
(erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY)
(erc-cmd-BANLIST, erc--speakerize-nick)
(erc--format-speaker-input-message, erc-channel-receive-names)
(erc-send-current-line, erc-format-target-and/or-network)
(erc-kill-buffer-function, erc-restore-text-properties)
(erc--get-eq-comparable-cmd):
* lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which)
(eshell-maybe-replace-by-alias):
* lisp/eshell/em-glob.el (eshell-glob-convert):
* lisp/eshell/em-pred.el (eshell-pred-user-or-group)
(eshell-pred-file-time, eshell-pred-file-type)
(eshell-pred-file-mode, eshell-pred-file-links)
(eshell-pred-file-size):
* lisp/eshell/em-prompt.el (eshell-forward-paragraph)
(eshell-next-prompt):
* lisp/eshell/esh-arg.el (eshell-resolve-current-argument):
* lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which)
(eshell-plain-command--which, eshell-plain-command):
* lisp/eshell/esh-io.el (eshell-duplicate-handles)
(eshell-protect-handles, eshell-get-target, eshell-close-target):
* lisp/eshell/esh-proc.el (eshell-sentinel):
* lisp/eshell/esh-var.el (eshell-parse-variable-ref)
(eshell-get-variable, eshell-set-variable):
* lisp/faces.el (face-at-point):
* lisp/ffap.el (ffap-in-project):
* lisp/filenotify.el (file-notify--rm-descriptor):
* lisp/files-x.el (read-dir-locals-file)
(connection-local-update-profile-variables)
(connection-local-value):
* lisp/files.el (file-remote-p, abbreviate-file-name)
(set-auto-mode, hack-local-variables)
(revert-buffer-restore-read-only):
* lisp/find-dired.el (find-dired-sort-by-filename):
* lisp/font-lock.el (font-lock--filter-keywords):
* lisp/gnus/gnus-art.el (article-emojize-symbols):
* lisp/gnus/gnus-int.el (gnus-close-server):
* lisp/gnus/gnus-search.el (gnus-search-transform)
(gnus-search-indexed-parse-output, gnus-search-server-to-engine):
* lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url):
* lisp/gnus/gnus.el (gnus-check-backend-function):
* lisp/gnus/message.el (message-send-mail):
* lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers):
* lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article)
(nnatom--read-article-or-group-authors, nnatom--read-publish)
(nnatom--read-update, nnatom--read-links):
* lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server)
(nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article)
(nnfeed-retrieve-headers, nnfeed--print-part)
(nnfeed-request-article, nnfeed-request-group)
(nnfeed-request-list, nnfeed--group-description)
(nnfeed-request-group-description)
(nnfeed-request-list-newsgroups, nnfeed-request-rename-group):
* lisp/gnus/nnmh.el (nnmh-update-gnus-unreads):
* lisp/help-fns.el (help-find-source)
(help-fns--insert-menu-bindings, help-fns--mention-first-release)
(help-fns--mention-shortdoc-groups)
(help-fns--customize-variable-version)
(help-fns--face-custom-version-info, describe-mode):
* lisp/help-mode.el (help-make-xrefs):
* lisp/help.el (help-key-description, help--describe-command):
* lisp/hfy-cmap.el (htmlfontify-load-rgb-file):
* lisp/ibuf-ext.el (ibuffer-jump-to-filter-group)
(ibuffer-kill-filter-group, ibuffer-kill-line)
(ibuffer-save-filter-groups, ibuffer-save-filters, filename)
(basename, file-extension, ibuffer-diff-buffer-with-file-1)
(ibuffer-mark-by-file-name-regexp)
(ibuffer-mark-by-content-regexp):
* lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen):
* lisp/ibuffer.el (ibuffer-mouse-toggle-mark)
(ibuffer-toggle-marks, ibuffer-mark-interactive)
(ibuffer-compile-format, process, ibuffer-map-lines):
* lisp/image.el (image--compute-map)
(image--compute-original-map):
* lisp/image/exif.el (exif-parse-buffer):
* lisp/image/image-converter.el (image-convert-p, image-convert)
(image-converter--find-converter):
* lisp/image/image-dired-util.el
(image-dired-file-name-at-point):
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--with-thumbnail-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired--slideshow-step, image-dired-display-image):
* lisp/image/wallpaper.el (wallpaper--init-action-kill)
(wallpaper--find-setter, wallpaper--find-command)
(wallpaper--find-command-args, wallpaper--x-monitor-name):
* lisp/info-look.el (info-lookup-interactive-arguments)
(info-complete)::(:mode):
* lisp/info.el (info-pop-to-buffer, Info-read-node-name-1):
* lisp/international/emoji.el (emoji--adjust-displayable-1)
(emoji--add-recent):
* lisp/jsonrpc.el (jsonrpc--call-deferred)
(jsonrpc--process-sentinel, jsonrpc--remove):
* lisp/keymap.el (keymap-local-lookup):
* lisp/mail/emacsbug.el (report-emacs-bug-hook)
(submit-emacs-patch):
* lisp/mail/ietf-drums.el (ietf-drums-parse-addresses):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/rfc6068.el (rfc6068-parse-mailto-url):
* lisp/mail/undigest.el (rmail-digest-parse-mixed-mime):
* lisp/minibuffer.el (completion-metadata-get)
(completions--after-change)
(minibuffer-visible-completions--filter):
* lisp/net/browse-url.el (browse-url-url-at-point)
(browse-url-file-url, browse-url-emacs):
* lisp/net/dbus.el (dbus-byte-array-to-string)
(dbus-monitor-goto-serial):
* lisp/net/dictionary.el (dictionary-search):
* lisp/net/eww.el (eww--download-directory)
(eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit)
(eww-follow-link, eww-read-alternate-url)
(eww-copy-alternate-url):
* lisp/net/goto-addr.el (goto-address-at-point):
* lisp/net/mailcap.el (mailcap-mime-info):
* lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string)
(rcirc-kill-buffer-hook, rcirc-print, rcirc-when)
(rcirc-color-attributes, rcirc-handler-NICK)
(rcirc-handler-TAGMSG, rcirc-handler-BATCH):
* lisp/net/shr.el (shr-descend, shr-adaptive-fill-function)
(shr-correct-dom-case, shr-tag-a):
* lisp/net/sieve.el (sieve-manage-quit):
* lisp/outline.el (outline-cycle-buffer):
* lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate):
* lisp/proced.el (proced-auto-update-timer):
* lisp/progmodes/bug-reference.el
(bug-reference-try-setup-from-vc):
* lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph):
* lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset)
(c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun):
* lisp/progmodes/compile.el (compilation-error-properties)
(compilation-find-file-1):
* lisp/progmodes/eglot.el (eglot--check-object)
(eglot--read-server, eglot-upgrade-eglot)
(eglot-handle-notification, eglot--CompletionParams)
(eglot-completion-at-point, eglot--sig-info)
(eglot-register-capability):
* lisp/progmodes/elisp-mode.el
(emacs-lisp-native-compile-and-load)
(elisp-eldoc-var-docstring-with-value):
* lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test):
* lisp/progmodes/flymake.el (flymake--update-eol-overlays)
(flymake-eldoc-function):
* lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom)
(gdb-frame-handler):
* lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring)
(go-ts-mode--comment-on-previous-line-p)
(go-ts-mode--get-test-regexp-at-point)
(go-ts-mode-test-this-file):
* lisp/progmodes/grep.el (lgrep, rgrep-default-command)
(grep-file-at-point):
* lisp/progmodes/perl-mode.el (perl--end-of-format-p):
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun):
* lisp/progmodes/project.el (project--other-place-command)
(project--find-default-from, project--transplant-file-name)
(project-prefixed-buffer-name, project--remove-from-project-list)
(project-prompt-project-name, project-remember-projects-under)
(project--switch-project-command)
(project-uniquify-dirname-transform, project-mode-line-format):
* lisp/progmodes/python.el
(python-font-lock-keywords-maximum-decoration)
(python--treesit-fontify-union-types)
(python-shell-get-process-name, python-shell-restart)
(python-shell-completion-at-point, python-ffap-module-path)
(python-util-comint-end-of-output-p, python--import-sources)
(python-add-import, python-remove-import, python-fix-imports):
* lisp/progmodes/xref.el (xref--add-log-current-defun):
* lisp/repeat.el (repeat-echo-message-string):
* lisp/saveplace.el (save-place-dired-hook):
* lisp/server.el (server-save-buffers-kill-terminal):
* lisp/shadowfile.el (shadow-make-fullname)
(shadow-contract-file-name, shadow-define-literal-group):
* lisp/shell.el (shell-highlight-undef-mode):
* lisp/simple.el (command-completion-using-modes-p)
(command-execute, file-user-uid, file-group-gid)
(first-completion, last-completion, switch-to-completions):
* lisp/startup.el (startup--load-user-init-file):
* lisp/tab-line.el (tab-line-tabs-buffer-group-by-project):
* lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer):
* lisp/term/android-win.el (android-encode-select-string)
(gui-backend-set-selection):
* lisp/term/haiku-win.el (haiku-dnd-convert-string)
(haiku-select-encode-xstring, haiku-select-encode-utf-8-string):
* lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize):
* lisp/textmodes/ispell.el (ispell-completion-at-point):
* lisp/textmodes/sgml-mode.el (sgml-validate)
(html-mode--complete-at-point):
* lisp/textmodes/tex-mode.el (tex-recenter-output-buffer)
(xref-backend-references):
* lisp/thingatpt.el (thing-at-point-file-at-point)
(thing-at-point-face-at-point):
* lisp/thread.el (thread-list--get-status):
* lisp/time.el (world-clock-copy-time-as-kill, world-clock):
* lisp/touch-screen.el (touch-screen-handle-touch):
* lisp/treesit.el (treesit-language-at, treesit-node-at)
(treesit-node-on, treesit-buffer-root-node)
(treesit-node-field-name, treesit-local-parsers-at)
(treesit-local-parsers-on, treesit--cleanup-local-range-overlays)
(treesit-font-lock-recompute-features)
(treesit-font-lock-fontify-region, treesit-transpose-sexps)
(treesit-add-log-current-defun, treesit-major-mode-setup)
(treesit--explorer-refresh, treesit-install-language-grammar):
* lisp/url/url.el (url-retrieve-synchronously):
* lisp/vc/smerge-mode.el (smerge-diff):
* lisp/vc/vc-dir.el (vc-dir):
* lisp/vc/vc-dispatcher.el (vc-do-async-command):
* lisp/vc/vc-git.el (vc-git-dir--branch-headers)
(vc-git-dir--stash-headers, vc-git--log-edit-summary-check)
(vc-git-stash-list):
* lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset)
(vc-clone):
* lisp/visual-wrap.el (visual-wrap--apply-to-line):
* lisp/wid-edit.el (widget-text)
(widget-editable-list-insert-before):
* lisp/window-tool-bar.el
(window-tool-bar--keymap-entry-to-string):
* lisp/window.el (display-buffer, display-buffer-full-frame)
(window-point-context-set, window-point-context-use)
(window-point-context-use-default-function):
* lisp/xdg.el (xdg-current-desktop):
* lisp/xwidget.el (xwidget-webkit-callback):
* lisp/yank-media.el (yank-media--get-selection)
(yank-media-types):
* test/lisp/comint-tests.el
(comint-tests/test-password-function):
* test/lisp/completion-preview-tests.el
(completion-preview-tests--capf):
* test/lisp/cus-edit-tests.el (with-cus-edit-test):
* test/lisp/erc/erc-scenarios-base-local-modules.el
(-phony-sblm-):
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--on-post-modify):
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--asp-parse-entry):
* test/lisp/erc/erc-tests.el (erc-modules--internal-property)
(erc--find-mode, erc-tests--update-modules):
* test/lisp/erc/resources/erc-d/erc-d-i.el
(erc-d-i--parse-message):
* test/lisp/erc/resources/erc-d/erc-d-t.el
(erc-d-t-kill-related-buffers, erc-d-t-with-cleanup):
* test/lisp/erc/resources/erc-d/erc-d-tests.el
(erc-d-i--parse-message--irc-parser-tests):
* test/lisp/erc/resources/erc-d/erc-d-u.el
(erc-d-u--read-exchange-slowly):
* test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire)
(erc-d--finalize-done, erc-d--command-handle-all):
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common-with-cleanup):
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests--common-display-message)
(erc-tests-common-create-subprocess):
* test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058):
* test/lisp/international/mule-tests.el
(mule-cmds-tests--ucs-names-missing-names):
* test/lisp/progmodes/python-tests.el
(python-tests-get-shell-interpreter)
(python-tests--get-interpreter-info):
* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-resource-file):
* test/lisp/replace-tests.el (replace-tests-with-undo):
* test/src/emacs-tests.el (emacs-tests--seccomp-debug):
* test/src/process-tests.el (process-tests--emacs-command)
(process-tests--emacs-binary, process-tests--dump-file):
* test/src/treesit-tests.el (treesit--ert-test-defun-navigation):
Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
|
|
|
|
(if-let* ((result (assq ',variable connection-local-variables-alist)))
|
2024-01-07 12:39:47 +01:00
|
|
|
|
(cdr result)
|
|
|
|
|
,variable))))
|
2023-12-09 10:13:14 +01:00
|
|
|
|
|
2020-11-21 15:28:52 +01:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun path-separator ()
|
|
|
|
|
"The connection-local value of `path-separator'."
|
2023-12-09 10:13:14 +01:00
|
|
|
|
(connection-local-value path-separator))
|
2020-11-21 15:28:52 +01:00
|
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun null-device ()
|
|
|
|
|
"The connection-local value of `null-device'."
|
2023-12-09 10:13:14 +01:00
|
|
|
|
(connection-local-value null-device))
|
2020-11-21 15:28:52 +01:00
|
|
|
|
|
2009-08-12 20:29:30 +00:00
|
|
|
|
|
|
|
|
|
(provide 'files-x)
|
2009-08-14 04:47:38 +00:00
|
|
|
|
|
2009-08-12 20:29:30 +00:00
|
|
|
|
;;; files-x.el ends here
|