On Mon, Mar 9, 2020 at 9:24 AM Tim Visher wrote: > On Fri, Mar 6, 2020 at 9:09 AM Tim Visher wrote: > >> Thanks for the response, Eric. :) >> >> On Fri, Mar 6, 2020 at 1:51 AM Fraga, Eric 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: ` 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 `#+` 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: ` 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!