Merge from origin/emacs-29

c42970d775 Handle last-coding-system-used in Tramp for all backends
ffafe38d03 Add 2 Welsh characters to iso-transl.el
This commit is contained in:
Michael Albinus 2023-08-13 17:00:53 +02:00
commit ba914bd9c9
6 changed files with 34 additions and 25 deletions

View file

@ -203,11 +203,15 @@
("^I" . [])
("^O" . [])
("^U" . [])
("^W" . [])
("^Y" . [])
("^a" . [])
("^e" . [])
("^i" . [])
("^o" . [])
("^u" . [])
("^w" . [])
("^y" . [])
("^^A" . [])
("^^C" . [])
("^^E" . [])

View file

@ -538,6 +538,8 @@ Emacs dired can't find files."
(set-file-modes tmpfile (logior (or (file-modes tmpfile) 0) #o0600)))
(let (create-lockfiles)
(write-region start end tmpfile append 'no-message))
;; Now, `last-coding-system-used' has the right value. Remember it.
(setq coding-system-used last-coding-system-used)
(with-tramp-progress-reporter
v 3 (format-message
"Moving tmp file `%s' to `%s'" tmpfile filename)

View file

@ -3442,15 +3442,6 @@ implementation will be used."
(let* ((modes (tramp-default-file-modes
filename (and (eq mustbenew 'excl) 'nofollow)))
;; We use this to save the value of
;; `last-coding-system-used' after writing the tmp
;; file. At the end of the function, we set
;; `last-coding-system-used' to this saved value. This
;; way, any intermediary coding systems used while
;; talking to the remote shell or suchlike won't hose
;; this variable. This approach was snarfed from
;; ange-ftp.el.
coding-system-used
;; Write region into a tmp file. This isn't really
;; needed if we use an encoding function, but currently
;; we use it always because this makes the logic
@ -3480,11 +3471,11 @@ implementation will be used."
((error quit)
(setq tramp-temp-buffer-file-name nil)
(delete-file tmpfile)
(signal (car err) (cdr err))))
(signal (car err) (cdr err)))))
;; Now, `last-coding-system-used' has the right value.
;; Remember it.
(setq coding-system-used last-coding-system-used))
;; Now, `last-coding-system-used' has the right value.
;; Remember it.
(setq coding-system-used last-coding-system-used)
;; The permissions of the temporary file should be set. If
;; FILENAME does not exist (eq modes nil) it has been
@ -3614,11 +3605,7 @@ implementation will be used."
v 'file-error
(concat "Method `%s' should specify both encoding and "
"decoding command or an scp program")
method))))
;; Make `last-coding-system-used' have the right value.
(when coding-system-used
(setq last-coding-system-used coding-system-used)))))))
method)))))))))
(defun tramp-bundle-read-file-names (vec files)
"Read file attributes of FILES and with one command fill the cache.

View file

@ -1537,6 +1537,8 @@ VEC or USER, or if there is no home directory, return nil."
;; `set-visited-file-modtime' ourselves later on.
(let (create-lockfiles)
(write-region start end tmpfile append 'no-message))
;; Now, `last-coding-system-used' has the right value. Remember it.
(setq coding-system-used last-coding-system-used)
(with-tramp-progress-reporter
v 3 (format "Moving tmp file %s to %s" tmpfile filename)

View file

@ -382,7 +382,9 @@ arguments to pass to the OPERATION."
(tramp-skeleton-write-region start end filename append visit lockname mustbenew
(let (create-lockfiles)
(write-region
start end (tramp-fuse-local-file-name filename) append 'nomessage))))
start end (tramp-fuse-local-file-name filename) append 'nomessage))
;; Now, `last-coding-system-used' has the right value. Remember it.
(setq coding-system-used last-coding-system-used)))
;; File name conversions.

View file

@ -3467,7 +3467,15 @@ BODY is the backend specific code."
tramp-crypt-file-name-handler
. inhibit-file-name-handlers))
(inhibit-file-name-operation 'write-region))
(find-file-name-handler ,visit 'write-region)))))
(find-file-name-handler ,visit 'write-region))))
;; We use this to save the value of
;; `last-coding-system-used' after writing the tmp file. At
;; the end of the function, we set `last-coding-system-used'
;; to this saved value. This way, any intermediary coding
;; systems used while talking to the remote shell or
;; suchlike won't hose this variable. This approach was
;; snarfed from ange-ftp.el.
coding-system-used)
(with-parsed-tramp-file-name filename nil
(if handler
(progn
@ -3514,9 +3522,7 @@ BODY is the backend specific code."
;; likely that it is needed shortly after `write-region'.
(tramp-set-file-property v localname "file-exists-p" t)
;; We must protect `last-coding-system-used', now we have
;; set it to its correct value.
(let (last-coding-system-used (need-chown t))
(let ((need-chown t))
;; Set file modification time.
(when (or (eq ,visit t) (stringp ,visit))
(when-let ((file-attr (file-attributes filename 'integer)))
@ -3535,7 +3541,7 @@ BODY is the backend specific code."
(tramp-set-file-uid-gid filename uid gid))
;; Set extended attributes. We ignore possible errors,
;; because ACL strings could be incompatible.
;; because ACL strings or SELinux contexts could be incompatible.
(when attributes
(ignore-errors
(set-file-extended-attributes filename attributes)))
@ -3554,7 +3560,11 @@ BODY is the backend specific code."
(when (and (null noninteractive)
(or (eq ,visit t) (string-or-null-p ,visit)))
(tramp-message v 0 "Wrote %s" filename))
(run-hooks 'tramp-handle-write-region-hook)))))))
(run-hooks 'tramp-handle-write-region-hook))))
;; Make `last-coding-system-used' have the right value.
(when coding-system-used
(setq last-coding-system-used coding-system-used)))))
;;; Common file name handler functions for different backends:
@ -5202,6 +5212,8 @@ of."
;; `set-visited-file-modtime' ourselves later on.
(let (create-lockfiles)
(write-region start end tmpfile append 'no-message))
;; Now, `last-coding-system-used' has the right value. Remember it.
(setq coding-system-used last-coding-system-used)
(condition-case nil
(rename-file tmpfile filename 'ok-if-already-exists)
(error