mirror of
https://github.com/org-roam/org-roam
synced 2025-08-15 13:23:32 -05:00
Compare commits
9 Commits
filenotify
...
v2.1.0
Author | SHA1 | Date | |
---|---|---|---|
|
f819720c51 | ||
|
887c49c89c | ||
|
d4cbb1d499 | ||
|
f29a770af3 | ||
|
4a7ecfbed8 | ||
|
df65654b2f | ||
|
b627298171 | ||
|
b8a66deae9 | ||
|
aafc8606bb |
32
CHANGELOG.md
32
CHANGELOG.md
@@ -1,9 +1,36 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## 1.2.4 (TBD)
|
## 2.1.0
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
- [#1709](https://github.com/org-roam/org-roam/pull/1709) added ability to specify default value in org-roam capture templates
|
||||||
|
- [#1710](https://github.com/org-roam/org-roam/pull/1710) added `org-roam-extract-subtree`
|
||||||
|
- [#1720](https://github.com/org-roam/org-roam/pull/1720) added `org-roam-db-update-on-save`
|
||||||
|
- [#1758](https://github.com/org-roam/org-roam/pull/1758) added `org-roam-db-autosync-mode`, replacing `org-roam-setup` and `org-roam-teardown`
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- [#1716](https://github.com/org-roam/org-roam/pull/1716) helper function `org-roam-get-keyword` is now obsolete: prefer `org-collect-keywords`
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- [#1595](https://github.com/org-roam/org-roam/pull/1595), [#1724](https://github.com/org-roam/org-roam/pull/1724) Major refactoring and restructuring of the codebase
|
||||||
|
- [#1655](https://github.com/org-roam/org-roam/pull/1655) improved org-roam contents preview
|
||||||
|
- [#1741](https://github.com/org-roam/org-roam/pull/1741) expose `org-roam-capture-` keys in interactive commands
|
||||||
|
- [#1786](https://github.com/org-roam/org-roam/pull/1786) org-roam-version now outputs commit hash if found
|
||||||
|
- [#1788](https://github.com/org-roam/org-roam/pull/1788) the point is not moved if the node is already visited
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- [#1608](https://github.com/org-roam/org-roam/pull/1608) migration: empty ROAM_REFS are now removed
|
||||||
|
- [#1609](https://github.com/org-roam/org-roam/pull/1609) migration: fixed file-link replacement
|
||||||
|
- [#1653](https://github.com/org-roam/org-roam/pull/1653) migration: fixed tags migration
|
||||||
|
- [#1694](https://github.com/org-roam/org-roam/pull/1694) core: nodes with no title are now skipped
|
||||||
|
- [#1637](https://github.com/org-roam/org-roam/pull/1637) core: fix org-ref multi-cite links not being split
|
||||||
|
- [#1651](https://github.com/org-roam/org-roam/pull/1651) core: fix org-roam-file-p crashing when there is no corresponding file
|
||||||
|
- [#1705](https://github.com/org-roam/org-roam/pull/1705) core: fix for add/remove of file-level tags
|
||||||
|
- [#1769](https://github.com/org-roam/org-roam/pull/1769) core: gracefully handle absence of `org-id-locations-file`
|
||||||
|
- [#1713](https://github.com/org-roam/org-roam/pull/1713) capture: check for file-existence before template insertion
|
||||||
|
- [#1725](https://github.com/org-roam/org-roam/pull/1725) db: always compute hash of encrypted file to prevent re-processing of encrypted files
|
||||||
|
|
||||||
|
## 2.0.0
|
||||||
|
### Added
|
||||||
- [#1396](https://github.com/org-roam/org-roam/pull/1396) add option to choose between prepending, appending, and omitting `roam_tags` in file completion
|
- [#1396](https://github.com/org-roam/org-roam/pull/1396) add option to choose between prepending, appending, and omitting `roam_tags` in file completion
|
||||||
- [#1270](https://github.com/org-roam/org-roam/pull/1270) capture: create OLP if it does not exist. Removes need for OLP setup in `:head`.
|
- [#1270](https://github.com/org-roam/org-roam/pull/1270) capture: create OLP if it does not exist. Removes need for OLP setup in `:head`.
|
||||||
- [#1353](https://github.com/org-roam/org-roam/pull/1353) support file-level property drawers
|
- [#1353](https://github.com/org-roam/org-roam/pull/1353) support file-level property drawers
|
||||||
@@ -28,7 +55,6 @@
|
|||||||
- [#1403](https://github.com/org-roam/org-roam/issues/1403) fixed inconsistency between how we write and read props like alias and tags
|
- [#1403](https://github.com/org-roam/org-roam/issues/1403) fixed inconsistency between how we write and read props like alias and tags
|
||||||
- [#1409](https://github.com/org-roam/org-roam/issues/1398) prevent inclusion of non-org-roam files in `org-roam-dailies--list-files`
|
- [#1409](https://github.com/org-roam/org-roam/issues/1398) prevent inclusion of non-org-roam files in `org-roam-dailies--list-files`
|
||||||
- [#1542](https://github.com/org-roam/org-roam/issues/1542) fix files not excluded when `org-roam-list-files-commands` is nil
|
- [#1542](https://github.com/org-roam/org-roam/issues/1542) fix files not excluded when `org-roam-list-files-commands` is nil
|
||||||
- [#1705](https://github.com/org-roam/org-roam/pull/1705) fix for add/remove of file-level tags
|
|
||||||
|
|
||||||
## 1.2.3 (13-11-2020)
|
## 1.2.3 (13-11-2020)
|
||||||
|
|
||||||
|
174
README.md
174
README.md
@@ -33,38 +33,170 @@ solution for anyone already using Org-mode for their personal wiki.
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
You can install `org-roam` using `package.el`:
|
Down below you will find basic installation instructions for how to quickly
|
||||||
|
install `org-roam` using various environments for various purposes. For more
|
||||||
|
detailed information, please read the [manual][docs].
|
||||||
|
|
||||||
|
### Using `package.el`
|
||||||
|
<details>
|
||||||
|
<summary>Toggle instuctions</summary>
|
||||||
|
|
||||||
|
You can install `org-roam` from [MELPA](https://melpa.org/) or [MELPA
|
||||||
|
Stable](https://stable.melpa.org/) using `package.el`:
|
||||||
|
|
||||||
```
|
```
|
||||||
M-x package-install RET org-roam RET
|
M-x package-install RET org-roam RET
|
||||||
```
|
```
|
||||||
|
|
||||||
Here's a sample configuration with `use-package`:
|
Here's a very basic sample for configuration of `org-roam` using `use-package`:
|
||||||
|
|
||||||
```emacs-lisp
|
```emacs-lisp
|
||||||
(use-package org-roam
|
(use-package org-roam
|
||||||
:ensure t
|
:ensure t
|
||||||
:custom
|
:custom
|
||||||
(org-roam-directory (file-truename "/path/to/org-files/"))
|
(org-roam-directory (file-truename "/path/to/org-files/"))
|
||||||
:bind (("C-c n l" . org-roam-buffer-toggle)
|
:bind (("C-c n l" . org-roam-buffer-toggle)
|
||||||
("C-c n f" . org-roam-node-find)
|
("C-c n f" . org-roam-node-find)
|
||||||
("C-c n g" . org-roam-graph)
|
("C-c n g" . org-roam-graph)
|
||||||
("C-c n i" . org-roam-node-insert)
|
("C-c n i" . org-roam-node-insert)
|
||||||
("C-c n c" . org-roam-capture)
|
("C-c n c" . org-roam-capture)
|
||||||
;; Dailies
|
;; Dailies
|
||||||
("C-c n j" . org-roam-dailies-capture-today))
|
("C-c n j" . org-roam-dailies-capture-today))
|
||||||
:config
|
:config
|
||||||
(org-roam-db-autosync-mode)
|
(org-roam-db-autosync-mode)
|
||||||
;; If using org-roam-protocol
|
;; If using org-roam-protocol
|
||||||
(require 'org-roam-protocol))
|
(require 'org-roam-protocol))
|
||||||
```
|
```
|
||||||
|
|
||||||
The `file-truename` function is only necessary when you use symbolic links
|
Note that the `file-truename` function is only necessary when you use symbolic
|
||||||
inside `org-roam-directory`: Org-roam does not resolve symbolic links.
|
link to `org-roam-directory`. Org-roam won't automatically resolve symbolic link
|
||||||
|
to the directory.
|
||||||
|
</details>
|
||||||
|
|
||||||
Org-roam requires sqlite to function. Org-roam optionally uses Graphviz for
|
### Using `straight.el`
|
||||||
graph-related functionality. It is recommended to install PCRE-enabled ripgrep
|
<details>
|
||||||
for better performance and extended functionality.
|
<summary>Toggle instuctions</summary>
|
||||||
|
|
||||||
|
Installation from MELPA or MELPA Stable using `straight.el`:
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(straight-use-package 'org-roam)
|
||||||
|
```
|
||||||
|
|
||||||
|
Or with `use-package`:
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(use-package org-roam
|
||||||
|
:straight t
|
||||||
|
...)
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to install the package directly from the source repository, instead
|
||||||
|
of from MELPA, the next sample shows how to do so:
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(use-package org-roam
|
||||||
|
:straight (:host github :repo "org-roam/org-roam"
|
||||||
|
:files (:defaults "extensions/*"))
|
||||||
|
...)
|
||||||
|
```
|
||||||
|
|
||||||
|
If you plan to use your own local fork for the development and contribution, the
|
||||||
|
next sample will get you there:
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(use-package org-roam
|
||||||
|
:straight (:local-repo "/path/to/org-roam-fork"
|
||||||
|
:files (:defaults "extensions/*")
|
||||||
|
:build (:not compile))
|
||||||
|
...)
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### Using Doom Emacs
|
||||||
|
<details>
|
||||||
|
<summary>Toggle instuctions</summary>
|
||||||
|
|
||||||
|
Doom's `:lang org` module comes with support for `org-roam`, but it's not
|
||||||
|
enabled by default. To activate it pass `+roam2` flag to `org` module in your
|
||||||
|
`$DOOMDIR/init.el` (e.g. `(org +roam2)`), save the file and run `doom sync -u`
|
||||||
|
in your shell.
|
||||||
|
|
||||||
|
To provide better stability, Doom pins the package to a specific commit. If you
|
||||||
|
need to unpin it *(not recommended doing that, request Doom to bump the package
|
||||||
|
instead)* use the next in your `packages.el`:
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(unpin! org-roam)
|
||||||
|
```
|
||||||
|
|
||||||
|
If for some reasons you want to use a different recipe for `org-roam`, you can
|
||||||
|
use the next form in your `packages.el` to install the package from a recipe
|
||||||
|
repository (e.g. MELPA):
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(package! org-roam)
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass `:pin "commit hash"` to pin the package to a specific commit.
|
||||||
|
|
||||||
|
With the next sample you can install the package directly from the source
|
||||||
|
repository:
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(package! org-roam
|
||||||
|
:recipe (:host github :repo "org-roam/org-roam"
|
||||||
|
:files (:defaults "extensions/*")))
|
||||||
|
```
|
||||||
|
|
||||||
|
And if you plan to use your own local fork for the development or contribution,
|
||||||
|
the next sample will get you there:
|
||||||
|
|
||||||
|
```emacs-lisp
|
||||||
|
(package! org-roam
|
||||||
|
:recipe (:local-repo "/path/to/org-roam-fork"
|
||||||
|
:files (:defaults "extensions/*")
|
||||||
|
:build (:not compile)))
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### Without a package manager
|
||||||
|
<details>
|
||||||
|
<summary>Toggle instructions</summary>
|
||||||
|
|
||||||
|
To install the package without using a package manager you have the next two
|
||||||
|
options:
|
||||||
|
|
||||||
|
1. Install the package by cloning it with `git` from the source repository.
|
||||||
|
2. Or install the package by downloading the latest [release
|
||||||
|
version](https://github.com/org-roam/org-roam/releases).
|
||||||
|
|
||||||
|
In both of the cases you will need to ensure that you have all the required
|
||||||
|
dependencies. These include:
|
||||||
|
|
||||||
|
- dash
|
||||||
|
- f
|
||||||
|
- s
|
||||||
|
- org (9.4 is the minimal required version!)
|
||||||
|
- emacsql
|
||||||
|
- emacsql-sqlite
|
||||||
|
- magit-section
|
||||||
|
- filenotify-recursive
|
||||||
|
|
||||||
|
After installing the package, you will need to properly setup `load-path` to the
|
||||||
|
package:
|
||||||
|
|
||||||
|
``` emacs-lisp
|
||||||
|
(add-to-list 'load-path "/path/to/org-roam/")
|
||||||
|
(add-to-list 'load-path "/path/to-org-roam/extensions/")
|
||||||
|
```
|
||||||
|
|
||||||
|
After which you should be able to resolve `(require 'org-roam)` call without any
|
||||||
|
problems.
|
||||||
|
|
||||||
|
Org-roam also comes with `.texi` files to integrate with Emacs' built-in Info
|
||||||
|
system. Read the manual to find more details for how to install them manually.
|
||||||
|
</details>
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
|
@@ -116,8 +116,8 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<a
|
<a
|
||||||
class="content footer-links"
|
class="content footer-links"
|
||||||
href="https://github.com/org-roam/org-roam-server"
|
href="https://github.com/org-roam/org-roam-ui"
|
||||||
>org-roam-server</a
|
>org-roam-ui</a
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -8,13 +8,13 @@
|
|||||||
#+texinfo_dir_category: Emacs
|
#+texinfo_dir_category: Emacs
|
||||||
#+texinfo_dir_title: Org-roam: (org-roam).
|
#+texinfo_dir_title: Org-roam: (org-roam).
|
||||||
#+texinfo_dir_desc: Roam Research for Emacs.
|
#+texinfo_dir_desc: Roam Research for Emacs.
|
||||||
#+subtitle: for version 2.0.0
|
#+subtitle: for version 2.1.0
|
||||||
|
|
||||||
#+options: H:4 num:3 toc:nil creator:t ':t
|
#+options: H:4 num:3 toc:nil creator:t ':t
|
||||||
#+property: header-args :eval never
|
#+property: header-args :eval never
|
||||||
#+texinfo: @noindent
|
#+texinfo: @noindent
|
||||||
|
|
||||||
This manual is for Org-roam version 2.0.0.
|
This manual is for Org-roam version 2.1.0.
|
||||||
|
|
||||||
#+BEGIN_QUOTE
|
#+BEGIN_QUOTE
|
||||||
Copyright (C) 2020-2021 Jethro Kuan <jethrokuan95@gmail.com>
|
Copyright (C) 2020-2021 Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
|
@@ -31,7 +31,7 @@ General Public License for more details.
|
|||||||
@finalout
|
@finalout
|
||||||
@titlepage
|
@titlepage
|
||||||
@title Org-roam User Manual
|
@title Org-roam User Manual
|
||||||
@subtitle for version 2.0.0
|
@subtitle for version 2.1.0
|
||||||
@author Jethro Kuan
|
@author Jethro Kuan
|
||||||
@page
|
@page
|
||||||
@vskip 0pt plus 1filll
|
@vskip 0pt plus 1filll
|
||||||
@@ -44,7 +44,7 @@ General Public License for more details.
|
|||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
|
|
||||||
This manual is for Org-roam version 2.0.0.
|
This manual is for Org-roam version 2.1.0.
|
||||||
|
|
||||||
@quotation
|
@quotation
|
||||||
Copyright (C) 2020-2021 Jethro Kuan <jethrokuan95@@gmail.com>
|
Copyright (C) 2020-2021 Jethro Kuan <jethrokuan95@@gmail.com>
|
||||||
|
@@ -7,8 +7,8 @@
|
|||||||
;; Leo Vivier <leo.vivier+dev@gmail.com>
|
;; Leo Vivier <leo.vivier+dev@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org-roam "2.0"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org-roam "2.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
|
||||||
|
@@ -5,8 +5,8 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (org "9.4") (org-roam "2.0"))
|
;; Package-Requires: ((emacs "26.1") (org "9.4") (org-roam "2.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
|
||||||
@@ -207,7 +207,8 @@ WITH RECURSIVE
|
|||||||
connected_component(source) AS
|
connected_component(source) AS
|
||||||
(SELECT dest FROM links_of WHERE source = $s1 UNION
|
(SELECT dest FROM links_of WHERE source = $s1 UNION
|
||||||
SELECT dest FROM links_of JOIN connected_component USING(source))
|
SELECT dest FROM links_of JOIN connected_component USING(source))
|
||||||
SELECT source, dest, type FROM links WHERE source IN connected_component OR dest IN connected_component;"
|
SELECT DISTINCT source, dest, type FROM links
|
||||||
|
WHERE source IN connected_component OR dest IN connected_component;"
|
||||||
"
|
"
|
||||||
WITH RECURSIVE
|
WITH RECURSIVE
|
||||||
links_of(source, dest) AS
|
links_of(source, dest) AS
|
||||||
@@ -224,7 +225,7 @@ WITH RECURSIVE
|
|||||||
AND json_array_length(cc.trace) < $s2)),
|
AND json_array_length(cc.trace) < $s2)),
|
||||||
nodes(source) as (SELECT DISTINCT source
|
nodes(source) as (SELECT DISTINCT source
|
||||||
FROM connected_component GROUP BY source ORDER BY min(json_array_length(trace)))
|
FROM connected_component GROUP BY source ORDER BY min(json_array_length(trace)))
|
||||||
SELECT source, dest, type FROM links WHERE source IN nodes OR dest IN nodes;")))
|
SELECT DISTINCT source, dest, type FROM links WHERE source IN nodes OR dest IN nodes;")))
|
||||||
(org-roam-db-query query id distance)))
|
(org-roam-db-query query id distance)))
|
||||||
|
|
||||||
(defun org-roam-graph--dot-option (option &optional wrap-key wrap-val)
|
(defun org-roam-graph--dot-option (option &optional wrap-key wrap-val)
|
||||||
|
@@ -5,8 +5,8 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (org "9.4") (org-roam "2.0"))
|
;; Package-Requires: ((emacs "26.1") (org "9.4") (org-roam "2.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
|
||||||
|
@@ -4,8 +4,8 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (org "9.4") (org-roam "2.0"))
|
;; Package-Requires: ((emacs "26.1") (org "9.4") (org-roam "2.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
|
||||||
@@ -160,7 +160,7 @@ It should contain the FILE key, pointing to the path of the file to open.
|
|||||||
org-protocol://roam-node?node=uuid"
|
org-protocol://roam-node?node=uuid"
|
||||||
(when-let ((node (plist-get info :node)))
|
(when-let ((node (plist-get info :node)))
|
||||||
(raise-frame)
|
(raise-frame)
|
||||||
(org-roam-node-visit (org-roam-populate (org-roam-node-create :id node))))
|
(org-roam-node-visit (org-roam-populate (org-roam-node-create :id node)) nil 'force))
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
(push '("org-roam-ref" :protocol "roam-ref" :function org-roam-protocol-open-ref)
|
(push '("org-roam-ref" :protocol "roam-ref" :function org-roam-protocol-open-ref)
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1"))
|
;; Package-Requires: ((emacs "26.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
@@ -379,7 +379,8 @@ the same time:
|
|||||||
The preview content comes from FILE, and the link as at POINT.")
|
The preview content comes from FILE, and the link as at POINT.")
|
||||||
|
|
||||||
(defun org-roam-preview-visit (file point &optional other-window)
|
(defun org-roam-preview-visit (file point &optional other-window)
|
||||||
"Visit FILE at POINT. With OTHER-WINDOW non-nil do so in another window.
|
"Visit FILE at POINT and return the visited buffer.
|
||||||
|
With OTHER-WINDOW non-nil do so in another window.
|
||||||
In interactive calls OTHER-WINDOW is set with
|
In interactive calls OTHER-WINDOW is set with
|
||||||
`universal-argument'."
|
`universal-argument'."
|
||||||
(interactive (list (org-roam-buffer-file-at-point 'assert)
|
(interactive (list (org-roam-buffer-file-at-point 'assert)
|
||||||
@@ -389,11 +390,12 @@ In interactive calls OTHER-WINDOW is set with
|
|||||||
(display-buffer-fn (if other-window
|
(display-buffer-fn (if other-window
|
||||||
#'switch-to-buffer-other-window
|
#'switch-to-buffer-other-window
|
||||||
#'pop-to-buffer-same-window)))
|
#'pop-to-buffer-same-window)))
|
||||||
|
(funcall display-buffer-fn buf)
|
||||||
(with-current-buffer buf
|
(with-current-buffer buf
|
||||||
(widen)
|
(widen)
|
||||||
(goto-char point))
|
(goto-char point))
|
||||||
(funcall display-buffer-fn buf)
|
(when (org-invisible-p) (org-show-context))
|
||||||
(when (org-invisible-p) (org-show-context))))
|
buf))
|
||||||
|
|
||||||
(defun org-roam-preview-get-contents (file point)
|
(defun org-roam-preview-get-contents (file point)
|
||||||
"Get preview content for FILE at POINT."
|
"Get preview content for FILE at POINT."
|
||||||
@@ -593,7 +595,7 @@ Sorts by title."
|
|||||||
"A `magit-section' used by `org-roam-mode' to contain grep output.")
|
"A `magit-section' used by `org-roam-mode' to contain grep output.")
|
||||||
|
|
||||||
(defun org-roam-grep-visit (file &optional other-window row col)
|
(defun org-roam-grep-visit (file &optional other-window row col)
|
||||||
"Visits FILE. If ROW, move to the row, and if COL move to the COL.
|
"Visit FILE at row ROW (if any) and column COL (if any). Return the buffer.
|
||||||
With OTHER-WINDOW non-nil (in interactive calls set with
|
With OTHER-WINDOW non-nil (in interactive calls set with
|
||||||
`universal-argument') display the buffer in another window
|
`universal-argument') display the buffer in another window
|
||||||
instead."
|
instead."
|
||||||
@@ -605,6 +607,7 @@ instead."
|
|||||||
(display-buffer-fn (if other-window
|
(display-buffer-fn (if other-window
|
||||||
#'switch-to-buffer-other-window
|
#'switch-to-buffer-other-window
|
||||||
#'pop-to-buffer-same-window)))
|
#'pop-to-buffer-same-window)))
|
||||||
|
(funcall display-buffer-fn buf)
|
||||||
(with-current-buffer buf
|
(with-current-buffer buf
|
||||||
(widen)
|
(widen)
|
||||||
(goto-char (point-min))
|
(goto-char (point-min))
|
||||||
@@ -612,8 +615,8 @@ instead."
|
|||||||
(forward-line (1- row)))
|
(forward-line (1- row)))
|
||||||
(when col
|
(when col
|
||||||
(forward-char (1- col))))
|
(forward-char (1- col))))
|
||||||
(funcall display-buffer-fn buf)
|
(when (org-invisible-p) (org-show-context))
|
||||||
(when (org-invisible-p) (org-show-context))))
|
buf))
|
||||||
|
|
||||||
;;;; Unlinked references
|
;;;; Unlinked references
|
||||||
(defvar org-roam-unlinked-references-result-re
|
(defvar org-roam-unlinked-references-result-re
|
||||||
|
110
org-roam-node.el
110
org-roam-node.el
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (org "9.4") (magit-section "2.90.1"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (org "9.4") (magit-section "2.90.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
@@ -76,6 +76,21 @@ It takes a single argument NODE, which is an `org-roam-node' construct."
|
|||||||
(const :tag "file-atime" file-atime))
|
(const :tag "file-atime" file-atime))
|
||||||
:group 'org-roam)
|
:group 'org-roam)
|
||||||
|
|
||||||
|
(defcustom org-roam-node-template-prefixes
|
||||||
|
'(("tags" . "#")
|
||||||
|
("todo" . "t:"))
|
||||||
|
"Prefixes for each of the node's properties.
|
||||||
|
This is used in conjunction with
|
||||||
|
`org-roam-node-display-template': in minibuffer completions the
|
||||||
|
node properties will be prefixed with strings in this variable,
|
||||||
|
acting as a query language of sorts.
|
||||||
|
|
||||||
|
For example, if a node has tags (\"foo\" \"bar\") and the alist
|
||||||
|
has the entry (\"tags\" . \"#\"), these will appear as
|
||||||
|
\"#foo #bar\"."
|
||||||
|
:group 'org-roam
|
||||||
|
:type '(alist))
|
||||||
|
|
||||||
(defcustom org-roam-ref-annotation-function #'org-roam-ref-read--annotation
|
(defcustom org-roam-ref-annotation-function #'org-roam-ref-read--annotation
|
||||||
"This function used to attach annotations for `org-roam-ref-read'.
|
"This function used to attach annotations for `org-roam-ref-read'.
|
||||||
It takes a single argument REF, which is a propertized string.")
|
It takes a single argument REF, which is a propertized string.")
|
||||||
@@ -354,23 +369,31 @@ GROUP BY id")))
|
|||||||
all-titles)))))
|
all-titles)))))
|
||||||
|
|
||||||
;;;; Finders
|
;;;; Finders
|
||||||
(defun org-roam-node-find-noselect (node)
|
(defun org-roam-node-find-noselect (node &optional force)
|
||||||
"Navigate to the point for NODE, and return the buffer."
|
"Navigate to the point for NODE, and return the buffer.
|
||||||
|
If NODE is already visited, this won't automatically move the
|
||||||
|
point to the beginning of the NODE, unless FORCE is non-nil."
|
||||||
(unless (org-roam-node-file node)
|
(unless (org-roam-node-file node)
|
||||||
(user-error "Node does not have corresponding file"))
|
(user-error "Node does not have corresponding file"))
|
||||||
(let ((buf (find-file-noselect (org-roam-node-file node))))
|
(let ((buf (find-file-noselect (org-roam-node-file node))))
|
||||||
(with-current-buffer buf
|
(with-current-buffer buf
|
||||||
(goto-char (org-roam-node-point node)))
|
(when (or force
|
||||||
|
(not (equal (org-roam-node-id node)
|
||||||
|
(org-roam-id-at-point))))
|
||||||
|
(goto-char (org-roam-node-point node))))
|
||||||
buf))
|
buf))
|
||||||
|
|
||||||
(defun org-roam-node-visit (node &optional other-window)
|
(defun org-roam-node-visit (node &optional other-window force)
|
||||||
"From the current buffer, visit NODE. Return the visited buffer.
|
"From the current buffer, visit NODE. Return the visited buffer.
|
||||||
|
|
||||||
Display the buffer in the selected window. With a prefix
|
Display the buffer in the selected window. With a prefix
|
||||||
argument OTHER-WINDOW display the buffer in another window
|
argument OTHER-WINDOW display the buffer in another window
|
||||||
instead."
|
instead.
|
||||||
(interactive (list (org-roam-node-at-point t) current-prefix-arg))
|
|
||||||
(let ((buf (org-roam-node-find-noselect node))
|
If NODE is already visited, this won't automatically move the
|
||||||
|
point to the beginning of the NODE, unless FORCE is non-nil. In
|
||||||
|
interactive calls FORCE always set to t."
|
||||||
|
(interactive (list (org-roam-node-at-point t) current-prefix-arg t))
|
||||||
|
(let ((buf (org-roam-node-find-noselect node 'force))
|
||||||
(display-buffer-fn (if other-window
|
(display-buffer-fn (if other-window
|
||||||
#'switch-to-buffer-other-window
|
#'switch-to-buffer-other-window
|
||||||
#'pop-to-buffer-same-window)))
|
#'pop-to-buffer-same-window)))
|
||||||
@@ -455,50 +478,51 @@ The displayed title is formatted according to `org-roam-node-display-template'."
|
|||||||
(let ((candidate-main (org-roam-node-read--format-entry node (1- (frame-width)))))
|
(let ((candidate-main (org-roam-node-read--format-entry node (1- (frame-width)))))
|
||||||
(cons (propertize candidate-main 'node node) node)))
|
(cons (propertize candidate-main 'node node) node)))
|
||||||
|
|
||||||
(defun org-roam-node-read--tags-to-str (tags)
|
|
||||||
"Convert list of TAGS into a string."
|
|
||||||
(mapconcat (lambda (s) (concat "#" s)) tags " "))
|
|
||||||
|
|
||||||
(defun org-roam-node-read--format-entry (node width)
|
(defun org-roam-node-read--format-entry (node width)
|
||||||
"Formats NODE for display in the results list.
|
"Formats NODE for display in the results list.
|
||||||
WIDTH is the width of the results list.
|
WIDTH is the width of the results list.
|
||||||
Uses `org-roam-node-display-template' to format the entry."
|
Uses `org-roam-node-display-template' to format the entry."
|
||||||
(let ((fmt (org-roam-node-read--process-display-format org-roam-node-display-template)))
|
(pcase-let ((`(,tmpl . ,tmpl-width)
|
||||||
|
(org-roam-node-read--process-display-format org-roam-node-display-template)))
|
||||||
(org-roam-format-template
|
(org-roam-format-template
|
||||||
(car fmt)
|
tmpl
|
||||||
(lambda (field _default-val)
|
(lambda (field _default-val)
|
||||||
(let* ((field (split-string field ":"))
|
(pcase-let* ((`(,field-name ,field-width) (split-string field ":"))
|
||||||
(field-name (car field))
|
(getter (intern (concat "org-roam-node-" field-name)))
|
||||||
(field-width (cadr field))
|
(field-value (funcall getter node)))
|
||||||
(getter (intern (concat "org-roam-node-" field-name)))
|
|
||||||
(field-value (or (funcall getter node) "")))
|
|
||||||
(when (and (equal field-name "tags")
|
|
||||||
field-value)
|
|
||||||
(setq field-value (org-roam-node-read--tags-to-str field-value)))
|
|
||||||
(when (and (equal field-name "file")
|
(when (and (equal field-name "file")
|
||||||
field-value)
|
field-value)
|
||||||
(setq field-value (file-relative-name field-value org-roam-directory)))
|
(setq field-value (file-relative-name field-value org-roam-directory)))
|
||||||
(when (and (equal field-name "olp")
|
(when (and (equal field-name "olp")
|
||||||
field-value)
|
field-value)
|
||||||
(setq field-value (string-join field-value " > ")))
|
(setq field-value (string-join field-value " > ")))
|
||||||
(if (not field-width)
|
(when (and field-value (not (listp field-value)))
|
||||||
field-value
|
(setq field-value (list field-value)))
|
||||||
(setq field-width (string-to-number field-width))
|
(setq field-value (mapconcat
|
||||||
(let ((display-string (truncate-string-to-width
|
(lambda (v)
|
||||||
field-value
|
(concat (or (cdr (assoc field-name org-roam-node-template-prefixes))
|
||||||
(if (> field-width 0)
|
"")
|
||||||
field-width
|
v))
|
||||||
(- width (cdr fmt)))
|
field-value " "))
|
||||||
0 ?\s)))
|
(setq field-width (cond
|
||||||
;; Setting the display (which would be padded out to the field length) for an
|
((not field-width)
|
||||||
;; empty string results in an empty string and misalignment for candidates that
|
field-width)
|
||||||
;; don't have some field. This uses the actual display string, made of spaces
|
((string-equal field-width "*")
|
||||||
;; when the field-value is "" so that we actually take up space.
|
(- width tmpl-width))
|
||||||
(if (not (equal field-value ""))
|
((>= (string-to-number field-width) 0)
|
||||||
;; Remove properties from the full candidate string, otherwise the display
|
(string-to-number field-width))))
|
||||||
;; formatting with pre-prioritized field-values gets messed up.
|
;; Setting the display (which would be padded out to the field length) for an
|
||||||
(propertize (substring-no-properties field-value) 'display display-string)
|
;; empty string results in an empty string and misalignment for candidates that
|
||||||
display-string))))))))
|
;; don't have some field. This uses the actual display string, made of spaces
|
||||||
|
;; when the field-value is "" so that we actually take up space.
|
||||||
|
(let ((display-string (if field-width
|
||||||
|
(truncate-string-to-width field-value field-width 0 ?\s)
|
||||||
|
field-value)))
|
||||||
|
(if (equal field-value "")
|
||||||
|
display-string
|
||||||
|
;; Remove properties from the full candidate string, otherwise the display
|
||||||
|
;; formatting with pre-prioritized field-values gets messed up.
|
||||||
|
(propertize (substring-no-properties field-value) 'display display-string))))))))
|
||||||
|
|
||||||
(defun org-roam-node-read--process-display-format (format)
|
(defun org-roam-node-read--process-display-format (format)
|
||||||
"Pre-calculate minimal widths needed by the FORMAT string."
|
"Pre-calculate minimal widths needed by the FORMAT string."
|
||||||
@@ -597,7 +621,7 @@ Assumes that the cursor was put where the link is."
|
|||||||
(cond
|
(cond
|
||||||
((org-roam-node-file node)
|
((org-roam-node-file node)
|
||||||
(org-mark-ring-push)
|
(org-mark-ring-push)
|
||||||
(org-roam-node-visit node)
|
(org-roam-node-visit node nil 'force)
|
||||||
t)
|
t)
|
||||||
(t nil))))))
|
(t nil))))))
|
||||||
|
|
||||||
@@ -611,7 +635,7 @@ Assumes that the cursor was put where the link is."
|
|||||||
(when org-roam-link-auto-replace
|
(when org-roam-link-auto-replace
|
||||||
(org-roam-link-replace-at-point))
|
(org-roam-link-replace-at-point))
|
||||||
(org-mark-ring-push)
|
(org-mark-ring-push)
|
||||||
(org-roam-node-visit node))
|
(org-roam-node-visit node nil 'force))
|
||||||
(org-roam-capture-
|
(org-roam-capture-
|
||||||
:node (org-roam-node-create :title title-or-alias)
|
:node (org-roam-node-create :title title-or-alias)
|
||||||
:props '(:finalize find-file))))
|
:props '(:finalize find-file))))
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (org "9.4"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (org "9.4"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
@@ -288,18 +288,45 @@ If VAL is not specified, user is prompted to select a value."
|
|||||||
"Return `org-roam' version.
|
"Return `org-roam' version.
|
||||||
Interactively, or when MESSAGE is non-nil, show in the echo area."
|
Interactively, or when MESSAGE is non-nil, show in the echo area."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let* ((version
|
(let* ((toplib (or load-file-name buffer-file-name))
|
||||||
(with-temp-buffer
|
gitdir topdir version)
|
||||||
(insert-file-contents-literally (locate-library "org-roam.el"))
|
(unless (and toplib (equal (file-name-nondirectory toplib) "org-roam-utils.el"))
|
||||||
(goto-char (point-min))
|
(setq toplib (locate-library "org-roam-utils.el")))
|
||||||
(save-match-data
|
(setq toplib (and toplib (org-roam--straight-chase-links toplib)))
|
||||||
(if (re-search-forward "\\(?:;; Version: \\([^z-a]*?$\\)\\)" nil nil)
|
(when toplib
|
||||||
(substring-no-properties (match-string 1))
|
(setq topdir (file-name-directory toplib)
|
||||||
"N/A")))))
|
gitdir (expand-file-name ".git" topdir)))
|
||||||
|
(when (file-exists-p gitdir)
|
||||||
|
(setq version
|
||||||
|
(let ((default-directory topdir))
|
||||||
|
(shell-command-to-string "git describe --tags --dirty --always"))))
|
||||||
|
(unless version
|
||||||
|
(setq version (with-temp-buffer
|
||||||
|
(insert-file-contents-literally (locate-library "org-roam.el"))
|
||||||
|
(goto-char (point-min))
|
||||||
|
(save-match-data
|
||||||
|
(if (re-search-forward "\\(?:;; Version: \\([^z-a]*?$\\)\\)" nil nil)
|
||||||
|
(substring-no-properties (match-string 1))
|
||||||
|
"N/A")))))
|
||||||
(if (or message (called-interactively-p 'interactive))
|
(if (or message (called-interactively-p 'interactive))
|
||||||
(message "%s" version)
|
(message "%s" version)
|
||||||
version)))
|
version)))
|
||||||
|
|
||||||
|
(defun org-roam--straight-chase-links (filename)
|
||||||
|
"Chase links in FILENAME until a name that is not a link.
|
||||||
|
|
||||||
|
This is the same as `file-chase-links', except that it also
|
||||||
|
handles fake symlinks that are created by the package manager
|
||||||
|
straight.el on Windows.
|
||||||
|
|
||||||
|
See <https://github.com/raxod502/straight.el/issues/520>."
|
||||||
|
(when (and (bound-and-true-p straight-symlink-emulation-mode)
|
||||||
|
(fboundp 'straight-chase-emulated-symlink))
|
||||||
|
(when-let ((target (straight-chase-emulated-symlink filename)))
|
||||||
|
(unless (eq target 'broken)
|
||||||
|
(setq filename target))))
|
||||||
|
(file-chase-links filename))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun org-roam-diagnostics ()
|
(defun org-roam-diagnostics ()
|
||||||
"Collect and print info for `org-roam' issues."
|
"Collect and print info for `org-roam' issues."
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
;; Author: Jethro Kuan <jethrokuan95@gmail.com>
|
||||||
;; URL: https://github.com/org-roam/org-roam
|
;; URL: https://github.com/org-roam/org-roam
|
||||||
;; Keywords: org-mode, roam, convenience
|
;; Keywords: org-mode, roam, convenience
|
||||||
;; Version: 2.0.0
|
;; Version: 2.1.0
|
||||||
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
;; Package-Requires: ((emacs "26.1") (dash "2.13") (f "0.17.2") (org "9.4") (emacsql "3.0.0") (emacsql-sqlite "1.0.0") (magit-section "2.90.1"))
|
||||||
|
|
||||||
;; This file is NOT part of GNU Emacs.
|
;; This file is NOT part of GNU Emacs.
|
||||||
|
Reference in New Issue
Block a user