Get PlantUML back to working in org mode documents
Changed the name of a function, and didn't realize it broke my snippets until I tried to use it.
This commit is contained in:
parent
216f6a0b73
commit
2b1bdb32a1
11 changed files with 62 additions and 20 deletions
BIN
ha-org-plantuml-example.png
Normal file
BIN
ha-org-plantuml-example.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
61
ha-org.org
61
ha-org.org
|
@ -349,7 +349,7 @@ And turn on ALL the languages:
|
||||||
(css . t)
|
(css . t)
|
||||||
(plantuml . t)))
|
(plantuml . t)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
*** Graphviz
|
||||||
The [[https://graphviz.org/][graphviz project]] can be written in org blocks, and then rendered as an image:
|
The [[https://graphviz.org/][graphviz project]] can be written in org blocks, and then rendered as an image:
|
||||||
#+NAME: ob-graphviz
|
#+NAME: ob-graphviz
|
||||||
#+BEGIN_SRC emacs-lisp :tangle no
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||||||
|
@ -377,6 +377,56 @@ For example:
|
||||||
#+ATTR_ORG: :width 400px
|
#+ATTR_ORG: :width 400px
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:support/ha-org-graphviz-example.png]]
|
[[file:support/ha-org-graphviz-example.png]]
|
||||||
|
*** PlantUML
|
||||||
|
Need to install and configure Emacs to work with [[https://plantuml.com/][PlantUML]]. Granted, this is easier now that [[http://orgmode.org/worg/org-contrib/babel][Org-Babel]] natively supports [[http://eschulte.github.io/babel-dev/DONE-integrate-plantuml-support.html][blocks of plantuml code]]. First, [[https://plantuml.com/download][download the Jar]].
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
curl -o ~/bin/plantuml.jar https://github.com/plantuml/plantuml/releases/download/v1.2022.4/plantuml-1.2022.4.jar
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
After installing the [[https://github.com/skuro/plantuml-mode][plantuml-mode]], we need to reference the location:
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package plantuml-mode
|
||||||
|
:straight (:host github :repo "skuro/plantuml-mode")
|
||||||
|
:init
|
||||||
|
(setq org-plantuml-jar-path (expand-file-name "~/bin/plantuml.jar")))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
With some [[file:snippets/org-mode/plantuml][YASnippets]], I have =<p= to start a general diagram, and afterwards (while still in the org-mode file), type one of the following to expand as an example:
|
||||||
|
- =activity= :: https://plantuml.com/activity-diagram-betastart
|
||||||
|
- =component= :: https://plantuml.com/component-diagram
|
||||||
|
- =deployment= :: https://plantuml.com/deployment-diagram
|
||||||
|
- =object= :: https://plantuml.com/object-diagram
|
||||||
|
- =sequence= :: https://plantuml.com/sequence-diagram
|
||||||
|
- =state= :: https://plantuml.com/state-diagram
|
||||||
|
- =timing= :: https://plantuml.com/timing-diagram
|
||||||
|
- =use-case= :: https://plantuml.com/use-case-diagram
|
||||||
|
|
||||||
|
You may be wondering how such trivial terms can be used as expansions in an org file. Well, the trick is that each snippets has a =condition= that calls the following predicate function, that make the snippets context aware:
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun ha-org-nested-in-plantuml-block ()
|
||||||
|
"Predicate is true if point is inside a Plantuml Source code block in org-mode."
|
||||||
|
(equal "plantuml"
|
||||||
|
(plist-get (cadr (org-element-at-point)) :language)))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Here is a sequence diagram example to show how is looks/works:
|
||||||
|
#+begin_src plantuml :file ha-org-plantuml-example.png :exports file :results file
|
||||||
|
@startuml
|
||||||
|
!include https://raw.githubusercontent.com/ptrkcsk/one-dark-plantuml-theme/v1.0.0/theme.puml
|
||||||
|
' See details at https://plantuml.com/
|
||||||
|
' See details at https://plantuml.com/sequence-diagram
|
||||||
|
Alice -> Bob: Authentication Request
|
||||||
|
Bob --> Alice: Authentication Response
|
||||||
|
|
||||||
|
Alice -> Bob: Another authentication Request
|
||||||
|
Alice <-- Bob: Another authentication Response
|
||||||
|
@enduml
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 800px
|
||||||
|
[[file:ha-org-plantuml-example.png]]
|
||||||
*** Next Image
|
*** Next Image
|
||||||
When I create images or other artifacts that I consider /part/ of the org document, I want to have them based on the org file, but with a prepended number. Keeping track of what numbers are now free is difficult, so for a /default/ let's figure it out:
|
When I create images or other artifacts that I consider /part/ of the org document, I want to have them based on the org file, but with a prepended number. Keeping track of what numbers are now free is difficult, so for a /default/ let's figure it out:
|
||||||
|
|
||||||
|
@ -395,15 +445,6 @@ When I create images or other artifacts that I consider /part/ of the org docume
|
||||||
(setq largest (max largest (string-to-number (match-string-no-properties 1)))))
|
(setq largest (max largest (string-to-number (match-string-no-properties 1)))))
|
||||||
(format "%s-%02d" prefix (1+ largest)))))
|
(format "%s-%02d" prefix (1+ largest)))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** In a PlantUML Block
|
|
||||||
To make the snippets more context aware, this predicate
|
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defun ha-org-nested-in-plantuml-block ()
|
|
||||||
"Predicate is true if point is inside a Plantuml Source code block in org-mode."
|
|
||||||
(equal "plantuml"
|
|
||||||
(plist-get (cadr (org-element-at-point)) :language)))
|
|
||||||
#+END_SRC
|
|
||||||
** Keybindings
|
** Keybindings
|
||||||
Global keybindings available to all file buffers:
|
Global keybindings available to all file buffers:
|
||||||
#+NAME: global-keybindings
|
#+NAME: global-keybindings
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: activity-diagram
|
# name: activity-diagram
|
||||||
# key: activity
|
# key: activity
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/activity-diagram-betastart
|
' See details at https://plantuml.com/activity-diagram-betastart
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: component-diagram
|
# name: component-diagram
|
||||||
# key: component
|
# key: component
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/component-diagram
|
' See details at https://plantuml.com/component-diagram
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: deployment-diagram
|
# name: deployment-diagram
|
||||||
# key: deployment
|
# key: deployment
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/deployment-diagram
|
' See details at https://plantuml.com/deployment-diagram
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: object-diagram
|
# name: object-diagram
|
||||||
# key: object
|
# key: object
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/object-diagram
|
' See details at https://plantuml.com/object-diagram
|
||||||
|
|
|
@ -7,10 +7,11 @@
|
||||||
|
|
||||||
#+begin_src plantuml :file ${1:`(file-name-base (buffer-file-name)))`-`(ha-org-next-image-number)`}.${2:png} :exports file :results file
|
#+begin_src plantuml :file ${1:`(file-name-base (buffer-file-name)))`-`(ha-org-next-image-number)`}.${2:png} :exports file :results file
|
||||||
@startuml
|
@startuml
|
||||||
!include plantuml-dark-theme.puml
|
!include https://raw.githubusercontent.com/ptrkcsk/one-dark-plantuml-theme/v1.0.0/theme.puml
|
||||||
' See details at https://plantuml.com/
|
' See details at https://plantuml.com/
|
||||||
$0
|
$0
|
||||||
@enduml
|
@enduml
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+ATTR_ORG: :width 800px
|
#+ATTR_ORG: :width 800px
|
||||||
|
[[file:$1.$2]]
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: sequence-diagram
|
# name: sequence-diagram
|
||||||
# key: sequence
|
# key: sequence
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/sequence-diagram
|
' See details at https://plantuml.com/sequence-diagram
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: state-diagram
|
# name: state-diagram
|
||||||
# key: state
|
# key: state
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/state-diagram
|
' See details at https://plantuml.com/state-diagram
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: timing-diagram
|
# name: timing-diagram
|
||||||
# key: timing
|
# key: timing
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/timing-diagram
|
' See details at https://plantuml.com/timing-diagram
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# contributor: Howard Abrams
|
# contributor: Howard Abrams
|
||||||
# name: use-case-diagram
|
# name: use-case-diagram
|
||||||
# key: use-case
|
# key: use-case
|
||||||
# condition: (ha/org-nested-in-plantuml-block)
|
# condition: (ha-org-nested-in-plantuml-block)
|
||||||
# group: plantuml
|
# group: plantuml
|
||||||
# --
|
# --
|
||||||
' See details at https://plantuml.com/use-case-diagram
|
' See details at https://plantuml.com/use-case-diagram
|
||||||
|
|
Loading…
Reference in a new issue