* bug#32989: 26.1; Opening PDF attachments in Gnus with doc-view-mode causes error on Windows
2018-10-08 20:02 ` Eli Zaretskii
@ 2018-10-10 10:45 ` Jordan Wilson
2018-10-28 22:57 ` Jordan Wilson
2018-11-03 8:32 ` Eli Zaretskii
0 siblings, 2 replies; 5+ messages in thread
From: Jordan Wilson @ 2018-10-10 10:45 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 32989
[-- Attachment #1: Type: text/plain, Size: 1069 bytes --]
On 2018-10-08 (Mon) at 23:02 (ZZZ), Eli Zaretskii <eliz@gnu.org> wrote:
>> From: Jordan Wilson <jordan.t.wilson@gmx.com>
>> Date: Mon, 08 Oct 2018 15:44:55 +0100
>>
>> File error: "Opening output file", "Invalid argument", "c:/Users/Jordan/Emacs/.cache/docview-cache/ *mm*-012345"
>>
>> this leaves a buffer showing the file literally. If I rename that buffer
>> to something not containing an asterisk, it displays fine when running
>> "doc-view-mode". Windows apparently can't handle asterisks in
>> directory/file names.
>
> Windows doesn't allow '*' (and a few other characters) in any file
> name, not just in directory name. Gnus should run the file name
> through convert-standard-filename to get something that is guaranteed
> to work on any filesystem.
Looking, it seems to be on doc-view's side -- if a buffer isn't
associated with a file, it uses the buffer name for the file's cache
directory. Here's a patch to the 26 and trunk branches of doc-view.el to
run the file names through `convert-standard-filename'. It fixes the
problem for me, at least.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: doc-view-26.diff --]
[-- Type: text/x-patch, Size: 2692 bytes --]
--- doc-view-26.el 2018-10-09 16:27:18.890549900 +0100
+++ doc-view-26-2.el 2018-10-09 16:29:04.122599100 +0100
@@ -1772,27 +1772,28 @@
(doc-view-make-safe-dir doc-view-cache-directory)
;; Handle compressed files, remote files, files inside archives
(setq-local doc-view--buffer-file-name
- (cond
- (jka-compr-really-do-compress
- ;; FIXME: there's a risk of name conflicts here.
- (expand-file-name
- (file-name-nondirectory
- (file-name-sans-extension buffer-file-name))
- doc-view-cache-directory))
- ;; Is the file readable by local processes?
- ;; We used to use `file-remote-p' but it's unclear what it's
- ;; supposed to return nil for things like local files accessed
- ;; via `su' or via file://...
- ((let ((file-name-handler-alist nil))
- (not (and buffer-file-name
- (file-readable-p buffer-file-name))))
- ;; FIXME: there's a risk of name conflicts here.
- (expand-file-name
- (if buffer-file-name
- (file-name-nondirectory buffer-file-name)
- (buffer-name))
- doc-view-cache-directory))
- (t buffer-file-name)))
+ (convert-standard-filename
+ (cond
+ (jka-compr-really-do-compress
+ ;; FIXME: there's a risk of name conflicts here.
+ (expand-file-name
+ (file-name-nondirectory
+ (file-name-sans-extension buffer-file-name))
+ doc-view-cache-directory))
+ ;; Is the file readable by local processes?
+ ;; We used to use `file-remote-p' but it's unclear what it's
+ ;; supposed to return nil for things like local files accessed
+ ;; via `su' or via file://...
+ ((let ((file-name-handler-alist nil))
+ (not (and buffer-file-name
+ (file-readable-p buffer-file-name))))
+ ;; FIXME: there's a risk of name conflicts here.
+ (expand-file-name
+ (if buffer-file-name
+ (file-name-nondirectory buffer-file-name)
+ (buffer-name))
+ doc-view-cache-directory))
+ (t buffer-file-name))))
(when (not (string= doc-view--buffer-file-name buffer-file-name))
(write-region nil nil doc-view--buffer-file-name))
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: doc-view-trunk.diff --]
[-- Type: text/x-patch, Size: 2733 bytes --]
--- doc-view-trunk.el 2018-10-09 16:31:48.000000000 +0100
+++ doc-view-trunk-2.el 2018-10-09 16:31:31.502299800 +0100
@@ -1764,27 +1764,28 @@
(doc-view-make-safe-dir doc-view-cache-directory)
;; Handle compressed files, remote files, files inside archives
(setq-local doc-view--buffer-file-name
- (cond
- (jka-compr-really-do-compress
- ;; FIXME: there's a risk of name conflicts here.
- (expand-file-name
- (file-name-nondirectory
- (file-name-sans-extension buffer-file-name))
- doc-view-cache-directory))
- ;; Is the file readable by local processes?
- ;; We used to use `file-remote-p' but it's unclear what it's
- ;; supposed to return nil for things like local files accessed
- ;; via `su' or via file://...
- ((let ((file-name-handler-alist nil))
- (not (and buffer-file-name
- (file-readable-p buffer-file-name))))
- ;; FIXME: there's a risk of name conflicts here.
- (expand-file-name
- (if buffer-file-name
- (file-name-nondirectory buffer-file-name)
- (buffer-name))
- doc-view-cache-directory))
- (t buffer-file-name)))
+ (convert-standard-filename
+ (cond
+ (jka-compr-really-do-compress
+ ;; FIXME: there's a risk of name conflicts here.
+ (expand-file-name
+ (file-name-nondirectory
+ (file-name-sans-extension buffer-file-name))
+ doc-view-cache-directory))
+ ;; Is the file readable by local processes?
+ ;; We used to use `file-remote-p' but it's unclear what it's
+ ;; supposed to return nil for things like local files accessed
+ ;; via `su' or via file://...
+ ((let ((file-name-handler-alist nil))
+ (not (and buffer-file-name
+ (file-readable-p buffer-file-name))))
+ ;; FIXME: there's a risk of name conflicts here.
+ (expand-file-name
+ (if buffer-file-name
+ (file-name-nondirectory buffer-file-name)
+ (buffer-name))
+ doc-view-cache-directory))
+ (t buffer-file-name))))
(when (not (string= doc-view--buffer-file-name buffer-file-name))
(write-region nil nil doc-view--buffer-file-name))
[-- Attachment #4: Type: text/plain, Size: 59 bytes --]
--
Jordan Wilson
Sent from Gnus v5.13, GNU Emacs 26.1
^ permalink raw reply [flat|nested] 5+ messages in thread