Merge remote-tracking branch 'origin/master' into feature/android
This commit is contained in:
commit
1c429b7fef
17 changed files with 293 additions and 85 deletions
|
@ -1537,7 +1537,8 @@ that it uses the predicate @code{custom-variable-p} instead of
|
|||
@code{commandp}.
|
||||
@end defun
|
||||
|
||||
@deffn Command read-color &optional prompt convert allow-empty display
|
||||
@deffn Command read-color &optional prompt convert allow-empty @
|
||||
display foreground face
|
||||
This function reads a string that is a color specification, either the
|
||||
color's name or an RGB hex value such as @code{#RRRGGGBBB}. It
|
||||
prompts with @var{prompt} (default: @code{"Color (name or #RGB triplet):"})
|
||||
|
@ -1557,6 +1558,13 @@ non-@code{nil} and the user enters null input.
|
|||
|
||||
Interactively, or when @var{display} is non-@code{nil}, the return
|
||||
value is also displayed in the echo area.
|
||||
|
||||
The optional arguments @var{foreground} and @var{face} control the
|
||||
appearence of the completion candidates in the @file{*Completions*}
|
||||
buffer. The candidates are displayed in the specified @var{face} but
|
||||
with different colors: if @var{foreground} is non-@code{nil}, the
|
||||
foreground color is changed to be the color of the candidate,
|
||||
otherwise the background is changed to the candidate's color.
|
||||
@end deffn
|
||||
|
||||
See also the functions @code{read-coding-system} and
|
||||
|
|
|
@ -211,20 +211,20 @@ If nil, then no messages will ever be printed to the minibuffer."
|
|||
|
||||
(defcustom align-dq-string-modes
|
||||
(append align-lisp-modes align-c++-modes align-perl-modes
|
||||
'(python-mode vhdl-mode))
|
||||
'(python-base-mode vhdl-mode))
|
||||
"A list of modes where double quoted strings should be excluded."
|
||||
:type '(repeat symbol)
|
||||
:group 'align)
|
||||
|
||||
(defcustom align-sq-string-modes
|
||||
(append align-perl-modes '(python-mode))
|
||||
(append align-perl-modes '(python-base-mode))
|
||||
"A list of modes where single quoted strings should be excluded."
|
||||
:type '(repeat symbol)
|
||||
:group 'align)
|
||||
|
||||
(defcustom align-open-comment-modes
|
||||
(append align-lisp-modes align-c++-modes align-perl-modes
|
||||
'(python-mode makefile-mode vhdl-mode))
|
||||
'(python-base-mode makefile-mode vhdl-mode))
|
||||
"A list of modes with a single-line comment syntax.
|
||||
These are comments as in Lisp, which have a beginning, but end with
|
||||
the line (i.e., `comment-end' is an empty string)."
|
||||
|
@ -450,7 +450,7 @@ The possible settings for `align-region-separate' are:
|
|||
(regexp . ,(concat "[^=!<> \t\n]\\(\\s-*\\)="
|
||||
"\\(\\s-*\\)\\([^>= \t\n]\\|$\\)"))
|
||||
(group . (1 2))
|
||||
(modes . '(python-mode))
|
||||
(modes . '(python-base-mode))
|
||||
(tab-stop . nil))
|
||||
|
||||
(make-assignment
|
||||
|
@ -478,7 +478,7 @@ The possible settings for `align-region-separate' are:
|
|||
(basic-comma-delimiter
|
||||
(regexp . ",\\(\\s-*\\)[^# \t\n]")
|
||||
(repeat . t)
|
||||
(modes . (append align-perl-modes '(python-mode)))
|
||||
(modes . (append align-perl-modes '(python-base-mode)))
|
||||
(run-if . ,(lambda () current-prefix-arg)))
|
||||
|
||||
(c++-comment
|
||||
|
@ -508,7 +508,7 @@ The possible settings for `align-region-separate' are:
|
|||
|
||||
(python-chain-logic
|
||||
(regexp . "\\(\\s-*\\)\\(\\<and\\>\\|\\<or\\>\\)")
|
||||
(modes . '(python-mode))
|
||||
(modes . '(python-base-mode))
|
||||
(valid . ,(lambda ()
|
||||
(save-excursion
|
||||
(goto-char (match-end 2))
|
||||
|
@ -525,7 +525,7 @@ The possible settings for `align-region-separate' are:
|
|||
|
||||
(basic-line-continuation
|
||||
(regexp . "\\(\\s-*\\)\\\\$")
|
||||
(modes . '(python-mode makefile-mode)))
|
||||
(modes . '(python-base-mode makefile-mode)))
|
||||
|
||||
(tex-record-separator
|
||||
(regexp . ,(lambda (end reverse)
|
||||
|
@ -570,7 +570,7 @@ The possible settings for `align-region-separate' are:
|
|||
(css-declaration
|
||||
(regexp . "^\\s-*\\(?:\\w-?\\)+:\\(\\s-*\\).*;")
|
||||
(group . (1))
|
||||
(modes . '(css-mode html-mode)))
|
||||
(modes . '(css-base-mode html-mode)))
|
||||
|
||||
(toml-assignment
|
||||
(regexp . ,(rx (group (zero-or-more (syntax whitespace)))
|
||||
|
|
|
@ -1340,10 +1340,11 @@ of a global face. Value is the new attribute value."
|
|||
(format "%s" old-value))))
|
||||
(setq new-value
|
||||
(if (memq attribute '(:foreground :background))
|
||||
(let ((color
|
||||
(read-color
|
||||
(format-prompt "%s for face `%s'"
|
||||
default attribute-name face))))
|
||||
(let* ((prompt (format-prompt
|
||||
"%s for face `%s'"
|
||||
default attribute-name face))
|
||||
(fg (eq attribute ':foreground))
|
||||
(color (read-color prompt nil nil nil fg face)))
|
||||
(if (equal (string-trim color) "")
|
||||
default
|
||||
color))
|
||||
|
@ -1870,15 +1871,26 @@ to `defined-colors' the elements of the returned list are color
|
|||
strings with text properties, that make the color names render
|
||||
with the color they represent as background color (if FOREGROUND
|
||||
is nil; otherwise use the foreground color)."
|
||||
(mapcar
|
||||
(lambda (color-name)
|
||||
(let ((color (copy-sequence color-name)))
|
||||
(propertize color 'face
|
||||
(if foreground
|
||||
(list :foreground color)
|
||||
(list :foreground (readable-foreground-color color-name)
|
||||
:background color)))))
|
||||
(defined-colors frame)))
|
||||
(mapcar (lambda (color-name)
|
||||
(faces--string-with-color color-name color-name foreground))
|
||||
(defined-colors frame)))
|
||||
|
||||
(defun faces--string-with-color (string color &optional foreground face)
|
||||
"Return a copy of STRING with face attributes for COLOR.
|
||||
Set the :background or :foreground attribute to COLOR, depending
|
||||
on the argument FOREGROUND.
|
||||
|
||||
The optional FACE argument determines the values of other face
|
||||
attributes."
|
||||
(let* ((defaults (if face (list face) '()))
|
||||
(colors (cond (foreground
|
||||
(list :foreground color))
|
||||
(face
|
||||
(list :background color))
|
||||
(t
|
||||
(list :foreground (readable-foreground-color color)
|
||||
:background color)))))
|
||||
(propertize string 'face (cons colors defaults))))
|
||||
|
||||
(defun readable-foreground-color (color)
|
||||
"Return a readable foreground color for background COLOR.
|
||||
|
@ -1987,7 +1999,7 @@ If omitted or nil, that stands for the selected frame's display."
|
|||
(> (tty-color-gray-shades display) 2)))
|
||||
|
||||
(defun read-color (&optional prompt convert-to-RGB allow-empty-name msg
|
||||
foreground)
|
||||
foreground face)
|
||||
"Read a color name or RGB triplet.
|
||||
Completion is available for color names, but not for RGB triplets.
|
||||
|
||||
|
@ -2016,17 +2028,25 @@ to enter an empty color name (the empty string).
|
|||
Interactively, or with optional arg MSG non-nil, print the
|
||||
resulting color name in the echo area.
|
||||
|
||||
Interactively, displays a list of colored completions. If optional
|
||||
argument FOREGROUND is non-nil, shows them as foregrounds, otherwise
|
||||
as backgrounds."
|
||||
Interactively, provides completion for selecting the color. If
|
||||
the optional argument FOREGROUND is non-nil, shows the completion
|
||||
candidates with their foregound color changed to be the color of
|
||||
the candidate, otherwise changes the background color of the
|
||||
candidates. The optional argument FACE determines the other
|
||||
face attributes of the candidates on display."
|
||||
(interactive "i\np\ni\np") ; Always convert to RGB interactively.
|
||||
(let* ((completion-ignore-case t)
|
||||
(colors (append '("foreground at point" "background at point")
|
||||
(if allow-empty-name '(""))
|
||||
(if (display-color-p)
|
||||
(defined-colors-with-face-attributes
|
||||
nil foreground)
|
||||
(defined-colors))))
|
||||
(color-alist
|
||||
`(("foreground at point" . ,(foreground-color-at-point))
|
||||
("background at point" . ,(background-color-at-point))
|
||||
,@(if allow-empty-name '(("" . unspecified)))
|
||||
,@(mapcar (lambda (c) (cons c c)) (defined-colors))))
|
||||
(colors (mapcar (lambda (pair)
|
||||
(let* ((name (car pair))
|
||||
(color (cdr pair)))
|
||||
(faces--string-with-color name color
|
||||
foreground face)))
|
||||
color-alist))
|
||||
(color (completing-read
|
||||
(or prompt "Color (name or #RGB triplet): ")
|
||||
;; Completing function for reading colors, accepting
|
||||
|
|
|
@ -77,8 +77,9 @@ vary:
|
|||
added to the file name.
|
||||
|
||||
- Otherwise `image-dired-thumbnail-storage' is used to set the
|
||||
directory where to store the thumbnail. In this latter case
|
||||
the name given to the thumbnail depends on the value of
|
||||
directory where to store the thumbnail. In this latter case,
|
||||
if `image-dired-thumbnail-storage' is set to `image-dired' the
|
||||
file name given to the thumbnail depends on the value of
|
||||
`image-dired-thumb-naming'.
|
||||
|
||||
See also `image-dired-thumbnail-storage' and
|
||||
|
@ -99,15 +100,14 @@ See also `image-dired-thumbnail-storage' and
|
|||
(let ((name (if (eq 'sha1-contents image-dired-thumb-naming)
|
||||
(image-dired-contents-sha1 file)
|
||||
;; Defaults to SHA-1 of file name
|
||||
(if (eq 'per-directory image-dired-thumbnail-storage)
|
||||
(sha1 (file-name-nondirectory file))
|
||||
(sha1 file)))))
|
||||
(sha1 file))))
|
||||
(cond ((or (eq 'image-dired image-dired-thumbnail-storage)
|
||||
;; Maintained for backwards compatibility:
|
||||
(eq 'use-image-dired-dir image-dired-thumbnail-storage))
|
||||
(expand-file-name (format "%s.jpg" name) (image-dired-dir)))
|
||||
((eq 'per-directory image-dired-thumbnail-storage)
|
||||
(expand-file-name (format "%s.jpg" name)
|
||||
(expand-file-name (format "%s.thumb.jpg"
|
||||
(file-name-nondirectory file))
|
||||
(expand-file-name
|
||||
".image-dired"
|
||||
(file-name-directory file)))))))))
|
||||
|
|
|
@ -174,8 +174,8 @@ computing the SHA-1 of first 4KiB of the image contents (See
|
|||
In both case, a \"jpg\" extension is appended to save as JPEG.
|
||||
|
||||
The value of this option is ignored if Image-Dired is customized
|
||||
to use the Thumbnail Managing Standard. See
|
||||
`image-dired-thumbnail-storage'."
|
||||
to use the Thumbnail Managing Standard or the per-directory
|
||||
thumbnails setting. See `image-dired-thumbnail-storage'."
|
||||
:type '(choice :tag "How to name thumbnail files"
|
||||
(const :tag "SHA-1 of the image file name" sha1-filename)
|
||||
(const :tag "SHA-1 of the image contents" sha1-contents))
|
||||
|
@ -208,8 +208,8 @@ thumbnails:
|
|||
|
||||
Set this user option to `per-directory'.
|
||||
|
||||
To control the naming of thumbnails for alternatives (2) and (3)
|
||||
above, customize the value of `image-dired-thumb-naming'.
|
||||
To control the naming of thumbnails for alternative (2) above,
|
||||
customize the value of `image-dired-thumb-naming'.
|
||||
|
||||
To control the default size of thumbnails for alternatives (2)
|
||||
and (3) above, customize the value of `image-dired-thumb-size'.
|
||||
|
|
|
@ -347,10 +347,11 @@ Use Unicode characters for footnoting."
|
|||
("ק" "ר" "ש" "ת" "תק" "תר" "תש" "תת" "תתק")))
|
||||
|
||||
(defconst footnote-hebrew-numeric-regex
|
||||
(let ((numchars (string-to-list
|
||||
(apply #'concat (apply #'append footnote-hebrew-numeric)))))
|
||||
(let ((numchars
|
||||
(delete-dups
|
||||
(string-to-list
|
||||
(apply #'concat (apply #'append footnote-hebrew-numeric))))))
|
||||
(rx-to-string `(1+ (in ?' ,@numchars)))))
|
||||
;; (defconst footnote-hebrew-numeric-regex "\\([אבגדהוזחט]'\\)?\\(ת\\)?\\(ת\\)?\\([קרשת]\\)?\\([טיכלמנסעפצ]\\)?\\([אבגדהוזחט]\\)?")
|
||||
|
||||
(defun footnote--hebrew-numeric (n)
|
||||
"Supports 9999 footnotes, then rolls over."
|
||||
|
|
|
@ -699,10 +699,10 @@ Do the same for the keys of the same name."
|
|||
menu-bar-separator)
|
||||
(bindings--define-key menu [customize-browse]
|
||||
'(menu-item "Browse Customization Groups" customize-browse
|
||||
:help "Browse all customization groups"))
|
||||
:help "Tree-like browser of all the groups of customizable options"))
|
||||
(bindings--define-key menu [customize]
|
||||
'(menu-item "Top-level Customization Group" customize
|
||||
:help "The master group called `Emacs'"))
|
||||
'(menu-item "Top-level Emacs Customization Group" customize
|
||||
:help "Top-level groups of customizable options, and their descriptions"))
|
||||
(bindings--define-key menu [customize-themes]
|
||||
'(menu-item "Custom Themes" customize-themes
|
||||
:help "Choose a pre-defined customization theme"))
|
||||
|
|
|
@ -717,6 +717,25 @@ on the remote file system.
|
|||
Format specifiers are replaced by `tramp-expand-script', percent
|
||||
characters need to be doubled.")
|
||||
|
||||
(defconst tramp-stat-file-attributes-with-selinux
|
||||
(format
|
||||
(concat
|
||||
"(%%s -c"
|
||||
" '((%s%%%%N%s) %%%%h (%s%%%%U%s . %%%%u) (%s%%%%G%s . %%%%g)"
|
||||
" %%%%X %%%%Y %%%%Z %%%%s %s%%%%A%s t %%%%i -1 %s%%%%C%s)'"
|
||||
" \"$1\" %%n || echo nil) |"
|
||||
" sed -e 's/\"/\\\\\"/g' -e 's/%s/\"/g'")
|
||||
tramp-stat-marker tramp-stat-marker ; %%N
|
||||
tramp-stat-marker tramp-stat-marker ; %%U
|
||||
tramp-stat-marker tramp-stat-marker ; %%G
|
||||
tramp-stat-marker tramp-stat-marker ; %%A
|
||||
tramp-stat-marker tramp-stat-marker ; %%C
|
||||
tramp-stat-quoted-marker)
|
||||
"Shell function to produce output suitable for use with `file-attributes'
|
||||
on the remote file system, including SELinux context.
|
||||
Format specifiers are replaced by `tramp-expand-script', percent
|
||||
characters need to be doubled.")
|
||||
|
||||
(defconst tramp-perl-directory-files-and-attributes
|
||||
"%p -e '
|
||||
chdir($ARGV[0]) or printf(\"\\\"Cannot change to $ARGV[0]: $''!''\\\"\\n\"), exit();
|
||||
|
@ -795,6 +814,33 @@ characters need to be doubled.")
|
|||
Format specifiers are replaced by `tramp-expand-script', percent
|
||||
characters need to be doubled.")
|
||||
|
||||
(defconst tramp-stat-directory-files-and-attributes-with-selinux
|
||||
(format
|
||||
(concat
|
||||
;; We must care about file names with spaces, or starting with
|
||||
;; "-"; this would confuse xargs. "ls -aQ" might be a solution,
|
||||
;; but it does not work on all remote systems. Therefore, we use
|
||||
;; \000 as file separator. `tramp-sh--quoting-style-options' do
|
||||
;; not work for file names with spaces piped to "xargs".
|
||||
;; Apostrophes in the stat output are masked as
|
||||
;; `tramp-stat-marker', in order to make a proper shell escape of
|
||||
;; them in file names.
|
||||
"cd \"$1\" && echo \"(\"; (%%l -a | tr '\\n\\r' '\\000\\000' |"
|
||||
" xargs -0 %%s -c"
|
||||
" '(%s%%%%n%s (%s%%%%N%s) %%%%h (%s%%%%U%s . %%%%u) (%s%%%%G%s . %%%%g) %%%%X %%%%Y %%%%Z %%%%s %s%%%%A%s t %%%%i -1 %s%%%%C%s)'"
|
||||
" -- %%n | sed -e 's/\"/\\\\\"/g' -e 's/%s/\"/g'); echo \")\"")
|
||||
tramp-stat-marker tramp-stat-marker ; %n
|
||||
tramp-stat-marker tramp-stat-marker ; %N
|
||||
tramp-stat-marker tramp-stat-marker ; %U
|
||||
tramp-stat-marker tramp-stat-marker ; %G
|
||||
tramp-stat-marker tramp-stat-marker ; %A
|
||||
tramp-stat-marker tramp-stat-marker ; %C
|
||||
tramp-stat-quoted-marker)
|
||||
"Shell function implementing `directory-files-and-attributes' as Lisp
|
||||
`read'able output, including SELinux context.
|
||||
Format specifiers are replaced by `tramp-expand-script', percent
|
||||
characters need to be doubled.")
|
||||
|
||||
(defconst tramp-perl-id
|
||||
"%p -e '
|
||||
use strict;
|
||||
|
@ -1255,10 +1301,10 @@ Operations not mentioned here will be handled by the normal Emacs functions.")
|
|||
(let (symlinkp dirp
|
||||
res-inode res-filemodes res-numlinks
|
||||
res-uid-string res-gid-string res-uid-integer res-gid-integer
|
||||
res-size res-symlink-target)
|
||||
res-size res-symlink-target res-context)
|
||||
(tramp-message vec 5 "file attributes with ls: %s" localname)
|
||||
;; We cannot send all three commands combined, it could exceed
|
||||
;; NAME_MAX or PATH_MAX. Happened on macOS, for example.
|
||||
;; We cannot send both commands combined, it could exceed NAME_MAX
|
||||
;; or PATH_MAX. Happened on macOS, for example.
|
||||
(when (tramp-send-command-and-check
|
||||
vec
|
||||
(format "cd %s && (%s %s || %s -h %s)"
|
||||
|
@ -1277,13 +1323,14 @@ Operations not mentioned here will be handled by the normal Emacs functions.")
|
|||
(file-name-nondirectory localname)))))
|
||||
(tramp-send-command
|
||||
vec
|
||||
(format "%s -ild %s %s; %s -lnd %s %s"
|
||||
(format "%s -ild %s %s; %s -lnd%s %s %s"
|
||||
(tramp-get-ls-command vec)
|
||||
;; On systems which have no quoting style, file names
|
||||
;; with special characters could fail.
|
||||
(tramp-sh--quoting-style-options vec)
|
||||
(tramp-shell-quote-argument localname)
|
||||
(tramp-get-ls-command vec)
|
||||
(if (tramp-remote-selinux-p vec) "Z" "")
|
||||
;; On systems which have no quoting style, file names
|
||||
;; with special characters could fail.
|
||||
(tramp-sh--quoting-style-options vec)
|
||||
|
@ -1333,6 +1380,10 @@ Operations not mentioned here will be handled by the normal Emacs functions.")
|
|||
(setq res-uid-integer tramp-unknown-id-integer))
|
||||
(unless (numberp res-gid-integer)
|
||||
(setq res-gid-integer tramp-unknown-id-integer))
|
||||
;; ... SELinux context
|
||||
(when (tramp-remote-selinux-p vec)
|
||||
(setq res-context (read (current-buffer))
|
||||
res-context (symbol-name res-context)))
|
||||
|
||||
;; Return data gathered.
|
||||
(list
|
||||
|
@ -1359,7 +1410,10 @@ Operations not mentioned here will be handled by the normal Emacs functions.")
|
|||
;; 10. Inode number.
|
||||
res-inode
|
||||
;; 11. Device number. Will be replaced by a virtual device number.
|
||||
-1))))))
|
||||
-1
|
||||
;; 12. SELinux context. Will be extracted in
|
||||
;; `tramp-convert-file-attributes'.
|
||||
res-context))))))
|
||||
|
||||
(defun tramp-do-file-attributes-with-perl (vec localname)
|
||||
"Implement `file-attributes' for Tramp files using a Perl script."
|
||||
|
@ -1373,11 +1427,20 @@ Operations not mentioned here will be handled by the normal Emacs functions.")
|
|||
(defun tramp-do-file-attributes-with-stat (vec localname)
|
||||
"Implement `file-attributes' for Tramp files using stat(1) command."
|
||||
(tramp-message vec 5 "file attributes with stat: %s" localname)
|
||||
(tramp-maybe-send-script
|
||||
vec tramp-stat-file-attributes "tramp_stat_file_attributes")
|
||||
(tramp-send-command-and-read
|
||||
vec (format "tramp_stat_file_attributes %s"
|
||||
(tramp-shell-quote-argument localname))))
|
||||
(cond
|
||||
((tramp-remote-selinux-p vec)
|
||||
(tramp-maybe-send-script
|
||||
vec tramp-stat-file-attributes-with-selinux
|
||||
"tramp_stat_file_attributes_with_selinux")
|
||||
(tramp-send-command-and-read
|
||||
vec (format "tramp_stat_file_attributes_with_selinux %s"
|
||||
(tramp-shell-quote-argument localname))))
|
||||
(t
|
||||
(tramp-maybe-send-script
|
||||
vec tramp-stat-file-attributes "tramp_stat_file_attributes")
|
||||
(tramp-send-command-and-read
|
||||
vec (format "tramp_stat_file_attributes %s"
|
||||
(tramp-shell-quote-argument localname))))))
|
||||
|
||||
(defun tramp-sh-handle-set-visited-file-modtime (&optional time-list)
|
||||
"Like `set-visited-file-modtime' for Tramp files."
|
||||
|
@ -1572,7 +1635,7 @@ ID-FORMAT valid values are `string' and `integer'."
|
|||
(tramp-shell-quote-argument localname))))))))
|
||||
|
||||
(defun tramp-remote-selinux-p (vec)
|
||||
"Check, whether SELINUX is enabled on the remote host."
|
||||
"Check, whether SELinux is enabled on the remote host."
|
||||
(with-tramp-connection-property (tramp-get-process vec) "selinux-p"
|
||||
(tramp-send-command-and-check vec "selinuxenabled")))
|
||||
|
||||
|
@ -1775,12 +1838,21 @@ ID-FORMAT valid values are `string' and `integer'."
|
|||
(defun tramp-do-directory-files-and-attributes-with-stat (vec localname)
|
||||
"Implement `directory-files-and-attributes' for Tramp files with stat(1) command."
|
||||
(tramp-message vec 5 "directory-files-and-attributes with stat: %s" localname)
|
||||
(tramp-maybe-send-script
|
||||
vec tramp-stat-directory-files-and-attributes
|
||||
"tramp_stat_directory_files_and_attributes")
|
||||
(tramp-send-command-and-read
|
||||
vec (format "tramp_stat_directory_files_and_attributes %s"
|
||||
(tramp-shell-quote-argument localname))))
|
||||
(cond
|
||||
((tramp-remote-selinux-p vec)
|
||||
(tramp-maybe-send-script
|
||||
vec tramp-stat-directory-files-and-attributes-with-selinux
|
||||
"tramp_stat_directory_files_and_attributes_with_selinux")
|
||||
(tramp-send-command-and-read
|
||||
vec (format "tramp_stat_directory_files_and_attributes_with_selinux %s"
|
||||
(tramp-shell-quote-argument localname))))
|
||||
(t
|
||||
(tramp-maybe-send-script
|
||||
vec tramp-stat-directory-files-and-attributes
|
||||
"tramp_stat_directory_files_and_attributes")
|
||||
(tramp-send-command-and-read
|
||||
vec (format "tramp_stat_directory_files_and_attributes %s"
|
||||
(tramp-shell-quote-argument localname))))))
|
||||
|
||||
;; This function should return "foo/" for directories and "bar" for
|
||||
;; files.
|
||||
|
@ -1966,7 +2038,7 @@ OK-IF-ALREADY-EXISTS means don't barf if NEWNAME exists already.
|
|||
KEEP-DATE means to make sure that NEWNAME has the same timestamp
|
||||
as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
|
||||
the uid and gid if both files are on the same host.
|
||||
PRESERVE-EXTENDED-ATTRIBUTES activates selinux and acl commands.
|
||||
PRESERVE-EXTENDED-ATTRIBUTES activates SELinux and ACL commands.
|
||||
|
||||
This function is invoked by `tramp-sh-handle-copy-file' and
|
||||
`tramp-sh-handle-rename-file'. It is an error if OP is neither
|
||||
|
|
|
@ -234,7 +234,7 @@ OK-IF-ALREADY-EXISTS means don't barf if NEWNAME exists already.
|
|||
KEEP-DATE means to make sure that NEWNAME has the same timestamp
|
||||
as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
|
||||
the uid and gid if both files are on the same host.
|
||||
PRESERVE-EXTENDED-ATTRIBUTES activates selinux and acl commands.
|
||||
PRESERVE-EXTENDED-ATTRIBUTES activates SELinux and ACL commands.
|
||||
|
||||
This function is invoked by `tramp-sudoedit-handle-copy-file' and
|
||||
`tramp-sudoedit-handle-rename-file'. It is an error if OP is
|
||||
|
@ -434,14 +434,37 @@ the result will be a local, non-Tramp, file name."
|
|||
"stat format string to produce output suitable for use with
|
||||
`file-attributes' on the remote file system.")
|
||||
|
||||
(defconst tramp-sudoedit-file-attributes-with-selinux
|
||||
(format
|
||||
;; Apostrophes in the stat output are masked as
|
||||
;; `tramp-stat-marker', in order to make a proper shell escape of
|
||||
;; them in file names. They are replaced in
|
||||
;; `tramp-sudoedit-send-command-and-read'.
|
||||
(concat "((%s%%N%s) %%h (%s%%U%s . %%u) (%s%%G%s . %%g)"
|
||||
" %%X %%Y %%Z %%s %s%%A%s t %%i -1 %s%%C%s)")
|
||||
tramp-stat-marker tramp-stat-marker ; %%N
|
||||
tramp-stat-marker tramp-stat-marker ; %%U
|
||||
tramp-stat-marker tramp-stat-marker ; %%G
|
||||
tramp-stat-marker tramp-stat-marker ; %%A
|
||||
tramp-stat-marker tramp-stat-marker) ; %%C
|
||||
"stat format string to produce output suitable for use with
|
||||
`file-attributes' on the remote file system, including SELinux context.")
|
||||
|
||||
(defun tramp-sudoedit-handle-file-attributes (filename &optional id-format)
|
||||
"Like `file-attributes' for Tramp files."
|
||||
;; The result is cached in `tramp-convert-file-attributes'.
|
||||
(with-parsed-tramp-file-name (expand-file-name filename) nil
|
||||
(tramp-convert-file-attributes v localname id-format
|
||||
(tramp-sudoedit-send-command-and-read
|
||||
v "env" "QUOTING_STYLE=locale" "stat" "-c"
|
||||
tramp-sudoedit-file-attributes (file-name-unquote localname)))))
|
||||
(cond
|
||||
((tramp-sudoedit-remote-selinux-p v)
|
||||
(tramp-sudoedit-send-command-and-read
|
||||
v "env" "QUOTING_STYLE=locale" "stat" "-c"
|
||||
tramp-sudoedit-file-attributes-with-selinux
|
||||
(file-name-unquote localname)))
|
||||
(t
|
||||
(tramp-sudoedit-send-command-and-read
|
||||
v "env" "QUOTING_STYLE=locale" "stat" "-c"
|
||||
tramp-sudoedit-file-attributes (file-name-unquote localname)))))))
|
||||
|
||||
(defun tramp-sudoedit-handle-file-executable-p (filename)
|
||||
"Like `file-executable-p' for Tramp files."
|
||||
|
@ -507,7 +530,7 @@ the result will be a local, non-Tramp, file name."
|
|||
v 'file-error "Error while changing file's mode %s" filename)))))
|
||||
|
||||
(defun tramp-sudoedit-remote-selinux-p (vec)
|
||||
"Check, whether SELINUX is enabled on the remote host."
|
||||
"Check, whether SELinux is enabled on the remote host."
|
||||
(with-tramp-connection-property (tramp-get-process vec) "selinux-p"
|
||||
(zerop (tramp-call-process vec "selinuxenabled"))))
|
||||
|
||||
|
|
|
@ -6060,6 +6060,13 @@ to cache the result. Return the modified ATTR."
|
|||
;; Set virtual device number.
|
||||
(setcar (nthcdr 11 attr)
|
||||
(tramp-get-device ,vec))
|
||||
;; Set SELinux context.
|
||||
(when (stringp (nth 12 attr))
|
||||
(tramp-set-file-property
|
||||
,vec ,localname "file-selinux-context"
|
||||
(split-string (nth 12 attr) ":" 'omit)))
|
||||
;; Remove optional entries.
|
||||
(setcdr (nthcdr 11 attr) nil)
|
||||
attr)))))
|
||||
|
||||
;; Return normalized result.
|
||||
|
|
|
@ -5877,7 +5877,8 @@ default function."
|
|||
|
||||
(defface cperl-method-call
|
||||
'((t (:inherit 'default )))
|
||||
"The face for method calls. Usually, they are not fontified.
|
||||
"Font Lock mode face for method calls.
|
||||
Usually, method calls are not fontified.
|
||||
We use this face to prevent calls to methods which look like
|
||||
builtin functions to be fontified like, well, builtin
|
||||
functions (which they are not). Inherits from `default'.")
|
||||
|
|
|
@ -421,6 +421,14 @@ This can be useful when using docker to run a language server.")
|
|||
|
||||
;;; Constants
|
||||
;;;
|
||||
(defconst eglot--version
|
||||
(eval-when-compile
|
||||
(when byte-compile-current-file
|
||||
(require 'lisp-mnt)
|
||||
(lm-version byte-compile-current-file)))
|
||||
"The version as a string of this version of Eglot.
|
||||
It is nil if Eglot is not byte-complied.")
|
||||
|
||||
(defconst eglot--symbol-kind-names
|
||||
`((1 . "File") (2 . "Module")
|
||||
(3 . "Namespace") (4 . "Package") (5 . "Class")
|
||||
|
@ -1352,7 +1360,9 @@ This docstring appeases checkdoc, that's all."
|
|||
(eq (jsonrpc-process-type server)
|
||||
'network))
|
||||
(emacs-pid))
|
||||
:clientInfo '(:name "Eglot")
|
||||
:clientInfo
|
||||
`(:name "Eglot" ,@(when eglot--version
|
||||
`(:version ,eglot--version)))
|
||||
;; Maybe turn trampy `/ssh:foo@bar:/path/to/baz.py'
|
||||
;; into `/path/to/baz.py', so LSP groks it.
|
||||
:rootPath (file-local-name
|
||||
|
|
13
test/lisp/align-resources/align-regexp.erts
Normal file
13
test/lisp/align-resources/align-regexp.erts
Normal file
|
@ -0,0 +1,13 @@
|
|||
Name: align function declaration
|
||||
|
||||
=-=
|
||||
Fred (123) 456-7890
|
||||
Alice (123) 456-7890
|
||||
Mary-Anne (123) 456-7890
|
||||
Joe (123) 456-7890
|
||||
=-=
|
||||
Fred (123) 456-7890
|
||||
Alice (123) 456-7890
|
||||
Mary-Anne (123) 456-7890
|
||||
Joe (123) 456-7890
|
||||
=-=-=
|
|
@ -9,3 +9,15 @@ int
|
|||
main (int argc,
|
||||
char *argv[]);
|
||||
=-=-=
|
||||
|
||||
Name: example from Commentary
|
||||
|
||||
=-=
|
||||
int a = 1;
|
||||
short foo = 2;
|
||||
double blah = 4;
|
||||
=-=
|
||||
int a = 1;
|
||||
short foo = 2;
|
||||
double blah = 4;
|
||||
=-=-=
|
||||
|
|
29
test/lisp/align-resources/latex-mode.erts
Normal file
29
test/lisp/align-resources/latex-mode.erts
Normal file
|
@ -0,0 +1,29 @@
|
|||
Name: tex-record-separator and basic-line-continuation
|
||||
|
||||
=-=
|
||||
\documentclass{}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{tabular}{l|l}
|
||||
\textit{Player name} &\textit{Career home runs} \\
|
||||
\hline
|
||||
Hank Aaron &755 \\
|
||||
Babe Ruth &714
|
||||
\end{tabular}
|
||||
|
||||
\end{document}
|
||||
=-=
|
||||
\documentclass{}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{tabular}{l|l}
|
||||
\textit{Player name} & \textit{Career home runs} \\
|
||||
\hline
|
||||
Hank Aaron & 755 \\
|
||||
Babe Ruth & 714
|
||||
\end{tabular}
|
||||
|
||||
\end{document}
|
||||
=-=-=
|
|
@ -25,6 +25,8 @@
|
|||
(require 'ert-x)
|
||||
(require 'align)
|
||||
|
||||
;;;; align
|
||||
|
||||
(defun test-align-transform-fun (function)
|
||||
(lambda ()
|
||||
(funcall function)
|
||||
|
@ -43,6 +45,10 @@
|
|||
(ert-test-erts-file (ert-resource-file "java-mode.erts")
|
||||
(test-align-transform-fun #'java-mode)))
|
||||
|
||||
(ert-deftest align-latex ()
|
||||
(ert-test-erts-file (ert-resource-file "latex-mode.erts")
|
||||
(test-align-transform-fun #'latex-mode)))
|
||||
|
||||
(ert-deftest align-python ()
|
||||
(ert-test-erts-file (ert-resource-file "python-mode.erts")
|
||||
(test-align-transform-fun #'python-mode)))
|
||||
|
@ -52,6 +58,15 @@
|
|||
(ert-test-erts-file (ert-resource-file "conf-toml-mode.erts")
|
||||
(test-align-transform-fun #'conf-toml-mode))))
|
||||
|
||||
;;;; align-regexp
|
||||
|
||||
(ert-deftest align-regexp ()
|
||||
(let ((indent-tabs-mode nil))
|
||||
(ert-test-erts-file (ert-resource-file "align-regexp.erts")
|
||||
(lambda ()
|
||||
(align-regexp (point-min) (point-max)
|
||||
"\\(\\s-*\\)(")))))
|
||||
|
||||
(provide 'align-tests)
|
||||
|
||||
;;; align-tests.el ends here
|
||||
|
|
|
@ -57,23 +57,20 @@
|
|||
"jpg")))))
|
||||
|
||||
(ert-deftest image-dired-thumb-name/per-directory ()
|
||||
(let ((image-dired-thumbnail-storage 'per-directory)
|
||||
(rel-path "foo.jpg")
|
||||
(abs-path "/tmp/foo.jpg")
|
||||
(hash-name (concat (sha1 "foo.jpg") ".jpg")))
|
||||
(should (file-name-absolute-p (image-dired-thumb-name rel-path)))
|
||||
(should (file-name-absolute-p (image-dired-thumb-name abs-path)))
|
||||
(let ((image-dired-thumbnail-storage 'per-directory))
|
||||
(should (file-name-absolute-p (image-dired-thumb-name "foo.jpg")))
|
||||
(should (file-name-absolute-p (image-dired-thumb-name "/tmp/foo.jpg")))
|
||||
(should (equal
|
||||
(file-name-nondirectory (image-dired-thumb-name rel-path))
|
||||
(file-name-nondirectory (image-dired-thumb-name abs-path))))
|
||||
(file-name-nondirectory (image-dired-thumb-name "foo.jpg"))
|
||||
(file-name-nondirectory (image-dired-thumb-name "/tmp/foo.jpg"))))
|
||||
;; The cdr below avoids the system dependency in the car of the
|
||||
;; list returned by 'file-name-split': it's "" on Posix systems,
|
||||
;; but the drive letter on MS-Windows.
|
||||
(should (equal (cdr (file-name-split
|
||||
(image-dired-thumb-name abs-path)))
|
||||
(list "tmp" ".image-dired" hash-name)))
|
||||
(image-dired-thumb-name "/tmp/foo.jpg")))
|
||||
'("tmp" ".image-dired" "foo.jpg.thumb.jpg")))
|
||||
(should (equal (file-name-nondirectory
|
||||
(image-dired-thumb-name rel-path))
|
||||
hash-name))))
|
||||
(image-dired-thumb-name "foo.jpg"))
|
||||
"foo.jpg.thumb.jpg"))))
|
||||
|
||||
;;; image-dired-util-tests.el ends here
|
||||
|
|
Loading…
Add table
Reference in a new issue