doomemacs/modules/lang/org
Henrik Lissner 0dc1084e8a
bump: :lang
ProofGeneral/PG@99f91e873e -> ProofGeneral/PG@3a99da2755
agda/agda@fbf9d159c3 -> agda/agda@4f82f9b90a
amake/flutter.el@004c91e070 -> amake/flutter.el@e71235d400
babashka/neil@a38be9f082 -> babashka/neil@6728367eff
beancount/beancount-mode@71c1622246 -> beancount/beancount-mode@7b437abcf0
chachi/cuda-mode@7dd07a20c3 -> chachi/cuda-mode@c3dae31b3d
clojure-emacs/cider@105da319b0 -> clojure-emacs/cider@8fdb53e8be
dominikh/go-mode.el@636d36e37a -> dominikh/go-mode.el@602d73e226
emacs-geiser/geiser@b6b4ac070d -> emacs-geiser/geiser@97ce88463f
emacs-geiser/guile@d5175439c0 -> emacs-geiser/guile@5a856c2982
emacs-gnuplot/gnuplot@7138b139d2 -> emacs-gnuplot/gnuplot@4c6b18f71f
emacs-lsp/lsp-dart@1f52e81c93 -> emacs-lsp/lsp-dart@9ffbafb7dc
emacs-lsp/lsp-haskell@18a7c7881f -> emacs-lsp/lsp-haskell@ba49fa9822
emacs-lsp/lsp-java@4909c14b90 -> emacs-lsp/lsp-java@868600bf7f
emacs-lsp/lsp-metals@fa4072cbe7 -> emacs-lsp/lsp-metals@0dc938be11
emacs-lsp/lsp-sourcekit@bb2b7e0278 -> emacs-lsp/lsp-sourcekit@63ff1ab638
emacs-lsp/lsp-treemacs@1d43e9e030 -> emacs-lsp/lsp-treemacs@fb1a07ae0a
emacs-straight/adaptive-wrap@f5bc153273 -> emacs-straight/adaptive-wrap@d75665b9c8
emacs-straight/auctex@451b0f08b0 -> emacs-straight/auctex@08881d08ce
emacs-straight/csv-mode@cdb73a771b -> emacs-straight/csv-mode@6979fc18eb
emacs-straight/org-mode@f398724bd5 -> emacs-straight/org-mode@6a5d0ed342
emacs-straight/rainbow-mode@0740f31f30 -> emacs-straight/rainbow-mode@2e6b18609c
emacs-straight/sml-mode@d114e5a27f -> emacs-straight/sml-mode@021233f60a
emacsmirror/paredit@9a2c4b37fc -> emacsmirror/paredit@037b9b8acb
ericdallo/jet.el@7d5157aac6 -> ericdallo/jet.el@c9a92675ef
erlang/otp@2a64588d4a -> erlang/otp@c66bf53cde
factor/factor@d143007778 -> factor/factor@31dc1a386b
fosskers/sly-overlay@4c6135c260 -> fosskers/sly-overlay@d629450590
fxbois/web-mode@005aa62d6f -> fxbois/web-mode@0c83581d1e
gcv/julia-snail@f7784c5007 -> gcv/julia-snail@dff92c4250
greghendershott/racket-mode@40ecb87f40 -> greghendershott/racket-mode@dba66c4536
hhvm/hack-mode@ccf20511f0 -> hhvm/hack-mode@343e45f2a6
https://repo.or.cz/org-contacts.git@d0cb221502c9 -> https://repo.or.cz/org-contacts.git@f0a430442b2a
hvesalai/emacs-scala-mode@4c6d636b86 -> hvesalai/emacs-scala-mode@bd0638c32a
idris-hackers/idris-mode@38dd2380dc -> idris-hackers/idris-mode@09de86a8f0
ifitzpatrick/graphql-doc.el@d37140267e -> ifitzpatrick/graphql-doc.el@17755a2466
jart/disaster@16bba9afb9 -> jart/disaster@b20f8e1ef9
joaotavora/sly@ba40c8f054 -> joaotavora/sly@742355f755
jorgenschaefer/emacs-buttercup@a1a86b027f -> jorgenschaefer/emacs-buttercup@bf01a33f8b
jrblevin/markdown-mode@8aab017f47 -> jrblevin/markdown-mode@6102ac5b73
jschaf/powershell.el@f2da15857e -> jschaf/powershell.el@38727f1cda
jwiegley/emacs-async@f317b0c9c3 -> jwiegley/emacs-async@43f97d7e68
ledger/ledger-mode@b0e65f74a5 -> ledger/ledger-mode@a6be7a2d79
nonsequitur/inf-ruby@0cfe8b2fb1 -> nonsequitur/inf-ruby@b234625c85
ocaml/dune@96ed5fb42f -> ocaml/dune@a7924e322e
ocaml/merlin@9fa77dbe81 -> ocaml/merlin@e016abfac6
oer/org-re-reveal@dbd8ffb3e5 -> oer/org-re-reveal@91610ba9b0
org-noter/org-noter@68646b685a -> org-noter/org-noter@6f292d7f1e
org-roam/org-roam@8667e44187 -> org-roam/org-roam@0b9fcbc97b
rust-lang/rust-mode@a529a45181 -> rust-lang/rust-mode@c87f6f82bd
seagle0128/grip-mode@7c42b8f61d -> seagle0128/grip-mode@9adac9c989
technomancy/fennel-mode@a4ddd1750f -> technomancy/fennel-mode@f4bd34e1c3

