mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-06 03:40:56 -08:00
Tramp code cleanup
* lisp/net/tramp.el (tramp-shell-prompt-pattern) (tramp-wrong-passwd-regexp, tramp-method-regexp-alist) (tramp-domain-regexp, tramp-host-regexp, tramp-ipv6-regexp) (tramp-port-regexp, tramp-debug-outline-regexp) (tramp-drop-volume-letter, tramp-parse-shostkeys) (tramp-handle-file-name-case-insensitive-p): * lisp/net/tramp-adb.el (tramp-adb-send-command-and-check): * lisp/net/tramp-ftp.el (tramp-ftp-enable-ange-ftp): * lisp/net/tramp-gvfs.el (tramp-gvfs-monitor-process-filter): * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp) (tramp-device-escape-sequence-regexp): * lisp/net/tramp-smb.el (tramp-smb-do-file-attributes-with-stat) (tramp-smb-handle-set-file-acl, tramp-smb-read-file-entry): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-file-selinux-context): Use character classes in regexp. * lisp/net/tramp-adb.el (tramp-adb-ls-date-year-regexp) (tramp-adb-ls-date-time-regexp): New defconst. (tramp-adb-ls-date-regexp, tramp-adb-ls-toolbox-regexp) (tramp-adb-sh-fix-ls-output): Use them. (tramp-adb-handle-set-file-times, tramp-adb-maybe-open-connection): Apply `eval-when-compile' on constant concat data. (tramp-do-parse-file-attributes-with-ls): Suppress `signal-hook-function'. (tramp-adb--gnu-switches-to-ash): Remove unused function. (tramp-adb-handle-set-file-modes): Qhote argument. (tramp-adb-maybe-open-connection): Set file property rather than flush. * lisp/net/tramp-cmds.el (tramp-rename-these-files): Apply `eval-when-compile' on constant concat data. * lisp/net/tramp-gvfs.el (tramp-gvfs-file-attributes) (tramp-gvfs-file-attributes-with-gvfs-ls-regexp): Embed them in `eval-and-compile'. (tramp-gvfs-get-directory-attributes): Apply `eval-when-compile' on constant concat data.
This commit is contained in:
parent
62725e87f2
commit
7caf570662
8 changed files with 153 additions and 109 deletions
|
|
@ -62,8 +62,21 @@ It is used for TCP/IP devices."
|
|||
:version "24.4"
|
||||
:group 'tramp)
|
||||
|
||||
(eval-and-compile
|
||||
(defconst tramp-adb-ls-date-year-regexp
|
||||
"[[:digit:]]\\{4\\}-[[:digit:]]\\{2\\}-[[:digit:]]\\{2\\}"
|
||||
"Regexp for date year format in ls output."))
|
||||
|
||||
(eval-and-compile
|
||||
(defconst tramp-adb-ls-date-time-regexp
|
||||
"[[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}"
|
||||
"Regexp for date time format in ls output."))
|
||||
|
||||
(defconst tramp-adb-ls-date-regexp
|
||||
"[[:space:]][0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9][[:space:]][0-9][0-9]:[0-9][0-9][[:space:]]"
|
||||
(concat
|
||||
"[[:space:]]" tramp-adb-ls-date-year-regexp
|
||||
"[[:space:]]" tramp-adb-ls-date-time-regexp
|
||||
"[[:space:]]")
|
||||
"Regexp for date format in ls output.")
|
||||
|
||||
(defconst tramp-adb-ls-toolbox-regexp
|
||||
|
|
@ -73,7 +86,8 @@ It is used for TCP/IP devices."
|
|||
"[[:space:]]*\\([^[:space:]]+\\)" ; \2 username
|
||||
"[[:space:]]+\\([^[:space:]]+\\)" ; \3 group
|
||||
"[[:space:]]+\\([[:digit:]]+\\)" ; \4 size
|
||||
"[[:space:]]+\\([-[:digit:]]+[[:space:]][:[:digit:]]+\\)" ; \5 date
|
||||
"[[:space:]]+\\(" tramp-adb-ls-date-year-regexp
|
||||
"[[:space:]]" tramp-adb-ls-date-time-regexp "\\)" ; \5 date
|
||||
"[[:space:]]\\(.*\\)$") ; \6 filename
|
||||
"Regexp for ls output.")
|
||||
|
||||
|
|
@ -272,7 +286,9 @@ ARGUMENTS to pass to the OPERATION."
|
|||
(if (eq id-format 'integer) 0 uid)
|
||||
(if (eq id-format 'integer) 0 gid)
|
||||
tramp-time-dont-know ; atime
|
||||
(date-to-time date) ; mtime
|
||||
;; `date-to-time' checks `iso8601-parse', which might fail.
|
||||
(let (signal-hook-function)
|
||||
(date-to-time date)) ; mtime
|
||||
tramp-time-dont-know ; ctime
|
||||
size
|
||||
mod-string
|
||||
|
|
@ -351,21 +367,6 @@ ARGUMENTS to pass to the OPERATION."
|
|||
"ls --color=never")
|
||||
(t "ls"))))
|
||||
|
||||
(defun tramp-adb--gnu-switches-to-ash (switches)
|
||||
"Almquist shell can't handle multiple arguments.
|
||||
Convert (\"-al\") to (\"-a\" \"-l\"). Remove arguments like \"--dired\"."
|
||||
(split-string
|
||||
(apply #'concat
|
||||
(mapcar (lambda (s)
|
||||
(replace-regexp-in-string
|
||||
"\\(.\\)" " -\\1" (replace-regexp-in-string "^-" "" s)))
|
||||
;; FIXME: Warning about removed switches (long and non-dash).
|
||||
(delq nil
|
||||
(mapcar
|
||||
(lambda (s)
|
||||
(and (not (string-match-p "\\(^--\\|^[^-]\\)" s)) s))
|
||||
switches))))))
|
||||
|
||||
(defun tramp-adb-sh-fix-ls-output (&optional sort-by-time)
|
||||
"Insert dummy 0 in empty size columns.
|
||||
Android's \"ls\" command doesn't insert size column for directories:
|
||||
|
|
@ -375,10 +376,16 @@ Emacs dired can't find files."
|
|||
(goto-char (point-min))
|
||||
(while
|
||||
(search-forward-regexp
|
||||
"[[:space:]]\\([[:space:]][0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9][[:space:]]\\)" nil t)
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"[[:space:]]"
|
||||
"\\([[:space:]]" tramp-adb-ls-date-year-regexp "[[:space:]]\\)"))
|
||||
nil t)
|
||||
(replace-match "0\\1" "\\1" nil)
|
||||
;; Insert missing "/".
|
||||
(when (looking-at-p "[0-9][0-9]:[0-9][0-9][[:space:]]+$")
|
||||
(when (looking-at-p
|
||||
(eval-when-compile
|
||||
(concat tramp-adb-ls-date-time-regexp "[[:space:]]+$")))
|
||||
(end-of-line)
|
||||
(insert "/")))
|
||||
;; Sort entries.
|
||||
|
|
@ -577,7 +584,7 @@ But handle the case, if the \"test\" command is not available."
|
|||
(unless (and (eq flag 'nofollow) (file-symlink-p filename))
|
||||
(tramp-flush-file-properties v localname)
|
||||
(tramp-adb-send-command-and-check
|
||||
v (format "chmod %o %s" mode localname)))))
|
||||
v (format "chmod %o %s" mode (tramp-shell-quote-argument localname))))))
|
||||
|
||||
(defun tramp-adb-handle-set-file-times (filename &optional time flag)
|
||||
"Like `set-file-times' for Tramp files."
|
||||
|
|
@ -595,9 +602,11 @@ But handle the case, if the \"test\" command is not available."
|
|||
;; fails. Also, fall back on old POSIX 'touch -t' if 'touch -d'
|
||||
;; (introduced in POSIX.1-2008) fails.
|
||||
(tramp-adb-send-command-and-check
|
||||
v (format (concat "touch -d %s %s %s 2>/dev/null || "
|
||||
v (format
|
||||
(eval-when-compile
|
||||
(concat "touch -d %s %s %s 2>/dev/null || "
|
||||
"touch -d %s %s %s 2>/dev/null || "
|
||||
"touch -t %s %s %s")
|
||||
"touch -t %s %s %s"))
|
||||
(format-time-string "%Y-%m-%dT%H:%M:%S.%NZ" time t)
|
||||
nofollow quoted-name
|
||||
(format-time-string "%Y-%m-%dT%H:%M:%S" time t)
|
||||
|
|
@ -1108,7 +1117,7 @@ the exit status."
|
|||
(format "%s; echo tramp_exit_status $?" command)
|
||||
"echo tramp_exit_status $?"))
|
||||
(with-current-buffer (tramp-get-connection-buffer vec)
|
||||
(unless (tramp-search-regexp "tramp_exit_status [0-9]+")
|
||||
(unless (tramp-search-regexp "tramp_exit_status [[:digit:]]+")
|
||||
(tramp-error
|
||||
vec 'file-error "Couldn't find exit status of `%s'" command))
|
||||
(skip-chars-forward "^ ")
|
||||
|
|
@ -1217,7 +1226,12 @@ connection if a previous connection has died for some reason."
|
|||
;; connection properties. We start again.
|
||||
(tramp-message vec 5 "Checking system information")
|
||||
(tramp-adb-send-command
|
||||
vec "echo \\\"`getprop ro.product.model` `getprop ro.product.version` `getprop ro.build.version.release`\\\"")
|
||||
vec
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"echo \\\"`getprop ro.product.model` "
|
||||
"`getprop ro.product.version` "
|
||||
"`getprop ro.build.version.release`\\\"")))
|
||||
(let ((old-getprop
|
||||
(tramp-get-connection-property vec "getprop" nil))
|
||||
(new-getprop
|
||||
|
|
@ -1241,7 +1255,8 @@ connection if a previous connection has died for some reason."
|
|||
(tramp-adb-send-command vec (format "su %s" user))
|
||||
(unless (tramp-adb-send-command-and-check vec nil)
|
||||
(delete-process p)
|
||||
(tramp-flush-file-property vec "" "su-command-p")
|
||||
;; Do not flush, we need the nil value.
|
||||
(tramp-set-file-property vec "" "su-command-p" nil)
|
||||
(tramp-error
|
||||
vec 'file-error "Cannot switch to user `%s'" user)))
|
||||
|
||||
|
|
@ -1275,4 +1290,9 @@ connection if a previous connection has died for some reason."
|
|||
|
||||
(provide 'tramp-adb)
|
||||
|
||||
;;; TODO:
|
||||
;;
|
||||
;; * Support file names with multibyte codepoints. Use as fallback
|
||||
;; "adb shell COMMAND".
|
||||
;;
|
||||
;;; tramp-adb.el ends here
|
||||
|
|
|
|||
|
|
@ -448,8 +448,9 @@ For details, see `tramp-rename-files'."
|
|||
(tramp-user-error
|
||||
nil
|
||||
(substitute-command-keys
|
||||
(eval-when-compile
|
||||
(concat "Current buffer is not remote. "
|
||||
"Consider `\\[tramp-rename-files]' instead.")))
|
||||
"Consider `\\[tramp-rename-files]' instead."))))
|
||||
(setq target
|
||||
(when (null current-prefix-arg)
|
||||
;; The source remote connection shall not trigger any action.
|
||||
|
|
|
|||
|
|
@ -79,9 +79,9 @@ present for backward compatibility."
|
|||
;;; This regexp recognizes absolute filenames with only one component
|
||||
;;; on Windows, for the sake of hostname completion.
|
||||
(and (memq system-type '(ms-dos windows-nt))
|
||||
(or (assoc "^[a-zA-Z]:/[^/:]*\\'" file-name-handler-alist)
|
||||
(or (assoc "^[[:alpha:]]:/[^/:]*\\'" file-name-handler-alist)
|
||||
(setq file-name-handler-alist
|
||||
(cons '("^[a-zA-Z]:/[^/:]*\\'" .
|
||||
(cons '("^[:alpha:]]:/[^/:]*\\'" .
|
||||
ange-ftp-completion-hook-function)
|
||||
file-name-handler-alist)))))
|
||||
|
||||
|
|
|
|||
|
|
@ -697,7 +697,8 @@ It has been changed in GVFS 1.14.")
|
|||
"List of cons cells, mapping \"gvfs-<command>\" to \"gio <command>\".")
|
||||
|
||||
;; <http://www.pygtk.org/docs/pygobject/gio-constants.html>
|
||||
(defconst tramp-gvfs-file-attributes
|
||||
(eval-and-compile
|
||||
(defconst tramp-gvfs-file-attributes
|
||||
'("name"
|
||||
"type"
|
||||
"standard::display-name"
|
||||
|
|
@ -718,11 +719,12 @@ It has been changed in GVFS 1.14.")
|
|||
"access::can-execute"
|
||||
"unix::inode"
|
||||
"unix::device")
|
||||
"GVFS file attributes.")
|
||||
"GVFS file attributes."))
|
||||
|
||||
(defconst tramp-gvfs-file-attributes-with-gvfs-ls-regexp
|
||||
(eval-and-compile
|
||||
(defconst tramp-gvfs-file-attributes-with-gvfs-ls-regexp
|
||||
(concat "[[:blank:]]" (regexp-opt tramp-gvfs-file-attributes t) "=\\(.+?\\)")
|
||||
"Regexp to parse GVFS file attributes with `gvfs-ls'.")
|
||||
"Regexp to parse GVFS file attributes with `gvfs-ls'."))
|
||||
|
||||
(defconst tramp-gvfs-file-attributes-with-gvfs-info-regexp
|
||||
(concat "^[[:blank:]]*"
|
||||
|
|
@ -1181,10 +1183,11 @@ file names."
|
|||
(with-current-buffer (tramp-get-connection-buffer v)
|
||||
(goto-char (point-min))
|
||||
(while (looking-at
|
||||
(eval-when-compile
|
||||
(concat "^\\(.+\\)[[:blank:]]"
|
||||
"\\([[:digit:]]+\\)[[:blank:]]"
|
||||
"(\\(.+?\\))"
|
||||
tramp-gvfs-file-attributes-with-gvfs-ls-regexp))
|
||||
tramp-gvfs-file-attributes-with-gvfs-ls-regexp)))
|
||||
(let ((item (list (cons "type" (match-string 3))
|
||||
(cons "standard::size" (match-string 2))
|
||||
(cons "name" (match-string 1)))))
|
||||
|
|
@ -1475,11 +1478,11 @@ If FILE-SYSTEM is non-nil, return file system attributes."
|
|||
;; File names are returned as URL paths. We must convert them.
|
||||
(when (string-match ddu file)
|
||||
(setq file (replace-match dd nil nil file)))
|
||||
(while (string-match-p "%\\([0-9A-F]\\{2\\}\\)" file)
|
||||
(while (string-match-p "%\\([[:xdigit:]]\\{2\\}\\)" file)
|
||||
(setq file (url-unhex-string file)))
|
||||
(when (string-match ddu (or file1 ""))
|
||||
(setq file1 (replace-match dd nil nil file1)))
|
||||
(while (string-match-p "%\\([0-9A-F]\\{2\\}\\)" (or file1 ""))
|
||||
(while (string-match-p "%\\([[:xdigit:]]\\{2\\}\\)" (or file1 ""))
|
||||
(setq file1 (url-unhex-string file1)))
|
||||
;; Remove watch when file or directory to be watched is deleted.
|
||||
(when (and (member action '(moved deleted))
|
||||
|
|
|
|||
|
|
@ -90,10 +90,10 @@ the default storage location, e.g. \"$HOME/.sh_history\"."
|
|||
(string :tag "Redirect to a file")))
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-display-escape-sequence-regexp "\e[[;0-9]+m"
|
||||
(defconst tramp-display-escape-sequence-regexp "\e[[:digit:];[]+m"
|
||||
"Terminal control escape sequences for display attributes.")
|
||||
|
||||
(defconst tramp-device-escape-sequence-regexp "\e[[0-9]+n"
|
||||
(defconst tramp-device-escape-sequence-regexp "\e[[:digit:][]+n"
|
||||
"Terminal control escape sequences for device status.")
|
||||
|
||||
;; ksh on OpenBSD 4.5 requires that $PS1 contains a `#' character for
|
||||
|
|
@ -1515,8 +1515,8 @@ ID-FORMAT valid values are `string' and `integer'."
|
|||
(with-tramp-file-property v localname "file-selinux-context"
|
||||
(let ((context '(nil nil nil nil))
|
||||
(regexp (eval-when-compile
|
||||
(concat "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\):"
|
||||
"\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\)"))))
|
||||
(concat "\\([[:alnum:]_]+\\):" "\\([[:alnum:]_]+\\):"
|
||||
"\\([[:alnum:]_]+\\):" "\\([[:alnum]_]+\\)"))))
|
||||
(when (and (tramp-remote-selinux-p v)
|
||||
(tramp-send-command-and-check
|
||||
v (format
|
||||
|
|
@ -5223,7 +5223,7 @@ the exit status."
|
|||
"echo tramp_exit_status $?"
|
||||
(if subshell " )" "")))
|
||||
(with-current-buffer (tramp-get-connection-buffer vec)
|
||||
(unless (tramp-search-regexp "tramp_exit_status [0-9]+")
|
||||
(unless (tramp-search-regexp "tramp_exit_status [[:digit:]]+")
|
||||
(tramp-error
|
||||
vec 'file-error "Couldn't find exit status of `%s'" command))
|
||||
(skip-chars-forward "^ ")
|
||||
|
|
|
|||
|
|
@ -875,23 +875,34 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
|
|||
(while (not (eobp))
|
||||
(cond
|
||||
((looking-at
|
||||
"Size:\\s-+\\([0-9]+\\)\\s-+Blocks:\\s-+[0-9]+\\s-+\\(\\w+\\)")
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"Size:\\s-+\\([[:digit:]]+\\)\\s-+"
|
||||
"Blocks:\\s-+[[:digit:]]+\\s-+\\(\\w+\\)")))
|
||||
(setq size (string-to-number (match-string 1))
|
||||
id (if (string-equal "directory" (match-string 2)) t
|
||||
(if (string-equal "symbolic" (match-string 2)) ""))))
|
||||
((looking-at
|
||||
"Inode:\\s-+\\([0-9]+\\)\\s-+Links:\\s-+\\([0-9]+\\)")
|
||||
"Inode:\\s-+\\([[:digit:]]+\\)\\s-+Links:\\s-+\\([[:digit:]]+\\)")
|
||||
(setq inode (string-to-number (match-string 1))
|
||||
link (string-to-number (match-string 2))))
|
||||
((looking-at
|
||||
"Access:\\s-+([0-9]+/\\(\\S-+\\))\\s-+Uid:\\s-+\\([0-9]+\\)\\s-+Gid:\\s-+\\([0-9]+\\)")
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"Access:\\s-+([[:digit:]]+/\\(\\S-+\\))\\s-+"
|
||||
"Uid:\\s-+\\([[:digit:]]+\\)\\s-+"
|
||||
"Gid:\\s-+\\([[:digit:]]+\\)")))
|
||||
(setq mode (match-string 1)
|
||||
uid (if (equal id-format 'string) (match-string 2)
|
||||
(string-to-number (match-string 2)))
|
||||
gid (if (equal id-format 'string) (match-string 3)
|
||||
(string-to-number (match-string 3)))))
|
||||
((looking-at
|
||||
"Access:\\s-+\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)\\s-+\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)")
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"Access:\\s-+"
|
||||
"\\([[:digit:]]+\\)-\\([[:digit:]]+\\)-\\([[:digit:]]+\\)\\s-+"
|
||||
"\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)")))
|
||||
(setq atime
|
||||
(encode-time
|
||||
(string-to-number (match-string 6)) ;; sec
|
||||
|
|
@ -901,7 +912,11 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
|
|||
(string-to-number (match-string 2)) ;; month
|
||||
(string-to-number (match-string 1))))) ;; year
|
||||
((looking-at
|
||||
"Modify:\\s-+\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)\\s-+\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)")
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"Modify:\\s-+"
|
||||
"\\([[:digit:]]+\\)-\\([[:digit:]]+\\)-\\([[:digit:]]+\\)\\s-+"
|
||||
"\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)")))
|
||||
(setq mtime
|
||||
(encode-time
|
||||
(string-to-number (match-string 6)) ;; sec
|
||||
|
|
@ -911,7 +926,11 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
|
|||
(string-to-number (match-string 2)) ;; month
|
||||
(string-to-number (match-string 1))))) ;; year
|
||||
((looking-at
|
||||
"Change:\\s-+\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)\\s-+\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)")
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"Change:\\s-+"
|
||||
"\\([[:digit:]]+\\)-\\([[:digit:]]+\\)-\\([[:digit:]]+\\)\\s-+"
|
||||
"\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)")))
|
||||
(setq ctime
|
||||
(encode-time
|
||||
(string-to-number (match-string 6)) ;; sec
|
||||
|
|
@ -1474,7 +1493,7 @@ component is used as the target of the symlink."
|
|||
;; This is meant for traces, and returning from the
|
||||
;; function. No error is propagated outside, due to
|
||||
;; the `ignore-errors' closure.
|
||||
(unless (tramp-search-regexp "tramp_exit_status [0-9]+")
|
||||
(unless (tramp-search-regexp "tramp_exit_status [[:digit:]]+")
|
||||
(tramp-error
|
||||
v 'file-error
|
||||
"Couldn't find exit status of `%s'" tramp-smb-acl-program))
|
||||
|
|
@ -1719,21 +1738,21 @@ Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME YEAR)."
|
|||
;; Entries provided by smbclient DIR aren't fully regular.
|
||||
;; They should have the format
|
||||
;;
|
||||
;; \s-\{2,2} - leading spaces
|
||||
;; \s-\{2,2\} - leading spaces
|
||||
;; \S-\(.*\S-\)\s-* - file name, 30 chars, left bound
|
||||
;; \s-+[ADHRSV]* - permissions, 7 chars, right bound
|
||||
;; \s- - space delimiter
|
||||
;; \s-+[0-9]+ - size, 8 chars, right bound
|
||||
;; \s-+[[:digit:]]+ - size, 8 chars, right bound
|
||||
;; \s-\{2,2\} - space delimiter
|
||||
;; \w\{3,3\} - weekday
|
||||
;; \s- - space delimiter
|
||||
;; \w\{3,3\} - month
|
||||
;; \s- - space delimiter
|
||||
;; [ 12][0-9] - day
|
||||
;; [ 12][[:digit:]] - day
|
||||
;; \s- - space delimiter
|
||||
;; [0-9]\{2,2\}:[0-9]\{2,2\}:[0-9]\{2,2\} - time
|
||||
;; [[:digit:]]\{2,2\}:[[:digit:]]\{2,2\}:[[:digit:]]\{2,2\} - time
|
||||
;; \s- - space delimiter
|
||||
;; [0-9]\{4,4\} - year
|
||||
;; [[:digit:]]\{4,4\} - year
|
||||
;;
|
||||
;; samba/src/client.c (http://samba.org/doxygen/samba/client_8c-source.html)
|
||||
;; has function display_finfo:
|
||||
|
|
@ -1781,13 +1800,14 @@ are listed. Result is the list (LOCALNAME MODE SIZE MTIME)."
|
|||
(cl-block nil
|
||||
|
||||
;; year.
|
||||
(if (string-match "\\([0-9]+\\)$" line)
|
||||
(if (string-match "\\([[:digit:]]+\\)$" line)
|
||||
(setq year (string-to-number (match-string 1 line))
|
||||
line (substring line 0 -5))
|
||||
(cl-return))
|
||||
|
||||
;; time.
|
||||
(if (string-match "\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)$" line)
|
||||
(if (string-match
|
||||
"\\([[:digit:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)$" line)
|
||||
(setq hour (string-to-number (match-string 1 line))
|
||||
min (string-to-number (match-string 2 line))
|
||||
sec (string-to-number (match-string 3 line))
|
||||
|
|
@ -1795,7 +1815,7 @@ are listed. Result is the list (LOCALNAME MODE SIZE MTIME)."
|
|||
(cl-return))
|
||||
|
||||
;; day.
|
||||
(if (string-match "\\([0-9]+\\)$" line)
|
||||
(if (string-match "\\([[:digit:]]+\\)$" line)
|
||||
(setq day (string-to-number (match-string 1 line))
|
||||
line (substring line 0 -3))
|
||||
(cl-return))
|
||||
|
|
@ -1812,7 +1832,7 @@ are listed. Result is the list (LOCALNAME MODE SIZE MTIME)."
|
|||
(cl-return))
|
||||
|
||||
;; size.
|
||||
(if (string-match "\\([0-9]+\\)$" line)
|
||||
(if (string-match "\\([[:digit:]]+\\)$" line)
|
||||
(let ((length (- (max 10 (1+ (length (match-string 1 line)))))))
|
||||
(setq size (string-to-number (match-string 1 line)))
|
||||
(when (string-match
|
||||
|
|
|
|||
|
|
@ -489,8 +489,8 @@ the result will be a local, non-Tramp, file name."
|
|||
(with-tramp-file-property v localname "file-selinux-context"
|
||||
(let ((context '(nil nil nil nil))
|
||||
(regexp (eval-when-compile
|
||||
(concat "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\):"
|
||||
"\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\)"))))
|
||||
(concat "\\([[:alnum:]_]+\\):" "\\([[:alnum:]_]+\\):"
|
||||
"\\([[:alnum:]_]+\\):" "\\([[:alnum:]_]+\\)"))))
|
||||
(when (and (tramp-sudoedit-remote-selinux-p v)
|
||||
(tramp-sudoedit-send-command
|
||||
v "ls" "-d" "-Z"
|
||||
|
|
|
|||
|
|
@ -560,7 +560,7 @@ Sometimes the prompt is reported to look like \"login as:\"."
|
|||
;; Allow also [] style prompts. They can appear only during
|
||||
;; connection initialization; Tramp redefines the prompt afterwards.
|
||||
(concat "\\(?:^\\|\r\\)"
|
||||
"[^]#$%>\n]*#?[]#$%>] *\\(\e\\[[0-9;]*[a-zA-Z] *\\)*")
|
||||
"[^]#$%>\n]*#?[]#$%>] *\\(\e\\[[[:digit:];]*[[:alpha:]] *\\)*")
|
||||
"Regexp to match prompts from remote shell.
|
||||
Normally, Tramp expects you to configure `shell-prompt-pattern'
|
||||
correctly, but sometimes it happens that you are connecting to a
|
||||
|
|
@ -601,7 +601,7 @@ The `sudo' program appears to insert a `^@' character into the prompt."
|
|||
"\\|"
|
||||
"^.*\\("
|
||||
;; Here comes a list of regexes, separated by \\|
|
||||
"Received signal [0-9]+"
|
||||
"Received signal [[:digit:]]+"
|
||||
"\\).*")
|
||||
"Regexp matching a `login failed' message.
|
||||
The regexp should match at end of buffer."
|
||||
|
|
@ -797,9 +797,9 @@ Used in `tramp-make-tramp-file-name'.")
|
|||
Should always start with \"^\". Derived from `tramp-prefix-format'.")
|
||||
|
||||
(defconst tramp-method-regexp-alist
|
||||
'((default . "[a-zA-Z0-9-]+")
|
||||
'((default . "[[:alnum:]-]+")
|
||||
(simplified . "")
|
||||
(separate . "[a-zA-Z0-9-]*"))
|
||||
(separate . "[[:alnum:]-]*"))
|
||||
"Alist mapping Tramp syntax to regexps matching methods identifiers.")
|
||||
|
||||
(defun tramp-build-method-regexp ()
|
||||
|
|
@ -843,7 +843,7 @@ Derived from `tramp-postfix-method-format'.")
|
|||
"Regexp matching delimiter between user and domain names.
|
||||
Derived from `tramp-prefix-domain-format'.")
|
||||
|
||||
(defconst tramp-domain-regexp "[a-zA-Z0-9_.-]+"
|
||||
(defconst tramp-domain-regexp "[[:alnum:]_.-]+"
|
||||
"Regexp matching domain names.")
|
||||
|
||||
(defconst tramp-user-with-domain-regexp
|
||||
|
|
@ -860,7 +860,7 @@ Used in `tramp-make-tramp-file-name'.")
|
|||
"Regexp matching delimiter between user and host names.
|
||||
Derived from `tramp-postfix-user-format'.")
|
||||
|
||||
(defconst tramp-host-regexp "[a-zA-Z0-9_.%-]+"
|
||||
(defconst tramp-host-regexp "[[:alnum:]_.%-]+"
|
||||
"Regexp matching host names.")
|
||||
|
||||
(defconst tramp-prefix-ipv6-format-alist
|
||||
|
|
@ -888,7 +888,7 @@ Derived from `tramp-prefix-ipv6-format'.")
|
|||
;; The following regexp is a bit sloppy. But it shall serve our
|
||||
;; purposes. It covers also IPv4 mapped IPv6 addresses, like in
|
||||
;; "::ffff:192.168.0.1".
|
||||
(defconst tramp-ipv6-regexp "\\(?:[a-zA-Z0-9]*:\\)+[a-zA-Z0-9.]+"
|
||||
(defconst tramp-ipv6-regexp "\\(?:[[:alnum:]]*:\\)+[[:alnum:].]+"
|
||||
"Regexp matching IPv6 addresses.")
|
||||
|
||||
(defconst tramp-postfix-ipv6-format-alist
|
||||
|
|
@ -920,7 +920,7 @@ Derived from `tramp-postfix-ipv6-format'.")
|
|||
"Regexp matching delimiter between host names and port numbers.
|
||||
Derived from `tramp-prefix-port-format'.")
|
||||
|
||||
(defconst tramp-port-regexp "[0-9]+"
|
||||
(defconst tramp-port-regexp "[[:digit:]]+"
|
||||
"Regexp matching port numbers.")
|
||||
|
||||
(defconst tramp-host-with-port-regexp
|
||||
|
|
@ -1684,11 +1684,10 @@ version, the function does nothing."
|
|||
(format "*debug tramp/%s %s*" method host-port))))
|
||||
|
||||
(defconst tramp-debug-outline-regexp
|
||||
(eval-when-compile
|
||||
(concat
|
||||
"[0-9]+:[0-9]+:[0-9]+\\.[0-9]+ " ;; Timestamp.
|
||||
"[[:digit:]]+:[[:digit:]]+:[[:digit:]]+\\.[[:digit:]]+ " ;; Timestamp.
|
||||
"\\(?:\\(#<thread .+>\\) \\)?" ;; Thread.
|
||||
"[a-z0-9-]+ (\\([0-9]+\\)) #")) ;; Function name, verbosity.
|
||||
"[[:alnum:]-]+ (\\([[:digit:]]+\\)) #") ;; Function name, verbosity.
|
||||
"Used for highlighting Tramp debug buffers in `outline-mode'.")
|
||||
|
||||
(defconst tramp-debug-font-lock-keywords
|
||||
|
|
@ -2074,7 +2073,7 @@ letter into the file name. This function removes it."
|
|||
(save-match-data
|
||||
(let ((quoted (tramp-compat-file-name-quoted-p name 'top))
|
||||
(result (tramp-compat-file-name-unquote name 'top)))
|
||||
(setq result (if (string-match "\\`[a-zA-Z]:/" result)
|
||||
(setq result (if (string-match "\\`[[:alpha:]]:/" result)
|
||||
(replace-match "/" nil t result) result))
|
||||
(if quoted (tramp-compat-file-name-quote result 'top) result))))
|
||||
|
||||
|
|
@ -2938,7 +2937,7 @@ User is always nil."
|
|||
"Return a list of (user host) tuples allowed to access.
|
||||
User is always nil."
|
||||
(tramp-parse-shostkeys-sknownhosts
|
||||
dirname (concat "^key_[0-9]+_\\(" tramp-host-regexp "\\)\\.pub$")))
|
||||
dirname (concat "^key_[[:digit:]]+_\\(" tramp-host-regexp "\\)\\.pub$")))
|
||||
|
||||
(defun tramp-parse-sknownhosts (dirname)
|
||||
"Return a list of (user host) tuples allowed to access.
|
||||
|
|
@ -3255,12 +3254,13 @@ User is always nil."
|
|||
(let ((candidate
|
||||
(tramp-compat-file-name-unquote
|
||||
(directory-file-name filename)))
|
||||
case-fold-search
|
||||
tmpfile)
|
||||
;; Check, whether we find an existing file with
|
||||
;; lower case letters. This avoids us to create a
|
||||
;; temporary file.
|
||||
(while (and (string-match-p
|
||||
"[a-z]" (tramp-file-local-name candidate))
|
||||
"[[:lower:]]" (tramp-file-local-name candidate))
|
||||
(not (file-exists-p candidate)))
|
||||
(setq candidate
|
||||
(directory-file-name
|
||||
|
|
@ -3269,8 +3269,8 @@ User is always nil."
|
|||
;; for comparison. `make-nearby-temp-file' is added
|
||||
;; to Emacs 26+ like `file-name-case-insensitive-p',
|
||||
;; so there is no compatibility problem calling it.
|
||||
(unless
|
||||
(string-match-p "[a-z]" (tramp-file-local-name candidate))
|
||||
(unless (string-match-p
|
||||
"[[:lower:]]" (tramp-file-local-name candidate))
|
||||
(setq tmpfile
|
||||
(let ((default-directory
|
||||
(file-name-directory filename)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue