Michael, Thanks for the suggestion. Indeed `file-local-copy' would have made the code cleaner. Yet `file-local-copy' generates a new filename each time it's run. But I wanted to allow the code to check whether the remote image has already been fetched before and so skip unnecessary file transfer, which takes time (think of it like "rsync -a"). Therefore I wanted to preserve the remote path under a temporary directory. Best, Kit On Tue, Nov 25, 2014 at 10:39 AM, Michael Albinus wrote: > Kit-Yan Choi writes: > > > Ah my apologies. I forgot I had to use `file-name-directory' for > > creating the path to the temporary directory (too long ago since I did > > this). Here is the corrected version. > > > > --- a/lisp/org.el > > +++ b/lisp/org.el > > @@ -19340,7 +19340,7 @@ boundaries." > > (not (cdr (org-element-contents parent))))) > > (org-string-match-p file-extension-re > > (org-element-property :path link))) > > - (let ((file (expand-file-name (org-element-property :path link)))) > > + (let ((file (substitute-in-file-name (expand-file-name > > (org-element-property :path link))))) > > (when (file-exists-p file) > > (let ((width > > ;; Apply `org-image-actual-width' specifications. > > @@ -19378,10 +19378,25 @@ boundaries." > > 'org-image-overlay))) > > (if (and (car-safe old) refresh) > > (image-refresh (overlay-get (cdr old) 'display)) > > - (let ((image (create-image file > > - (and width 'imagemagick) > > - nil > > - :width width))) > > + (let ((image > > + (create-image (if (org-file-remote-p file) > > + (let* ((tramp-tmpdir (concat > > + (if (featurep 'xemacs) > > + (temp-directory) > > + temporary-file-directory) > > + "/tramp" > > + (file-name-directory (expand-file-name file)))) > > + (newname (concat > > + tramp-tmpdir > > + (file-name-nondirectory (expand-file-name file))))) > > + (make-directory tramp-tmpdir t) > > + (if (file-newer-than-file-p file newname) > > + (copy-file file newname t t)) > > + newname) > > + file) > > + (and width 'imagemagick) > > + nil > > + :width width))) > > (when image > > (let* ((link > > ;; If inline image is the description > > This code looks much to complicate to me. Wouldn't a simple > file-local-copy suffice? You don't need to care whether the file is > remote (let Tramp do the job) or local (there won't be a copy). > > Best regards, Michael. >