From this point on, Org will be pinned to tagged releases.
2024-09-07 19:04:37 -04:00
..
autoload perf(org): call yas-reload-all on TAB only once 2024-08-26 16:22:32 -04:00
contrib fix(org): jupyter-org-mime-types: restore :text/html 2024-08-23 17:48:32 -04:00
test lang/org: fix tests to reflect f70f788df 2019-11-12 16:15:42 -05:00
cli.el feat(org): add "doom +org tangle" command 2024-09-01 17:53:44 -04:00
config.el tweak(org): move RET keybinds from normal to motion state 2024-08-31 22:08:56 -04:00
doctor.el refactor!: deprecate IS-* OS constants 2024-02-04 17:54:29 -05:00
packages.el bump: :lang 2024-09-07 19:04:37 -04:00
README.org docs(org): mention Jupyter packages for Arch Linux 2024-08-22 20:25:37 -04:00

:lang org

Description   unfold

This module adds org-mode support to Doom Emacs, along with a number of adjustments, extensions and reasonable defaults to make it more performant and intuitive out of the box:

  • A custom, centralized attachment system that stores files in one place, rather than in the same directory as the input file(s) (only applies to attachments from files in/under var:org-directory).
  • Executable code blocks with support for a variety of languages and tools (depending on what :lang modules are enabled).
  • Supports an external org-capture workflow through the bin/org-capture shell script and fn:+org-capture/open-frame.
  • A configuration for using org-mode for slide-show presentations or exporting org files to reveal.js slideshows.
  • Drag-and-drop support for images (with inline preview) and media files (drops a file icon and a short link) (requires doom-module:+dragndrop flag).
  • Integration with pandoc, jupyter, reveal.js, beamer, and others (requires flags).
  • Export-to-clipboard functionality, for copying text into formatted html, markdown or rich text to the clipboard (see fn:+org/export-to-clipboard and fn:+org/export-to-clipboard-as-rich-text).

Org is a system for writing plain text notes with syntax highlighting, code execution, task scheduling, agenda management, and many more. The whole idea is that you can write notes and mix them with references to things like articles, images, and example code combined with the output of that code after it is executed.

https://www.mfoot.com/blog/2015/11/22/literate-emacs-configuration-with-org-mode/

Module flags

+brain
Enable doom-package:org-brain integration.
+contacts
Enable doom-package:org-contacts integration.
+dragndrop
Enable drag-and-drop support for images and files; inserts inline previews for images and an icon+link for other media types.
+crypt
Enable doom-package:org-crypt integraiton for encryption and decryption on org files.
+gnuplot
Install gnuplot & gnuplot-mode, which enables rendering images from gnuplot src blocks or plotting tables with fn:org-plot/gnuplot (bound to SPC m b p, by default).
+hugo
Enable integration with hugo to export from Emacs well-formed (blackfriday) markdown.
+journal
Enable doom-package:org-journal integration.
+jupyter
Enable Jupyter integration for babel.
+noter
Enable doom-package:org-noter integration. Keeps notes in sync with a document. Requires doom-module::tools pdf, DocView, or nov.el to be enabled.
+pandoc
Enable pandoc integration into the Org exporter.
+passwords
Enable doom-package:org-passwords integration.
+pomodoro
Enable a pomodoro timer for clocking time on tasks.
+present
Enable integration with reveal.js, beamer and org-tree-slide, so Emacs can be used for presentations. It automatically downloads reveal.js.
+pretty
Enable pretty unicode symbols for bullets+priorities and better syntax highlighting for latex. Keep in mind: this can be expensive. If org becomes too slow, it'd be wise to disable this flag.
+roam
Enable integration with org-roam v1. This requires sqlite3 to be installed on your system. Incompatible with doom-module:+roam2.
+roam2
Enable integration with org-roam v2. This requires sqlite3 to be installed on your system. Incompatible with doom-module:+roam.

