Package: emacs;
Reported by: Phil Sainty <psainty <at> orcon.net.nz>
Date: Mon, 30 Apr 2018 12:57:01 UTC
Severity: normal
Tags: notabug
Found in version 26.1
Done: Michael Albinus <michael.albinus <at> gmx.de>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Phil Sainty <psainty <at> orcon.net.nz> To: 31317 <at> debbugs.gnu.org Subject: bug#31317: 26.1; Add a tramp-make-tramp-temp-file* variant which returns the full tramp filename? Date: Tue, 01 May 2018 00:56:15 +1200
I have a tramp use-case where I want to create a temporary file on the remote host and then populate that file via elisp -- I am using (with-temp-file tramp-file-name (insert contents)) -- and `tramp-make-tramp-temp-file' doesn't seem to facilitate this nicely due to it returning only the local part of the generated filename, which means I need to *recreate* the full tramp path for that file before I can edit the file. At present I am using `tramp-make-tramp-file-name' using the returned local path and the original vector passed to `tramp-make-tramp-temp-file'; but as well as being cumbersome, I don't like making the assumption that I'm always going to get the correct value (even if it turns out that I would in practice). (I should perhaps even be dissecting the return value of `tramp-get-remote-tmpdir' to obtain a new vector to recreate that full path with, but that's even more work, and it looks like it would wind up being the same values...) It would seem useful to split `tramp-make-tramp-temp-file' into two functions; one to generate the temporary file and return the full path, and the other to return the localname. Does the following seem reasonable? (defun tramp-make-tramp-temp-file (vec) "Create a temporary file on the remote host identified by VEC. Return the local name of the temporary file." (with-parsed-tramp-file-name (tramp-make-tramp-temp-file* vec) nil localname)) (defun tramp-make-tramp-temp-file* (vec) "Create a temporary file on the remote host identified by VEC. Return the full tramp file name of the temporary file." (let ((prefix (expand-file-name tramp-temp-name-prefix (tramp-get-remote-tmpdir vec))) result) (while (not result) ;; `make-temp-file' would be the natural choice for ;; implementation. But it calls `write-region' internally, ;; which also needs a temporary file - we would end in an ;; infinite loop. (setq result (make-temp-name prefix)) (if (file-exists-p result) (setq result nil) ;; This creates the file by side effect. (set-file-times result) (set-file-modes result (string-to-number "0700" 8)))) result)) In GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2018-04-15 built on shodan Windowing system distributor 'The X.Org Foundation', version 11.0.11804000 System Description: Ubuntu 16.04.4 LTS Recent messages: For information about GNU Emacs and the GNU system, type C-h C-a. GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2018-04-15 uncompressing tramp.el.gz...done Making completion list... Configured using: 'configure --prefix=/home/phil/emacs/26.1rc1/usr/local --with-x-toolkit=lucid --without-sound' Configured features: XAW3D XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK DBUS GSETTINGS NOTIFY GNUTLS LIBXML2 FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS LUCID X11 THREADS LCMS2 Important settings: value of $LANG: en_NZ.UTF-8 locale-coding-system: utf-8 Major mode: Emacs-Lisp Minor modes in effect: show-paren-mode: t minibuffer-depth-indicate-mode: t winner-mode: t global-hl-line-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: (only . t) Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils imenu jka-compr thingatpt find-func dired-x easymenu paren mb-depth winner ring hl-line dired dired-loaddefs advice elec-pair time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 104217 8935) (symbols 48 20906 1) (miscs 40 407 318) (strings 32 31341 1364) (string-bytes 1 821008) (vectors 16 14887) (vector-slots 8 500084 10656) (floats 8 60 400) (intervals 56 546 22) (buffers 992 15) (heap 1024 41834 1175))
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.