mirror of
https://github.com/org-roam/org-roam
synced 2025-08-09 12:57:22 -05:00
(docs): use ox-texinfo+ (#1250)
This generates texi documents with understanding of variables and functions.
This commit is contained in:
@ -5,6 +5,8 @@
|
|||||||
#+date: 2020-2020
|
#+date: 2020-2020
|
||||||
#+language: en
|
#+language: en
|
||||||
|
|
||||||
|
|
||||||
|
#+texinfo_deffn: t
|
||||||
#+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: Rudimentary Roam Replica for Emacs.
|
#+texinfo_dir_desc: Rudimentary Roam Replica for Emacs.
|
||||||
@ -14,6 +16,7 @@
|
|||||||
#+property: header-args :eval never
|
#+property: header-args :eval never
|
||||||
#+texinfo: @noindent
|
#+texinfo: @noindent
|
||||||
|
|
||||||
|
#+texinfo: @noindent
|
||||||
This manual is for Org-roam version 1.2.2.
|
This manual is for Org-roam version 1.2.2.
|
||||||
|
|
||||||
#+BEGIN_QUOTE
|
#+BEGIN_QUOTE
|
||||||
@ -1444,6 +1447,7 @@ are the solutions:
|
|||||||
|
|
||||||
# Local Variables:
|
# Local Variables:
|
||||||
# eval: (require 'ol-info)
|
# eval: (require 'ol-info)
|
||||||
|
# eval: (require 'ox-texinfo+ nil t)
|
||||||
# before-save-hook: org-make-toc
|
# before-save-hook: org-make-toc
|
||||||
# after-save-hook: (lambda nil (progn (require 'ox-texinfo nil t) (org-texinfo-export-to-info)))
|
# after-save-hook: (lambda nil (progn (require 'ox-texinfo nil t) (org-texinfo-export-to-info)))
|
||||||
# indent-tabs-mode: nil
|
# indent-tabs-mode: nil
|
||||||
|
@ -46,6 +46,7 @@ General Public License for more details.
|
|||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
|
|
||||||
|
@noindent
|
||||||
This manual is for Org-roam version 1.2.2.
|
This manual is for Org-roam version 1.2.2.
|
||||||
|
|
||||||
@quotation
|
@quotation
|
||||||
@ -183,18 +184,22 @@ to further introduce features enabled by the Emacs ecosystem.
|
|||||||
|
|
||||||
Org-roam provides several benefits over other tooling:
|
Org-roam provides several benefits over other tooling:
|
||||||
|
|
||||||
@table @asis
|
@itemize
|
||||||
@item Privacy and Security
|
@item
|
||||||
Edit your personal wiki completely offline, entirely in your control. Encrypt your notes with GPG@.
|
Privacy and SecurityEdit your personal wiki completely offline, entirely in your control. Encrypt your notes with GPG@.
|
||||||
@item Longevity of Plain Text
|
|
||||||
Unlike web solutions like Roam research, the notes are first and foremost plain Org-mode files -- Org-roam simply builds up an auxilliary database to give the personal wiki superpowers. Having your notes in plain-text is crucial for the longevity of your wiki. Never have to worry about proprietary web solutions being taken down. Edit your plain-text notes in notepad if all other editors cease to exist
|
@item
|
||||||
@item Free and Open Source
|
Longevity of Plain TextUnlike web solutions like Roam research, the notes are first and foremost plain Org-mode files -- Org-roam simply builds up an auxilliary database to give the personal wiki superpowers. Having your notes in plain-text is crucial for the longevity of your wiki. Never have to worry about proprietary web solutions being taken down. Edit your plain-text notes in notepad if all other editors cease to exist
|
||||||
Org-roam is free and open-source, which means that if you feel unhappy with any part of Org-roam, you may choose to extend Org-roam, or open a PR@.
|
|
||||||
@item Leverages the Org-mode ecosystem
|
@item
|
||||||
Over the years, Emacs and Org-mode has developed into a mature system for plain-text organization. Building upon Org-mode already puts Org-roam light-years ahead of many other solutions.
|
Free and Open SourceOrg-roam is free and open-source, which means that if you feel unhappy with any part of Org-roam, you may choose to extend Org-roam, or open a PR@.
|
||||||
@item Built on Emacs
|
|
||||||
Emacs is also a fantastic interface for editing text, and we can inherit many of the powerful text-navigation and editing packages available to Emacs.
|
@item
|
||||||
@end table
|
Leverages the Org-mode ecosystemOver the years, Emacs and Org-mode has developed into a mature system for plain-text organization. Building upon Org-mode already puts Org-roam light-years ahead of many other solutions.
|
||||||
|
|
||||||
|
@item
|
||||||
|
Built on EmacsEmacs is also a fantastic interface for editing text, and we can inherit many of the powerful text-navigation and editing packages available to Emacs.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
@node Target Audience
|
@node Target Audience
|
||||||
@chapter Target Audience
|
@chapter Target Audience
|
||||||
@ -381,14 +386,19 @@ You now have Org-roam installed. However, you don't necessarily have the depende
|
|||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
dash
|
dash
|
||||||
|
|
||||||
@item
|
@item
|
||||||
f
|
f
|
||||||
|
|
||||||
@item
|
@item
|
||||||
s
|
s
|
||||||
|
|
||||||
@item
|
@item
|
||||||
org
|
org
|
||||||
|
|
||||||
@item
|
@item
|
||||||
emacsql
|
emacsql
|
||||||
|
|
||||||
@item
|
@item
|
||||||
emacsql-sqlite3
|
emacsql-sqlite3
|
||||||
@end itemize
|
@end itemize
|
||||||
@ -416,8 +426,10 @@ You can also use one of the default locations, such as:
|
|||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
@emph{usr/local/share/info}
|
@emph{usr/local/share/info}
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@emph{usr/share/info}
|
@emph{usr/share/info}
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@emph{usr/local/share/info}
|
@emph{usr/local/share/info}
|
||||||
@end itemize
|
@end itemize
|
||||||
@ -547,15 +559,17 @@ Org-roam calls @code{org-roam--extract-titles} to extract titles. It uses the
|
|||||||
variable @code{org-roam-title-sources}, to control how the titles are extracted. The
|
variable @code{org-roam-title-sources}, to control how the titles are extracted. The
|
||||||
title extraction methods supported are:
|
title extraction methods supported are:
|
||||||
|
|
||||||
@enumerate
|
@itemize
|
||||||
@item
|
@item
|
||||||
@code{'title}: This extracts the title using the file @code{#+title} property
|
@code{'title}: This extracts the title using the file @code{#+title} property
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{'headline}: This extracts the title from the first headline in the Org file
|
@code{'headline}: This extracts the title from the first headline in the Org file
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{'alias}: This extracts a list of titles using the @code{#+roam_alias} property.
|
@code{'alias}: This extracts a list of titles using the @code{#+roam_alias} property.
|
||||||
The aliases are space-delimited, and can be multi-worded using quotes
|
The aliases are space-delimited, and can be multi-worded using quotes
|
||||||
@end enumerate
|
@end itemize
|
||||||
|
|
||||||
Take for example the following org file:
|
Take for example the following org file:
|
||||||
|
|
||||||
@ -598,22 +612,25 @@ Org-roam calls @code{org-roam--extract-tags} to extract tags from files. It uses
|
|||||||
variable @code{org-roam-tag-sources}, to control how tags are extracted. The tag
|
variable @code{org-roam-tag-sources}, to control how tags are extracted. The tag
|
||||||
extraction methods supported are:
|
extraction methods supported are:
|
||||||
|
|
||||||
@enumerate
|
@itemize
|
||||||
@item
|
@item
|
||||||
@code{'prop}: This extracts tags from the @code{#+roam_tags} property. Tags are space delimited, and can be multi-word using double quotes.
|
@code{'prop}: This extracts tags from the @code{#+roam_tags} property. Tags are space delimited, and can be multi-word using double quotes.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{'all-directories}: All sub-directories relative to @code{org-roam-directory} are
|
@code{'all-directories}: All sub-directories relative to @code{org-roam-directory} are
|
||||||
extracted as tags. That is, if a file is located at relative path
|
extracted as tags. That is, if a file is located at relative path
|
||||||
@code{foo/bar/file.org}, the file will have tags @code{foo} and @code{bar}.
|
@code{foo/bar/file.org}, the file will have tags @code{foo} and @code{bar}.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{'last-directory}: Extracts the last directory relative to
|
@code{'last-directory}: Extracts the last directory relative to
|
||||||
@code{org-roam-directory} as the tag. That is, if a file is located at relative
|
@code{org-roam-directory} as the tag. That is, if a file is located at relative
|
||||||
path @code{foo/bar/file.org}, the file will have tag @code{bar}.
|
path @code{foo/bar/file.org}, the file will have tag @code{bar}.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{'first-directory}: Extracts the first directory relative to
|
@code{'first-directory}: Extracts the first directory relative to
|
||||||
@code{org-roam-directory} as the tag. That is, if a file is located at relative
|
@code{org-roam-directory} as the tag. That is, if a file is located at relative
|
||||||
path @code{foo/bar/file.org}, the file will have tag @code{foo}.
|
path @code{foo/bar/file.org}, the file will have tag @code{foo}.
|
||||||
@end enumerate
|
@end itemize
|
||||||
|
|
||||||
By default, only the @code{'prop} extraction method is enabled. To enable the other
|
By default, only the @code{'prop} extraction method is enabled. To enable the other
|
||||||
extraction methods, you may modify @code{org-roam-tag-sources}:
|
extraction methods, you may modify @code{org-roam-tag-sources}:
|
||||||
@ -666,10 +683,13 @@ include:
|
|||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
Time of creation
|
Time of creation
|
||||||
|
|
||||||
@item
|
@item
|
||||||
File it was created from
|
File it was created from
|
||||||
|
|
||||||
@item
|
@item
|
||||||
Clipboard content
|
Clipboard content
|
||||||
|
|
||||||
@item
|
@item
|
||||||
Any other data you may want to input manually
|
Any other data you may want to input manually
|
||||||
@end itemize
|
@end itemize
|
||||||
@ -706,21 +726,26 @@ the default template, reproduced below.
|
|||||||
:unnarrowed t)
|
:unnarrowed t)
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
@enumerate
|
@itemize
|
||||||
@item
|
@item
|
||||||
The template has short key @code{"d"}. If you have only one template,
|
The template has short key @code{"d"}. If you have only one template,
|
||||||
org-roam automatically chooses this template for you.
|
org-roam automatically chooses this template for you.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
The template is given a description of @code{"default"}.
|
The template is given a description of @code{"default"}.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{plain} text is inserted. Other options include Org headings via
|
@code{plain} text is inserted. Other options include Org headings via
|
||||||
@code{entry}.
|
@code{entry}.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{(function org-roam--capture-get-point)} should not be changed.
|
@code{(function org-roam--capture-get-point)} should not be changed.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{"%?"} is the template inserted on each call to @code{org-roam-capture--capture}.
|
@code{"%?"} is the template inserted on each call to @code{org-roam-capture--capture}.
|
||||||
This template means don't insert any content, but place the cursor
|
This template means don't insert any content, but place the cursor
|
||||||
here.
|
here.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{:file-name} is the file-name template for a new note, if it doesn't yet
|
@code{:file-name} is the file-name template for a new note, if it doesn't yet
|
||||||
exist. This creates a file at path that looks like
|
exist. This creates a file at path that looks like
|
||||||
@ -728,14 +753,16 @@ exist. This creates a file at path that looks like
|
|||||||
allows you to specify if you want the note to go into a subdirectory. For
|
allows you to specify if you want the note to go into a subdirectory. For
|
||||||
example, the template @code{private/$@{slug@}} will create notes in
|
example, the template @code{private/$@{slug@}} will create notes in
|
||||||
@code{/path/to/org-roam-directory/private}.
|
@code{/path/to/org-roam-directory/private}.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{:head} contains the initial template to be inserted (once only), at
|
@code{:head} contains the initial template to be inserted (once only), at
|
||||||
the beginning of the file. Here, the title global attribute is
|
the beginning of the file. Here, the title global attribute is
|
||||||
inserted.
|
inserted.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{:unnarrowed t} tells org-capture to show the contents for the whole
|
@code{:unnarrowed t} tells org-capture to show the contents for the whole
|
||||||
file, rather than narrowing to just the entry.
|
file, rather than narrowing to just the entry.
|
||||||
@end enumerate
|
@end itemize
|
||||||
|
|
||||||
Other options you may want to learn about include @code{:immediate-finish}.
|
Other options you may want to learn about include @code{:immediate-finish}.
|
||||||
|
|
||||||
@ -798,59 +825,55 @@ All of Org-roam's customization options can be viewed via
|
|||||||
|
|
||||||
This section concerns the placement and creation of files.
|
This section concerns the placement and creation of files.
|
||||||
|
|
||||||
@itemize
|
@defvar org-roam-directory
|
||||||
@item
|
|
||||||
Variable: org-roam-directory
|
|
||||||
|
|
||||||
This is the default path to Org-roam files. All Org files, at any level of
|
This is the default path to Org-roam files. All Org files, at any level of
|
||||||
nesting, are considered part of the Org-roam.
|
nesting, are considered part of the Org-roam.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
@item
|
@defvar org-roam-db-location
|
||||||
Variable: org-roam-db-location
|
|
||||||
|
|
||||||
Location of the Org-roam database. If this is non-nil, the Org-roam sqlite
|
Location of the Org-roam database. If this is non-nil, the Org-roam sqlite
|
||||||
database is saved here.
|
database is saved here.
|
||||||
|
|
||||||
It is the user’s responsibility to set this correctly, especially when used
|
It is the user’s responsibility to set this correctly, especially when used
|
||||||
with multiple Org-roam instances.
|
with multiple Org-roam instances.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
@item
|
@defvar org-roam-file-exclude-regexp
|
||||||
Variable: org-roam-file-exclude-regexp
|
|
||||||
|
|
||||||
Files matching this regular expression are excluded from the Org-roam.
|
Files matching this regular expression are excluded from the Org-roam.
|
||||||
@end itemize
|
@end defvar
|
||||||
|
|
||||||
@node The Org-roam Buffer
|
@node The Org-roam Buffer
|
||||||
@section The Org-roam Buffer
|
@section The Org-roam Buffer
|
||||||
|
|
||||||
The Org-roam buffer displays backlinks for the currently active Org-roam note.
|
The Org-roam buffer displays backlinks for the currently active Org-roam note.
|
||||||
|
|
||||||
@itemize
|
@defopt org-roam-buffer
|
||||||
@item
|
|
||||||
User Option: org-roam-buffer
|
|
||||||
|
|
||||||
The name of the org-roam buffer. Defaults to @code{*org-roam*}.
|
The name of the org-roam buffer. Defaults to @code{*org-roam*}.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-buffer-position
|
||||||
User Option: org-roam-buffer-position
|
|
||||||
|
|
||||||
The position of the Org-roam buffer side window. Valid values are @code{'left},
|
The position of the Org-roam buffer side window. Valid values are @code{'left},
|
||||||
@code{'right}, @code{'top}, @code{'bottom}.
|
@code{'right}, @code{'top}, @code{'bottom}.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-buffer-width
|
||||||
User Option: org-roam-buffer-width
|
|
||||||
|
|
||||||
Width of @code{org-roam-buffer}. Has an effect only if @code{org-roam-buffer-position} is
|
Width of @code{org-roam-buffer}. Has an effect only if @code{org-roam-buffer-position} is
|
||||||
@code{'left} or @code{'right}.
|
@code{'left} or @code{'right}.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-buffer-height
|
||||||
User Option: org-roam-buffer-height
|
|
||||||
|
|
||||||
Height of @code{org-roam-buffer}. Has an effect only if @code{org-roam-buffer-position} is
|
Height of @code{org-roam-buffer}. Has an effect only if @code{org-roam-buffer-position} is
|
||||||
@code{'top} or @code{'bottom}.
|
@code{'top} or @code{'bottom}.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-buffer-window-parameters
|
||||||
User Option: org-roam-buffer-window-parameters
|
|
||||||
|
|
||||||
Additional window parameters for the org-roam-buffer side window.
|
Additional window parameters for the org-roam-buffer side window.
|
||||||
|
|
||||||
@ -858,7 +881,7 @@ For example one can prevent the window from being deleted when calling
|
|||||||
@code{delete-other-windows}, by setting it with the following:
|
@code{delete-other-windows}, by setting it with the following:
|
||||||
|
|
||||||
@code{(setq org-roam-buffer-window-parameters '((no-delete-other-windows . t)))}
|
@code{(setq org-roam-buffer-window-parameters '((no-delete-other-windows . t)))}
|
||||||
@end itemize
|
@end defopt
|
||||||
|
|
||||||
@node Org-roam Files
|
@node Org-roam Files
|
||||||
@section Org-roam Files
|
@section Org-roam Files
|
||||||
@ -872,14 +895,12 @@ system. The templating system is customizable (see @ref{The Templating System}).
|
|||||||
Org-roam introduces several faces to distinguish links within the same buffer.
|
Org-roam introduces several faces to distinguish links within the same buffer.
|
||||||
These faces are enabled by default in Org-roam notes.
|
These faces are enabled by default in Org-roam notes.
|
||||||
|
|
||||||
@itemize
|
@defopt org-roam-link-use-custom-faces
|
||||||
@item
|
|
||||||
User Option: org-roam-link-use-custom-faces
|
|
||||||
|
|
||||||
When @code{t}, use custom faces only inside Org-roam notes.
|
When @code{t}, use custom faces only inside Org-roam notes.
|
||||||
When @code{everywhere}, the custom face is applied additionally to non Org-roam notes.
|
When @code{everywhere}, the custom face is applied additionally to non Org-roam notes.
|
||||||
When @code{nil}, do not use Org-roam's custom faces.
|
When @code{nil}, do not use Org-roam's custom faces.
|
||||||
@end itemize
|
@end defopt
|
||||||
|
|
||||||
The @code{org-roam-link} face is the face applied to links to other Org-roam files.
|
The @code{org-roam-link} face is the face applied to links to other Org-roam files.
|
||||||
This distinguishes internal links from external links (e.g. external web links).
|
This distinguishes internal links from external links (e.g. external web links).
|
||||||
@ -906,14 +927,16 @@ populate the Org-roam database. The link can then be inserted via
|
|||||||
An alternative mode of insertion is using Org-roam's @code{roam} links. Org-roam
|
An alternative mode of insertion is using Org-roam's @code{roam} links. Org-roam
|
||||||
registers this link type, and interprets the path as follows:
|
registers this link type, and interprets the path as follows:
|
||||||
|
|
||||||
@table @asis
|
@itemize
|
||||||
@item @code{[[roam:title]]}
|
@item
|
||||||
links to an Org-roam file with title or alias ``title''
|
@code{[[roam:title]]}links to an Org-roam file with title or alias ``title''
|
||||||
@item @code{[[roam:*headline]]}
|
|
||||||
links to the headline ``headline'' in the current Org-roam file
|
@item
|
||||||
@item @code{[[roam:title*headline]]}
|
@code{[[roam:*headline]]}links to the headline ``headline'' in the current Org-roam file
|
||||||
links to the headline ``headline'' in the Org-roam file with title or alias ``title''
|
|
||||||
@end table
|
@item
|
||||||
|
@code{[[roam:title*headline]]}links to the headline ``headline'' in the Org-roam file with title or alias ``title''
|
||||||
|
@end itemize
|
||||||
|
|
||||||
@code{roam} links support auto-completion via @code{completion-at-point}: simply call
|
@code{roam} links support auto-completion via @code{completion-at-point}: simply call
|
||||||
@code{completion-at-point} within a roam link. Users of @code{company-mode} may want to
|
@code{completion-at-point} within a roam link. Users of @code{company-mode} may want to
|
||||||
@ -931,31 +954,29 @@ To easily insert @code{roam} links, one may wish to use a package like @uref{htt
|
|||||||
(backward-char 2))
|
(backward-char 2))
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
@itemize
|
@defopt org-roam-link-title-format
|
||||||
@item
|
|
||||||
User Option: org-roam-link-title-format
|
|
||||||
|
|
||||||
To distinguish between org-roam links and regular links, one may choose to use
|
To distinguish between org-roam links and regular links, one may choose to use
|
||||||
special indicators for Org-roam links. Defaults to @code{"%s"}.
|
special indicators for Org-roam links. Defaults to @code{"%s"}.
|
||||||
|
|
||||||
If your version of Org is at least @code{9.2}, consider styling the link differently,
|
If your version of Org is at least @code{9.2}, consider styling the link differently,
|
||||||
by customizing the @code{org-roam-link}, and @code{org-roam-link-current} faces.
|
by customizing the @code{org-roam-link}, and @code{org-roam-link-current} faces.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-completion-ignore-case
|
||||||
User Option: org-roam-completion-ignore-case
|
|
||||||
|
|
||||||
When non-nil, the @code{roam} link completions are ignore case. For example,
|
When non-nil, the @code{roam} link completions are ignore case. For example,
|
||||||
calling @code{completion-at-point} within @code{[[roam:fo]]} will present a completion
|
calling @code{completion-at-point} within @code{[[roam:fo]]} will present a completion
|
||||||
for a file with title ``Foo''. Defaults to @code{t}.
|
for a file with title ``Foo''. Defaults to @code{t}.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-link-auto-replace
|
||||||
User Option: org-roam-link-auto-replace
|
|
||||||
|
|
||||||
When non-nil, @code{roam} links will be replaced with @code{file} or @code{id} links when
|
When non-nil, @code{roam} links will be replaced with @code{file} or @code{id} links when
|
||||||
they are navigated to, and on file save, when a match is found. This is
|
they are navigated to, and on file save, when a match is found. This is
|
||||||
desirable to maintain compatibility with vanilla Org, but resolved links are
|
desirable to maintain compatibility with vanilla Org, but resolved links are
|
||||||
harder to edit. Defaults to @code{t}.
|
harder to edit. Defaults to @code{t}.
|
||||||
@end itemize
|
@end defopt
|
||||||
|
|
||||||
@node Navigating Around
|
@node Navigating Around
|
||||||
@chapter Navigating Around
|
@chapter Navigating Around
|
||||||
@ -973,9 +994,7 @@ to your main files.
|
|||||||
In Org-roam, you can define the path to your index file by setting
|
In Org-roam, you can define the path to your index file by setting
|
||||||
@code{org-roam-index-file}.
|
@code{org-roam-index-file}.
|
||||||
|
|
||||||
@itemize
|
@defvar org-roam-index-file
|
||||||
@item
|
|
||||||
Variable: org-roam-index-file
|
|
||||||
|
|
||||||
Path to the Org-roam index file.
|
Path to the Org-roam index file.
|
||||||
|
|
||||||
@ -984,12 +1003,12 @@ path (absolute or relative to @code{org-roam-directory}) to the index file. If i
|
|||||||
is is a function, the function should return the path to the index file.
|
is is a function, the function should return the path to the index file.
|
||||||
Otherwise, the index is assumed to be a note in @code{org-roam-index} whose
|
Otherwise, the index is assumed to be a note in @code{org-roam-index} whose
|
||||||
title is @code{"Index"}.
|
title is @code{"Index"}.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
@item
|
@defun org-roam-find-index
|
||||||
Function: org-roam-find-index
|
|
||||||
|
|
||||||
Opens the Index file in the current @code{org-roam-directory}.
|
Opens the Index file in the current @code{org-roam-directory}.
|
||||||
@end itemize
|
@end defun
|
||||||
|
|
||||||
@node Encryption
|
@node Encryption
|
||||||
@chapter Encryption
|
@chapter Encryption
|
||||||
@ -1003,12 +1022,10 @@ Note that Emacs will prompt for a password for encrypted files during
|
|||||||
cache updates if it requires reading the encrypted file. To reduce the
|
cache updates if it requires reading the encrypted file. To reduce the
|
||||||
number of password prompts, you may wish to cache the password.
|
number of password prompts, you may wish to cache the password.
|
||||||
|
|
||||||
@itemize
|
@defvar org-roam-encrypt-files
|
||||||
@item
|
|
||||||
Variable: org-roam-encrypt-files
|
|
||||||
|
|
||||||
Whether to encrypt new files. If true, create files with .org.gpg extension.
|
Whether to encrypt new files. If true, create files with .org.gpg extension.
|
||||||
@end itemize
|
@end defvar
|
||||||
|
|
||||||
@node Graphing
|
@node Graphing
|
||||||
@chapter Graphing
|
@chapter Graphing
|
||||||
@ -1019,9 +1036,7 @@ notes. This is done by performing SQL queries and generating images using
|
|||||||
|
|
||||||
The entry point to graph creation is @code{org-roam-graph}.
|
The entry point to graph creation is @code{org-roam-graph}.
|
||||||
|
|
||||||
@itemize
|
@defun org-roam-graph & optional arg file node-query
|
||||||
@item
|
|
||||||
Function: org-roam-graph & optional arg file node-query
|
|
||||||
|
|
||||||
Build and possibly display a graph for FILE from NODE-QUERY@.
|
Build and possibly display a graph for FILE from NODE-QUERY@.
|
||||||
If FILE is nil, default to current buffer’s file name.
|
If FILE is nil, default to current buffer’s file name.
|
||||||
@ -1030,37 +1045,43 @@ ARG may be any of the following values:
|
|||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
@code{nil} show the graph.
|
@code{nil} show the graph.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{C-u} show the graph for FILE@.
|
@code{C-u} show the graph for FILE@.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{C-u N} show the graph for FILE limiting nodes to N steps.
|
@code{C-u N} show the graph for FILE limiting nodes to N steps.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{C-u C-u} build the graph.
|
@code{C-u C-u} build the graph.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{C-u -} build the graph for FILE@.
|
@code{C-u -} build the graph for FILE@.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@code{C-u -N} build the graph for FILE limiting nodes to N steps.
|
@code{C-u -N} build the graph for FILE limiting nodes to N steps.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
@end defun
|
||||||
|
|
||||||
@item
|
@defopt org-roam-graph-executable
|
||||||
User Option: org-roam-graph-executable
|
|
||||||
|
|
||||||
Path to the graphing executable (in this case, Graphviz). Set this if Org-roam is unable to find the Graphviz executable on your system.
|
Path to the graphing executable (in this case, Graphviz). Set this if Org-roam is unable to find the Graphviz executable on your system.
|
||||||
|
|
||||||
You may also choose to use @code{neato} in place of @code{dot}, which generates a more
|
You may also choose to use @code{neato} in place of @code{dot}, which generates a more
|
||||||
compact graph layout.
|
compact graph layout.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-graph-viewer
|
||||||
User Option: org-roam-graph-viewer
|
|
||||||
|
|
||||||
Org-roam defaults to using Firefox (located on PATH) to view the SVG, but you may choose to set it to:
|
Org-roam defaults to using Firefox (located on PATH) to view the SVG, but you may choose to set it to:
|
||||||
|
|
||||||
@enumerate
|
@itemize
|
||||||
@item
|
@item
|
||||||
A string, which is a path to the program used
|
A string, which is a path to the program used
|
||||||
|
|
||||||
@item
|
@item
|
||||||
a function accepting a single argument: the graph file path.
|
a function accepting a single argument: the graph file path.
|
||||||
@end enumerate
|
@end itemize
|
||||||
|
|
||||||
@code{nil} uses @code{view-file} to view the graph.
|
@code{nil} uses @code{view-file} to view the graph.
|
||||||
|
|
||||||
@ -1072,7 +1093,7 @@ If you are using WSL2 and would like to open the graph in Windows, you can use t
|
|||||||
(let ((org-roam-graph-viewer "/mnt/c/Program Files/Mozilla Firefox/firefox.exe"))
|
(let ((org-roam-graph-viewer "/mnt/c/Program Files/Mozilla Firefox/firefox.exe"))
|
||||||
(org-roam-graph--open (concat "file://///wsl$/Ubuntu" file)))))
|
(org-roam-graph--open (concat "file://///wsl$/Ubuntu" file)))))
|
||||||
@end lisp
|
@end lisp
|
||||||
@end itemize
|
@end defopt
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Graph Options::
|
* Graph Options::
|
||||||
@ -1084,40 +1105,36 @@ If you are using WSL2 and would like to open the graph in Windows, you can use t
|
|||||||
|
|
||||||
Graphviz provides many options for customizing the graph output, and Org-roam supports some of them. See @uref{https://graphviz.gitlab.io/_pages/doc/info/attrs.html} for customizable options.
|
Graphviz provides many options for customizing the graph output, and Org-roam supports some of them. See @uref{https://graphviz.gitlab.io/_pages/doc/info/attrs.html} for customizable options.
|
||||||
|
|
||||||
@itemize
|
@defopt org-roam-graph-extra-config
|
||||||
@item
|
|
||||||
User Option: org-roam-graph-extra-config
|
|
||||||
|
|
||||||
Extra options passed to graphviz for the digraph (The ``G'' attributes).
|
Extra options passed to graphviz for the digraph (The ``G'' attributes).
|
||||||
Example: @code{'~(("rankdir" . "LR"))}
|
Example: @code{'~(("rankdir" . "LR"))}
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-graph-node-extra-config
|
||||||
User Option: org-roam-graph-node-extra-config
|
|
||||||
|
|
||||||
Extra options for nodes in the graphviz output (The ``N'' attributes).
|
Extra options for nodes in the graphviz output (The ``N'' attributes).
|
||||||
Example: @code{'(("color" . "skyblue"))}
|
Example: @code{'(("color" . "skyblue"))}
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-graph-edge-extra-config
|
||||||
User Option: org-roam-graph-edge-extra-config
|
|
||||||
|
|
||||||
Extra options for edges in the graphviz output (The ``E'' attributes).
|
Extra options for edges in the graphviz output (The ``E'' attributes).
|
||||||
Example: @code{'(("dir" . "back"))}
|
Example: @code{'(("dir" . "back"))}
|
||||||
|
@end defopt
|
||||||
|
|
||||||
@item
|
@defopt org-roam-graph-edge-cites-extra-config
|
||||||
User Option: org-roam-graph-edge-cites-extra-config
|
|
||||||
|
|
||||||
Extra options for citation edges in the graphviz output.
|
Extra options for citation edges in the graphviz output.
|
||||||
Example: @code{'(("color" . "red"))}
|
Example: @code{'(("color" . "red"))}
|
||||||
@end itemize
|
@end defopt
|
||||||
|
|
||||||
@node Excluding Nodes and Edges
|
@node Excluding Nodes and Edges
|
||||||
@section Excluding Nodes and Edges
|
@section Excluding Nodes and Edges
|
||||||
|
|
||||||
One may want to exclude certain files to declutter the graph.
|
One may want to exclude certain files to declutter the graph.
|
||||||
|
|
||||||
@itemize
|
@defopt org-roam-graph-exclude-matcher
|
||||||
@item
|
|
||||||
User Option: org-roam-graph-exclude-matcher
|
|
||||||
|
|
||||||
Matcher for excluding nodes from the generated graph. Any nodes and links for
|
Matcher for excluding nodes from the generated graph. Any nodes and links for
|
||||||
file paths matching this string is excluded from the graph.
|
file paths matching this string is excluded from the graph.
|
||||||
@ -1126,7 +1143,7 @@ If value is a string, the string is the only matcher.
|
|||||||
|
|
||||||
If value is a list, all file paths matching any of the strings
|
If value is a list, all file paths matching any of the strings
|
||||||
are excluded.
|
are excluded.
|
||||||
@end itemize
|
@end defopt
|
||||||
|
|
||||||
@example
|
@example
|
||||||
(setq org-roam-graph-exclude-matcher '("private" "dailies"))
|
(setq org-roam-graph-exclude-matcher '("private" "dailies"))
|
||||||
@ -1229,29 +1246,29 @@ See @uref{https://www.chromium.org/administrators/linux-quick-start, here} for m
|
|||||||
For MacOS, one solution is to use @uref{https://github.com/sveinbjornt/Platypus, Platypus}. Here are the instructions for
|
For MacOS, one solution is to use @uref{https://github.com/sveinbjornt/Platypus, Platypus}. Here are the instructions for
|
||||||
setting up with Platypus and Chrome:
|
setting up with Platypus and Chrome:
|
||||||
|
|
||||||
@enumerate
|
@itemize
|
||||||
@item
|
@item
|
||||||
Install and launch Platypus (with @uref{https://brew.sh/, Homebrew}):
|
Install and launch Platypus (with @uref{https://brew.sh/, Homebrew}):
|
||||||
@end enumerate
|
@end itemize
|
||||||
|
|
||||||
@example
|
@example
|
||||||
brew cask install platypus
|
brew cask install platypus
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@enumerate
|
@itemize
|
||||||
@item
|
@item
|
||||||
Create a script @code{launch_emacs.sh}:
|
Create a script @code{launch_emacs.sh}:
|
||||||
@end enumerate
|
@end itemize
|
||||||
|
|
||||||
@example
|
@example
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
/usr/local/bin/emacsclient --no-wait $1
|
/usr/local/bin/emacsclient --no-wait $1
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@enumerate
|
@itemize
|
||||||
@item
|
@item
|
||||||
Create a Platypus app with the following settings:
|
Create a Platypus app with the following settings:
|
||||||
@end enumerate
|
@end itemize
|
||||||
|
|
||||||
@example
|
@example
|
||||||
| Setting | Value |
|
| Setting | Value |
|
||||||
@ -1371,17 +1388,15 @@ Org-roam provides journaling capabilities akin to
|
|||||||
|
|
||||||
For @code{org-roam-dailies} to work, you need to define two variables:
|
For @code{org-roam-dailies} to work, you need to define two variables:
|
||||||
|
|
||||||
@itemize
|
@defvar @code{org-roam-dailies-directory}
|
||||||
@item
|
|
||||||
Variable: @code{org-roam-dailies-directory}
|
|
||||||
|
|
||||||
Path to daily-notes.
|
Path to daily-notes.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
@item
|
@defvar @code{org-roam-dailies-capture-templates}
|
||||||
Variable: @code{org-roam-dailies-capture-templates}
|
|
||||||
|
|
||||||
Capture templates for daily-notes in Org-roam.
|
Capture templates for daily-notes in Org-roam.
|
||||||
@end itemize
|
@end defvar
|
||||||
|
|
||||||
Here is a sane default configuration:
|
Here is a sane default configuration:
|
||||||
|
|
||||||
@ -1429,41 +1444,35 @@ template @code{j} will put its notes under the heading ‘Journal’. When you
|
|||||||
@node Capturing and finding daily-notes
|
@node Capturing and finding daily-notes
|
||||||
@section Capturing and finding daily-notes
|
@section Capturing and finding daily-notes
|
||||||
|
|
||||||
@itemize
|
@defun @code{org-roam-dailies-capture-today} &optional goto
|
||||||
@item
|
|
||||||
Function: @code{org-roam-dailies-capture-today} &optional goto
|
|
||||||
|
|
||||||
Create an entry in the daily note for today.
|
Create an entry in the daily note for today.
|
||||||
|
|
||||||
When @code{goto} is non-nil, go the note without creating an entry.
|
When @code{goto} is non-nil, go the note without creating an entry.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@item
|
@defun @code{org-roam-dailies-find-today}
|
||||||
Function: @code{org-roam-dailies-find-today}
|
|
||||||
|
|
||||||
Find the daily note for today, creating it if necessary.
|
Find the daily note for today, creating it if necessary.
|
||||||
@end itemize
|
@end defun
|
||||||
|
|
||||||
There are variants of those commands for @code{-yesterday} and @code{-tomorrow}:
|
There are variants of those commands for @code{-yesterday} and @code{-tomorrow}:
|
||||||
|
|
||||||
@itemize
|
@defun @code{org-roam-dailies-capture-yesterday} n &optional goto
|
||||||
@item
|
|
||||||
Function: @code{org-roam-dailies-capture-yesterday} n &optional goto
|
|
||||||
|
|
||||||
Create an entry in the daily note for yesteday.
|
Create an entry in the daily note for yesteday.
|
||||||
|
|
||||||
With numeric argument @code{n}, use the daily note @code{n} days in the past.
|
With numeric argument @code{n}, use the daily note @code{n} days in the past.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@item
|
@defun @code{org-roam-dailies-find-yesterday}
|
||||||
Function: @code{org-roam-dailies-find-yesterday}
|
|
||||||
|
|
||||||
With numeric argument N, use the daily-note N days in the future.
|
With numeric argument N, use the daily-note N days in the future.
|
||||||
@end itemize
|
@end defun
|
||||||
|
|
||||||
There are also commands which allow you to use Emacs’s @code{calendar} to find the date
|
There are also commands which allow you to use Emacs’s @code{calendar} to find the date
|
||||||
|
|
||||||
@itemize
|
@defun @code{org-roam-dailies-capture-date}
|
||||||
@item
|
|
||||||
Function: @code{org-roam-dailies-capture-date}
|
|
||||||
|
|
||||||
Create an entry in the daily note for a date using the calendar.
|
Create an entry in the daily note for a date using the calendar.
|
||||||
|
|
||||||
@ -1471,36 +1480,34 @@ Prefer past dates, unless @code{prefer-future} is non-nil.
|
|||||||
|
|
||||||
With a 'C-u' prefix or when @code{goto} is non-nil, go the note without
|
With a 'C-u' prefix or when @code{goto} is non-nil, go the note without
|
||||||
creating an entry.
|
creating an entry.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@item
|
@defun @code{org-roam-dailies-find-date}
|
||||||
Function: @code{org-roam-dailies-find-date}
|
|
||||||
|
|
||||||
Find the daily note for a date using the calendar, creating it if necessary.
|
Find the daily note for a date using the calendar, creating it if necessary.
|
||||||
|
|
||||||
Prefer past dates, unless @code{prefer-future} is non-nil.
|
Prefer past dates, unless @code{prefer-future} is non-nil.
|
||||||
@end itemize
|
@end defun
|
||||||
|
|
||||||
@node Navigation
|
@node Navigation
|
||||||
@section Navigation
|
@section Navigation
|
||||||
|
|
||||||
You can navigate between daily-notes:
|
You can navigate between daily-notes:
|
||||||
|
|
||||||
@itemize
|
@defun @code{org-roam-dailies-find-directory}
|
||||||
@item
|
|
||||||
Function: @code{org-roam-dailies-find-directory}
|
|
||||||
|
|
||||||
Find and open @code{org-roam-dailies-directory}.
|
Find and open @code{org-roam-dailies-directory}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@item
|
@defun @code{org-roam-dailies-find-previous-note}
|
||||||
Function: @code{org-roam-dailies-find-previous-note}
|
|
||||||
|
|
||||||
When in an daily-note, find the previous one.
|
When in an daily-note, find the previous one.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@item
|
@defun @code{org-roam-dailies-find-next-note}
|
||||||
Function: @code{org-roam-dailies-find-next-note}
|
|
||||||
|
|
||||||
When in an daily-note, find the next one.
|
When in an daily-note, find the next one.
|
||||||
@end itemize
|
@end defun
|
||||||
|
|
||||||
@node Diagnosing and Repairing Files
|
@node Diagnosing and Repairing Files
|
||||||
@chapter Diagnosing and Repairing Files
|
@chapter Diagnosing and Repairing Files
|
||||||
@ -1510,13 +1517,11 @@ Org-roam provides a utility for diagnosing and repairing problematic files via
|
|||||||
Org-roam file. To run the check only for the current file, run @code{C-u M-x
|
Org-roam file. To run the check only for the current file, run @code{C-u M-x
|
||||||
org-roam-doctor}, but note that this may take some time.
|
org-roam-doctor}, but note that this may take some time.
|
||||||
|
|
||||||
@itemize
|
@defun org-roam-doctor &optional this-buffer
|
||||||
@item
|
|
||||||
Function: org-roam-doctor &optional this-buffer
|
|
||||||
|
|
||||||
Perform a check on Org-roam files to ensure cleanliness. If THIS-BUFFER, run
|
Perform a check on Org-roam files to ensure cleanliness. If THIS-BUFFER, run
|
||||||
the check only for the current buffer.
|
the check only for the current buffer.
|
||||||
@end itemize
|
@end defun
|
||||||
|
|
||||||
The checks run are defined in @code{org-roam-doctor--checkers}. Each checker is an
|
The checks run are defined in @code{org-roam-doctor--checkers}. Each checker is an
|
||||||
instance of @code{org-roam-doctor-checker}. To define a checker, use
|
instance of @code{org-roam-doctor-checker}. To define a checker, use
|
||||||
@ -1597,36 +1602,43 @@ operations. To reduce the number of garbage collection processes, one may set
|
|||||||
@node Note-taking Workflows
|
@node Note-taking Workflows
|
||||||
@section Note-taking Workflows
|
@section Note-taking Workflows
|
||||||
|
|
||||||
@table @asis
|
|
||||||
@item Books
|
|
||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
|
Books@itemize
|
||||||
|
@item
|
||||||
@uref{https://www.goodreads.com/book/show/34507927-how-to-take-smart-notes, How To Take Smart Notes}
|
@uref{https://www.goodreads.com/book/show/34507927-how-to-take-smart-notes, How To Take Smart Notes}
|
||||||
@end itemize
|
@end itemize
|
||||||
@item Articles
|
|
||||||
@itemize
|
@item
|
||||||
|
Articles@itemize
|
||||||
@item
|
@item
|
||||||
@uref{https://www.lesswrong.com/posts/NfdHG6oHBJ8Qxc26s/the-zettelkasten-method-1, The Zettelkasten Method - LessWrong 2.0}
|
@uref{https://www.lesswrong.com/posts/NfdHG6oHBJ8Qxc26s/the-zettelkasten-method-1, The Zettelkasten Method - LessWrong 2.0}
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@uref{https://reddit.com/r/RoamResearch/comments/eho7de/building_a_second_brain_in_roamand_why_you_might, Building a Second Brain in Roam@dots{}And Why You Might Want To : RoamResearch}
|
@uref{https://reddit.com/r/RoamResearch/comments/eho7de/building_a_second_brain_in_roamand_why_you_might, Building a Second Brain in Roam@dots{}And Why You Might Want To : RoamResearch}
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@uref{https://www.nateliason.com/blog/roam, Roam Research: Why I Love It and How I Use It - Nat Eliason}
|
@uref{https://www.nateliason.com/blog/roam, Roam Research: Why I Love It and How I Use It - Nat Eliason}
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@uref{https://twitter.com/adam_keesling/status/1196864424725774336?s=20, Adam Keesling's Twitter Thread}
|
@uref{https://twitter.com/adam_keesling/status/1196864424725774336?s=20, Adam Keesling's Twitter Thread}
|
||||||
|
|
||||||
@item
|
@item
|
||||||
@uref{https://blog.jethro.dev/posts/how_to_take_smart_notes_org/, How To Take Smart Notes With Org-mode · Jethro Kuan}
|
@uref{https://blog.jethro.dev/posts/how_to_take_smart_notes_org/, How To Take Smart Notes With Org-mode · Jethro Kuan}
|
||||||
@end itemize
|
@end itemize
|
||||||
@item Threads
|
|
||||||
@itemize
|
@item
|
||||||
|
Threads@itemize
|
||||||
@item
|
@item
|
||||||
@uref{https://news.ycombinator.com/item?id=22473209, Ask HN: How to Take Good Notes}
|
@uref{https://news.ycombinator.com/item?id=22473209, Ask HN: How to Take Good Notes}
|
||||||
@end itemize
|
@end itemize
|
||||||
@item Videos
|
|
||||||
@itemize
|
@item
|
||||||
|
Videos@itemize
|
||||||
@item
|
@item
|
||||||
@uref{https://www.youtube.com/watch?v=RvWic15iXjk, How to Use Roam to Outline a New Article in Under 20 Minutes}
|
@uref{https://www.youtube.com/watch?v=RvWic15iXjk, How to Use Roam to Outline a New Article in Under 20 Minutes}
|
||||||
@end itemize
|
@end itemize
|
||||||
@end table
|
@end itemize
|
||||||
|
|
||||||
@node Ecosystem
|
@node Ecosystem
|
||||||
@section Ecosystem
|
@section Ecosystem
|
||||||
@ -1855,12 +1867,13 @@ This situation arises when, for example, one would like to create a note titled
|
|||||||
The solution is dependent on the mini-buffer completion framework in use. Here
|
The solution is dependent on the mini-buffer completion framework in use. Here
|
||||||
are the solutions:
|
are the solutions:
|
||||||
|
|
||||||
@table @asis
|
@itemize
|
||||||
@item Ivy
|
@item
|
||||||
call @code{ivy-immediate-done}, typically bound to @code{C-M-j}. Alternatively, set @code{ivy-use-selectable-prompt} to @code{t}, so that ``bar'' is now selectable.
|
Ivycall @code{ivy-immediate-done}, typically bound to @code{C-M-j}. Alternatively, set @code{ivy-use-selectable-prompt} to @code{t}, so that ``bar'' is now selectable.
|
||||||
@item Helm
|
|
||||||
Org-roam should provide a selectable ``[?] bar'' candidate at the top of the candidate list.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Emacs 27.1.50 (Org mode 9.4)
|
@item
|
||||||
|
HelmOrg-roam should provide a selectable ``[?] bar'' candidate at the top of the candidate list.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
Emacs 28.0.50 (Org mode 9.4)
|
||||||
@bye
|
@bye
|
Reference in New Issue
Block a user