Hacks

  • Adds support for a :sync parameter for org src blocks. This overrides :async.
  • Gracefully degrades :async babel blocks to :sync when doom-package:ob-async would cause errors or issues (such as with a :session parameter, which doom-package:ob-async does not support, or when exporting org documents).
  • The window is recentered when following links.
  • The breadcrumbs displayed in eldoc when hovering over an org headline has been reworked to strip out link syntax and normalize font-size disparities.
  • If doom-module::ui workspaces is enabled, persp-mode won't register org agenda buffers that are temporarily opened in the background.
  • Temporary org agenda files aren't added to recentf.
  • file: links are highlighted with the face:error face if they are broken.
  • TAB was changed to toggle only the visibility state of the current subtree, rather than cycle through it recursively. This can be reversed with:

    (after! evil-org
      (remove-hook 'org-tab-first-hook #'+org-cycle-only-current-subtree-h))
  • (Evil users) Nearby tables are formatted when exiting insert or replace mode (see fn:+org-enable-auto-reformat-tables-h).
  • Statistics cookies are updated when saving the buffer of exiting insert mode (see fn:+org-enable-auto-update-cookies-h).
  • Org-protocol has been lazy loaded (see fn:+org-init-protocol-lazy-loader-h); loaded when the server receives a request for an org-protocol:// url.
  • Babel and babel plugins are now lazy loaded (see fn:+org-init-babel-lazy-loader-h); loaded when a src block is executed. No need to use var:org-babel-do-load-languages in your config, just install your babel packages to extend language support (and ensure its org-babel-execute:* function is autoloaded).
  • If a variable is used as a file path in var:org-capture-template, it will be resolved relative to var:org-directory, instead of var:default-directory (see fn:+org--capture-expand-variable-file-a).

TODO Changelog

This module does not have a changelog yet.

Installation

Enable this module in your doom! block.

This module has no hard requirements, but these soft requirements are needed to use Org's more esoteric features:

MacOS

brew install --cask mactex
brew install gnuplot

Arch Linux

pacman -S texlive-core texlive-bin texlive-science texlive-latexextra
pacman -S gnuplot

For doom-module:+jupyter, install jupyterlab or jupyter-notebook (source).

Debian & Ubuntu

apt-get install texlive dvipng
apt-get install gnuplot

NixOS

environment.systemPackages = with pkgs; [
  # any less than medium isn't guaranteed to work
  texlive.combined.scheme-medium
  # required by +jupyter
  (python38.withPackages(ps: with ps; [jupyter]))
];

TODO Windows

TODO Usage

󱌣 This module's usage documentation is incomplete. Complete it?

Invoking the org-capture frame from outside Emacs

The simplest way to use the org-capture frame is through the bin/org-capture script. I'd recommend binding a shortcut key to it. If Emacs isn't running, it will spawn a temporary daemon for you.

Alternatively, you can call +org-capture/open-frame directly, e.g.

emacsclient --eval '(+org-capture/open-frame INITIAL-INPUT KEY)'

Built-in custom link types

This module defines a number of custom link types in +org-init-custom-links-h. They are (with examples):

  • doom-docs:index.org -> ~/.emacs.d/docs/%s
  • doom-modules:editor/evil/README.org -> ~/.emacs.d/modules/%s
  • doom-repo:issues -> https://github.com/hlissner/doom-emacs/%s
  • doom:core/core.el -> ~/.emacs.d/%s
  • duckduckgo:search terms
  • gimages:search terms (Google Images)
  • github:hlissner/doom-emacs
  • gmap:Toronto, Ontario (Google Maps)
  • google:search terms
  • kagi:search terms
  • org:todo.org -> {org-directory}/%s
  • wolfram:sin(x^3)
  • wikipedia:Emacs
  • youtube:P196hEuA_Xc (link only)

evil-mode keybindings

For evil-mode users, an overview of org-mode keybindings is provided here.

TODO Configuration

󱌣 This module's configuration documentation is incomplete. Complete it?

Changing org-directory

org-directory must be set before doom-package:org has loaded:

;; in $DOOMDIR/config.el
(setq org-directory "~/new/org/location/")

Changing org-noter-notes-search-path

;; in $DOOMDIR/config.el
(setq org-noter-notes-search-path '("~/notes/path/"))

Troubleshooting

Report an issue?

org-roam

Should I go with +roam (v1) or +roam2 (v2)?

Long story short: if you're new to doom-package:org-roam and haven't used it, then you should go with doom-module:+roam2; if you already have an org-roam-directory with the v1 files in it, then you can keep use doom-module:+roam for the time being, but it will eventually be removed, so you should migrate at your earliest convenience.

V1 isn't actively maintained anymore and is now basically EOL. This means that the feature disparity between the both will continue to grow, while its existing bugs and problems won't be addressed, at least by the main maintainers. V2 can be considered as a complete rewrite of the package so it comes with a lot of breaking changes.

To learn more about v2 you can use the next resources:

Migrating your existing files from v1 (+roam) to v2 (+roam2)

V2 comes with a migration wizard for v1 users. It's new, which means issues can appear during the migration process. Because of that, don't forget to backup your org-roam-directory before attempting to migrate.

In order to migrate from v1 to v2 using Doom follow the next steps:

  1. Enable doom-module:+roam2 flag (and disable doom-module:+roam if it was previously enabled) in your init.el.
  2. Ensure your org-roam-directory points to a directory with your v1 files.
  3. Run $ doom sync -u in your shell.
  4. Restart Emacs (if it was previously opened) and run org-roam-migrate-wizard command (M-x org-roam-migrate-wizard RET). The wizard will automatically attempt to backup your previous org-roam-directory to org-roam.bak, but just in case backup it yourself too.
  5. After the wizard is done you should be good to go. Verify the integrity of your data and whether it did everything as expected. In case of failure report your issue.

Frequently asked questions

This module has no FAQs yet. Ask one?

TODO Appendix

󱌣 This module has no appendix yet. Write one?