Prior to this commit, when we would render backlinks in the
`org-buffer`, we would render each reference. This meant that if a
source file referenced the node 5 times, there would be 5 backlink
references in the `org-buffer` (one for each position of the reference).
With this change, we add a parameter that specifies that backlink
sources should be unique. In the above example, that would mean instead
of 5 backlinks we'd see 1. And, as a concession, we'd use the lowest
position (e.g. the first reference in the source).
Closes#2119
Change #2025 broke the `org-roam--shell-command-files` filter that
affects all of the `org-roam-list-files-command` methods except
`elisp`. This causes `org-roam--list-files` to iterate through the
variants executing their commands via `org-roam--shell-command-files`
but to not see any output, until it finally lands upon `elisp` and
gets some results.
The issue is that "#'s-present?" was replaced by
(or (null s) (string= "" s))
effectively negating the test and converting it to "#'s-blank?".
This addresses that by negating the current test.
* (fix)capture: fill-template preserve whitespace content
Preserve the whitespace content given in the capture template, by
caching it and then appending it to the output template. For
Org-capture's purposes, we need to separately ensure that a newline is
present. Adds tests to the various helper functions to illustrate changes.
Addresses #2115
* Revert "(fix): `org-roam-descendant-of-p` bug on Windows (#2089)"
This reverts commit 97a342fd3f.
Reason:
It seems that the `file-in-directory-p` function proposed in #2089 is provided only for
*physical directories*, does not work as we would like with *symlinked directories*.
It dereferences all the symlinks in its path, and previously seemed related paths
cease to be such.
Because of this, such notes are ignored and not indexed, although they
were indexed earlier.
Special care is taken not to move the point if the original point is no
longer the same (i.e. the user moves the cursor after calling the
capture, but before finalizing it). Fixes#2108.
On Windows, `file-truename` and `directory-file-name` downcase driver
label: "C:/" => "c:/", while `expand-file-name` keep the case
unchanged. If `org-roam-directory` use upper case driver label, `org-roam-descendant-of-p` will alway return `nil`. Fix by only using `file-truename` in the function.
Previously, the file-path of the new node in `org-roam-extract-subtree'
was incorrect in many circumstances. Expanding w.r.t. the initial
prompt directory (ie, `org-roam-directory') fixes that
Let's assume we're evaluating the following region:
```elisp
(org-roam-capture-
:node (org-roam-node-create :title "Org Roam Homepage")
:info '(:ref "https://orgroam.com")
:props '(:immediate-finish nil))
```
Prior to this commit, if you did not require "org-roam-protocol" then
`org-roam-capture-` would ignore the `:info '(:ref
"https://orgroam.com")` parameter. Once you required
"org-roam-protocol" then the callback hooks that process `:info`'s
`:ref` will fire regardless of whether it comes from org-roam-protocol.
After this commit, you no longer need to require "org-roam-protocol" to
ensure that you capture an `:info`'s `:ref`.
Why is this useful? When I'm reading through my elfeed RSS feed, I want
to capture an article. I could use the org-roam-protocol to do this,
but that seems a bit unnecessary given that I'm already in Emacs.
Closesorg-roam/org-roam#2078
When dynamic binding `org-roam-directory` to the "dailies/"
subdirectory also bind `org-roam-dailies-directory` to "./" to prevent
invalid expansions in user-defined hook functions.
Fixes#2070
This is an extension of PR #2028 [1] by @astery, where the `keys`
argument was added to `org-roam-dailies--capture` `org-roam-dailies-capture-today`.
I extended this argument to also be available in other built-in dailies
functions, as I didn't see any reason why not and it results in my opinion in
more consistent behaviour.
The rationale is the same as in #2028: Allow users to add keybindings (or in my
case hydras) to calls of org-roam-dailies functions with specific template keys,
thus circumventing the selection screen.
So far it seems to work for me. I have only one pet-peeve about
the interface, if the user starts adding keys to all their goto-functions, they
might add
(org-roam-dailies-goto-date nil "<key>")
Then the key-string will be interpreted as the value for `prefer-future` and
since it's non-nil, there won't be an error.
[1] https://github.com/org-roam/org-roam/pull/2028
Revert to a simplified `org-roam-node-display-template`, because on
non-vertical completion frameworks it looks and behaves strangely. To
restore the original default behaviour, set
`org-roam-node-display-template` in your Emacs configuration as such:
(setq org-roam-node-display-template
(concat "${title:*} "
(propertize "${tags:10}" 'face 'org-tag)))
Adds two customizable variables: org-roam-db-extra-links-elements and
org-roam-db-extra-links-exclude-keys, which govern which elements are to
be considered for link parsing by Org-roam.
Also added sane defaults to org-roam-db-extra-links-exclude-keys.
* (fix):db: pragma foreign keys to work with sqlite3
This commit is follow-up for PR #2009 should fix issues #1927 & #1910.
Currently, `[:pragma (= foreign_keys ON)]` is present only in function
`org-roam-db--init`. This means the `foreign_keys` is turned on only when the db
file is created for the first time. Subsequent Emacs sessions won't turn it on
as the db file is already present and does not evaluate `org-roam-db--init`.
This PRAGMA needs to be turned on each database connection at runtime according
to sqlite's documentation (https://sqlite.org/foreignkeys.html#fk_enable)
```
Foreign key constraints are disabled by default (for backwards compatibility),
so must be enabled separately for each database connection
```
I have observed that on Windows only the Emacs session that initially creates
the Org-roam db file works correctly with the `sqlite3` option. Subsequent Emacs
sessions have the same "Unique constraint failed" error messages.
I have tested this patch on Windows and Ubuntu; both seem to work in the first
and subsequent Emacs sessions.
I am not 100% sure if the location of the PRAGMA is the best; use it as a
proof-of-cocenpt for the fix. Thank you.
* remove: [:pragma (= foreign_keys ON)] from org-roam-db--init
* fix: defconst org-roam--sqlite-available-p outputs error
When `org-roam-database-connector` is not `sqlite`, it outputs an unnecessary
error when Org-roam starts up as `defconst` evaluates
`(emacsql-sqlite-ensure-binary)`.
```
Org-roam initialization: (error "No EmacSQL SQLite binary available, aborting")
```
For other database connectors, this is not relevant.
* chore: rm org-roam--sqlite-available-p
As per our conversation, org-roam--sqlite-available-p not needed.
* docs: Correct how to install gcc on Windows
PATH needs to be manually set on Windows. Previously, it was explicitly
mentioned that it was unnecessary. More recent experience is that it's necessary.
* regenerate texi
Co-authored-by: Jethro Kuan <jethrokuan95@gmail.com>
Previously node caching used org-map-entries: this only mapped over agenda
entries, hence skipping various nodes. Instead, we should be using
org-map-region, which maps over the entire file.