Subject: bug#65055: 30.0.50; save-place-abbreviation-file-names :set fails for saveplace-pdf-view places

From: Visuwesh <[email-masked]>
Date: Fri, 04 Aug 2023 23:43:56 +0530

[வெள்ளி ஆகஸ்ட் 04, 2023] Eli Zaretskii wrote:

>> From: Visuwesh <[email-masked]>
>> Date: Fri, 04 Aug 2023 21:45:04 +0530
>> 
>> saveplace-pdf-view package [1] uses a custom "place" format to save and
>> restore the last position for PDF files viewed via doc-view package.
>> 
>> One such "place" is
>> 
>>     ("/home/viz/tmp/piron1976.pdf"
>>       (pdf-view-bookmark "piron1976.pdf"
>>                  (filename . "~/tmp/piron1976.pdf")
>>                  (position . 1)
>>                  (last-modified 25805 5369 546130 641000)
>>                  (page . 2)
>>                  (slice)
>>                  (size . fit-width)
>>                  (origin)
>>                  (handler . pdf-view-bookmark-jump-handler)))
>> 
>> This fails with the following backtrace because 
>> (cdr (pdf-view-bookmark ...) is a list,
>
> I don't understand: the valid format of save-place-alist is documented
> in its doc string, so this looks like a bug in saveplace-pdf-view
> package?  Or what am I missing?

Unfortunately, that's only half the story.  save-place-alist can also
have elements such as

    ("SOME-DIRECTORY" (dired-filename . "SOME-FILENAME"))

to save the place for dired buffers.  This is why the :set function of
the user option checks if second element of above place is a list and
also changes the "SOME-FILENAME" to be abbreviated/expanded.

But instead of checking if the second element of the place's cdr is a
string, the :set function simply assumes that it will be always be a
string.  This is not wrong as such since that's the only allowed format
as far as core Emacs is concerned but I think having the check in place
would help expand the save-place-alist format as the user desires.