On Mon, Mar 9, 2020 at 9:24 AM Tim Visher <tim.vis...@gmail.com> wrote:

> On Fri, Mar 6, 2020 at 9:09 AM Tim Visher <tim.vis...@gmail.com> wrote:
>
>> Thanks for the response, Eric. :)
>>
>> On Fri, Mar 6, 2020 at 1:51 AM Fraga, Eric <e.fr...@ucl.ac.uk> wrote:
>>
>>> On Thursday,  5 Mar 2020 at 10:28, Tim Visher wrote:
>>> > I _am_ able to get it to work by adding a file local variable like
>>> >
>>> > ```
>>> > # Local Variables:
>>> > # org-attach-id-dir: "~/.foo/data"
>>> > # End:
>>> > ```
>>> >
>>> > but then whenever I open the file it tells me it's possibly not safe
>>> to set
>>> > that.
>>>
>>> You've already received a more org-ish response but I'll give you an
>>> Emacs response to this part of your post: Emacs is simply making sure
>>> you are aware that a variable is being set when visiting a file.
>>>
>>
>> My question was more around why I had to do it at all since based on my
>> reading of the manual it seems like I should've been able to do this with
>> some kind of file-wide property. Specifically, I've never been able to wrap
>> my head around `(info "(org) Property Syntax")`.
>>
>> "Properties are key–value pairs. When they are associated with a single
>> entry or with a tree…," for instance, seems to imply by "When they are
>> associated with a single entry…" that they can be associated with all the
>> entries (or a particular tree or node).
>>
>> Anyway, I think between you and Gustav I finally have this sorted.
>>
>>    1. To set properties at the top level of a file you need to use the
>>    `#+PROPERTY: <PROPERTY_NAME> <PROPERTY_VALUE>` syntax. I've been trying to
>>    figure out how I misinterpreted that in the past and I _think_ it was
>>    because I assumed that the `#+PROPERTY` was actually `#+<PROPERTY>` as in
>>    `#+DIR` rather than `#+PROPERTY: DIR`. It looks like to set a file local
>>    property in an org file you _must_ (at least on 9.3 or earlier) use the
>>    `#+PROPERTY: <PROPERTY_NAME> <PROPERTY_VALUE>` syntax.
>>
>>    2. Even then by default org-attach property inheritance is set to
>>    `'selective` and `org-use-property-inheritance` is set to off. I've now
>>    customized `org-use-property-inheritance` to `'("DIR")` which I believe
>>    says that I consider the `DIR` property to be a possible candidate for
>>    inheritance and no others. I'm a little concerned about performance
>>    implications as the manual gives me all kinds of scary warnings but we'll
>>    see about that.
>>
>> Anyway this appears to work as I expect it to. I don't have to set a
>> file-local variable to anything. I'm using org properties. And
>> `org-attach-dir` now returns the proper directory for this file.
>>
>> Thanks all! If you think I'm still misunderstanding something please
>> correct me. :)
>>
>
> I'll go ahead and correct myself. (-‸ლ)
>
> It turns out that I wasn't understanding what the `DIR` property actually
> does. If `DIR` is set, it makes that the attachment directory, period. In
> other words it's different than the default `./data/` prefix directory in
> that ID paths are not then suffixed upon the end of it like
> `./data/XX/XXXXX-XXX-XXX/` for each entry. Instead, if you have `DIR` set,
> that headings attachment directory == `DIR`.
>
> So the way to change the attachment directory prefix is just not to mess
> with `DIR` at all. Instead, you must set the variable `org-attach-id-dir`,
> and if you want that to be local to a file the natural way to do that is
> with a file-local variable.
>
> ```
> # Local Variables:
> # org-attach-id-dir: "~/.foo/data"
> # End:
> ```
>
> Cheers. :)
>

This ended up producing more of a learning opportunity than I had initially
suspected and I wrote it up on my blog. In case anyone else is interested
in the details:
https://blog.twonegatives.com/post/613474532727095296/how-to-set-the-attach-directory-prefix-for

Happy Org!

Reply via email to