organ-mode

https://github.com/mahmoodsh36/organ-mode is an alternative to org-mode for the lem text editor. it tries to maintain compatibility with org's syntax to some degree that will be defined at some point, but that should be enough that for most use-cases it should behave like org-mode would.
organ-mode is built on cltpt.

installation

using nix

if you are using nix, you can grab lem with all the latest features with:
nix run github:mahmoodsh36/lem#lem-webview
nix often caches things and doesnt "pull" the changes, to overcome this you can use:
nix run github:mahmoodsh36/lem#lem-webview --refresh --option eval-cache false

using qlot

the repo at https://github.com/mahmoodsh36/lem is a fork that has organ-mode and cltpt pre-installed for use. i will be keeping the repo in sync with the upstream master branch as much as possible.
to install lem from this branch you can just install it like you would install lem from the upstream master branch. after cloning this repo, you may follow the instructions at https://lem-project.github.io/installation/webview/ to install.
theoretically, once you install the dependencies listed in the linked page, you only have to build:
# install CL dependencies
qlot install
# build the webview client
make webview
# launch the lem binary
./lem

initial configuration

out of hte box, only syntax-highlighting and single-buffer workflows will be working. to get cross-file workflows (such as organ-agenda and organ-roam) we may use the following minimal configuration:
(setf organ:*organ-files*
      '((:path ("/home/<user>/notes1/"
                "/home/<user>/notes2/")
         :glob "*.org"
         :format "org-mode")))

roadmap

note that this is distinct from the roadmap for cltpt.
  • [ ] proper packaging for lem
  • [-] roam (idea from org-roam)
    • [X] node navigation
    • [ ] backlinks buffer
  • [-] agenda (idea from org-agenda)
    • [-] agenda buffer
      • [X] todo navigation
      • [ ] next/previous week
      • [X] display specific date range
    • [ ] todo state handling/modification for headers
    • [ ] informative grid overview
  • [ ] element folding
    • [ ] headers
    • [ ] blocks
    • [ ] drawers
  • [ ] babel (idea from org-babel)
    • [ ] code execution
    • [ ] code "fontification"
  • [X] buffer navigation by element (headers, blocks, etc)
  • [-] element-specific/quick actions
    • [-] list-specific actions (insert new list item on enter)
      • [X] reformatting
      • [ ] new item
      • [X] reordering (dragging elements above/below etc)
      • [X] dragging elements
      • [ ] mark/unmark list entry
    • [-] table-specific actions
      • [ ] new row/column
      • [ ] delete row/column
      • [X] reformatting
      • [X] next/previous cell (using tab/shift-tab)
      • [X] reordering (dragging elements above/below etc)
    • [ ] org-header
      • [ ] reordering (dragging elements above/below etc)
      • [ ] demote/promote header subtrees
  • [ ] inline image display
  • [ ] "live" latex previews

documentation

organ-mode makes use of the transient from https://github.com/lem-project/lem/pull/2100 by default. when you open an org file the transient will appear with a least of the keybindings. besides that, there is a global keymap that is maintained for features that are usable outside an organ-mode buffer. this keymap is bound to C-c r by default.

global keys

key description function
C-c r base global keymap *organ-keymap*
C-c r r open organ-roam node navigation list roam-find
C-c r a open organ-agenda agenda-mode-open
C-c r d toggle *agenda-include-done*
C-c r u toggle *agenda-first-repeat-only*
C-c r R specify time range for agenda
C-c r c p publish all files to a webapp
there are more keys bound in *organ-keymap* that would just show up when you hit C-c r but arent listed here to avoid making a long table.

organ-mode

key description function
C-c C-n go to next heading organ-next-header
C-c C-p go to previous heading organ-prev-header
C-c n go to next element organ-next-element
C-c p go to previous element organ-next-element
C-c C-x C-n go to next link organ-next-link
C-c C-x C-p go to previous link organ-prev-link
C-c C-v C-n go to next src-block organ-next-src-block
C-c C-v C-p go to previous src-block organ-prev-src-block
modify timestmap at point organ-insert-timestamp
M-k swap entry with one above it (applies to lists, tables)
M-j swap entry with one below it (applies to lists, tables)
M-l swap entry with one to the right
M-h swap entry with one to the left
Tab next entry in table (might be used for other stuff in the future)
Shfit-Tab prev entry in table

organ-roam

  • node roamer (find headers/files/etc) can be started using C-c r.
related variables:
variable description
organ:*organ-files* a set of rules for finding files. see docstring of cltpt/roam:find-files

organ-agenda

once the variable *organ-files* has been customized, organ-agenda can be opened using C-c a.
organ-agenda also has a transient popup that displays the usable keys in the mode.
the agenda mode doesnt yet provide as many features as org-agenda, and doesnt yet provide a menu similar to org-agenda's for manipulating states.
default keybindings:
key description function
change the TODO state of the task under cursor agenda-mode-change-task-state
M-n go to next item in the tree outline-next-true-sibling
M-p previous item in the tree outline-previous-true-sibling
C-M-n next item in the tree that is of the same level outline-next-sibling
C-M-p previous item in the tree that is of the same level outline-previous-sibling
M-u go to parent outline-go-to-parent
return go to source of todo entry. outline-action-at-point
tab exapnd/collapse node. outline-expand-collapse
q quit outline-quit
related variables:
variable description
cltpt/agenda:*agenda-time-format* time format displayed in agenda trees.
cltpt/agenda:*agenda-seqs* definitions that are used to determine agenda state changing behavior