From: Eshel Yaron Date: Sat, 1 Apr 2023 14:03:28 +0000 (+0300) Subject: New post X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5597e5da05449cb29ca37d4233695b5512f4bdfe;p=esy-publish.git New post --- diff --git a/.gitignore b/.gitignore index 302bd86..e8587e3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ /org/index.html /org/index.pdf /org/index.tex +/out/ +*~ diff --git a/Makefile b/Makefile index 9976be3..f7dd4c0 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,16 @@ -.PHONY: update local remote +.PHONY: update local remote new + +new: sweep + emacs -Q --batch -l publish.el -f esy/publish + +sweep: + git submodule update --remote -- sweep update: git submodule update --remote -- dotfiles git submodule update --remote -- sweep -local: update +local: emacs -Q --batch -l publish.el --eval '(org-publish "eshelyaron.local" t)' remote: update diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000..f744115 Binary files /dev/null and b/assets/favicon.ico differ diff --git a/assets/home.svg b/assets/home.svg new file mode 100644 index 0000000..222fdec --- /dev/null +++ b/assets/home.svg @@ -0,0 +1,25 @@ + + + Layer 1 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/mail.svg b/assets/mail.svg new file mode 100644 index 0000000..5752d47 --- /dev/null +++ b/assets/mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/mastodon.svg b/assets/mastodon.svg new file mode 100644 index 0000000..350c222 --- /dev/null +++ b/assets/mastodon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/rss.svg b/assets/rss.svg new file mode 100644 index 0000000..3ea2cd9 --- /dev/null +++ b/assets/rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 0000000..253ee29 --- /dev/null +++ b/assets/style.css @@ -0,0 +1,226 @@ +body { + color: #cfdfd5; + background-color: #111111; + margin-left: auto; + margin-right: auto; + width: 90%; + max-width: 90ch; + /* font-size: 1.1em; */ + font-family: "Helvetica Neue", sans-serif; +} + +a:link { + color: #00c089; +} + +a:visited { + color: #5dc0aa; +} + +time { + color: #9ac8e0; +} + +.home-link { + float: left; +} + +.other-links { + float: right; +} + +footer { + font-size: smaller; + text-align: center; +} + +.icon-links { + height: 40px; + text-decoration: none; +} + +blockquote { + border-left-style: solid; + padding-left: 1em; +} + +dt { + font-weight: bold; +} + +pre { + overflow: auto; + border-top-style: solid; + border-top-width: 2px; + border-left-style: solid; + border-left-width: 2px; + border-right-style: solid; + border-right-width: 1px; + border-bottom-style: solid; + border-bottom-width: 1px; + padding: 0.8em; + background-color: #222522; +} + +.footpara { + display: inline; +} + +code { + color: #78afff; + font-family: Hack,monospace; +} + +h2 { + color: #7fc500; +} +h3 { + color: #5dc0aa; +} +h4 { + color: #af9fff; +} +h5 { + color: #7fcfdf; +} +h6 { + color: #cfc04f; +} + +/* +Generated with `M-x org-html-htmlize-generate-css` after loading the +`ef-bio` theme by Protesilaos Stavrou. +*/ +.org-builtin { + /* font-lock-builtin-face */ + color: #3fb83f; + font-weight: bold; +} +.org-comment { + /* font-lock-comment-face */ + color: #b7a07f; + font-style: italic; +} +.org-comment-delimiter { + /* font-lock-comment-delimiter-face */ + color: #b7a07f; + font-style: italic; +} +.org-constant { + /* font-lock-constant-face */ + color: #37aff6; +} +.org-doc { + /* font-lock-doc-face */ + color: #7fc07f; + font-style: italic; +} +.org-doc-markup { + /* font-lock-doc-markup-face */ + color: #37aff6; +} +.org-escape { + /* font-lock-escape-face */ + color: #cfc04f; +} +.org-function-call { + /* font-lock-function-call-face */ + color: #7fc500; +} +.org-function-name { + /* font-lock-function-name-face */ + color: #7fc500; +} +.org-preprocessor { + /* font-lock-preprocessor-face */ + color: #3fb83f; +} +.org-property-name { + /* font-lock-property-name-face */ + color: #78afff; +} +.org-property-use { + /* font-lock-property-use-face */ + color: #78afff; +} +.org-rainbow-delimiters-depth-1 { + /* rainbow-delimiters-depth-1-face */ + color: #00c089; +} +.org-rainbow-delimiters-depth-2 { + /* rainbow-delimiters-depth-2-face */ + color: #7fc500; +} +.org-rainbow-delimiters-depth-3 { + /* rainbow-delimiters-depth-3-face */ + color: #5dc0aa; +} +.org-rainbow-delimiters-depth-4 { + /* rainbow-delimiters-depth-4-face */ + color: #af9fff; +} +.org-rainbow-delimiters-depth-5 { + /* rainbow-delimiters-depth-5-face */ + color: #7fcfdf; +} +.org-rainbow-delimiters-depth-6 { + /* rainbow-delimiters-depth-6-face */ + color: #cfc04f; +} +.org-rainbow-delimiters-depth-7 { + /* rainbow-delimiters-depth-7-face */ + color: #37aff6; +} +.org-rainbow-delimiters-depth-8 { + /* rainbow-delimiters-depth-8-face */ + color: #6fc5ef; +} +.org-rainbow-delimiters-depth-9 { + /* rainbow-delimiters-depth-9-face */ + color: #d38faf; +} +.org-rainbow-delimiters-mismatched { + /* rainbow-delimiters-mismatched-face */ + color: #ffffff; + background-color: #bd1f30; +} +.org-string { + /* font-lock-string-face */ + color: #af9fff; +} +.org-type { + /* font-lock-type-face */ + color: #7fcfdf; +} +.org-variable-name { + /* font-lock-variable-name-face */ + color: #78afff; +} +.org-variable-use { + /* font-lock-variable-use-face */ + color: #78afff; +} +.org-warning-1 { + /* font-lock-warning-face */ + color: #cfc04f; +} +.org-negation-char { + /* font-lock-negation-char-face */ + font-weight: bold; +} +.org-regexp { + /* font-lock-regexp-face */ + color: #af9fff; +} +.org-regexp-grouping-backslash { + /* font-lock-regexp-grouping-backslash */ + color: #cfc04f; +} +.org-regexp-grouping-construct { + /* font-lock-regexp-grouping-construct */ + color: #3fb83f; +} + +.timestamp { + color: #5dc0aa; +} diff --git a/assets/style.css~ b/assets/style.css~ new file mode 100644 index 0000000..d0f5a81 --- /dev/null +++ b/assets/style.css~ @@ -0,0 +1,231 @@ +body { + color: #cfdfd5; + background-color: #111111; + margin-left: auto; + margin-right: auto; + width: 90%; + max-width: 90ch; + /* font-size: 1.1em; */ + font-family: "Helvetica Neue", sans-serif; +} + +a:link { + color: #00c089; +} + +a:visited { + color: #5dc0aa; +} + +time { + color: #9ac8e0; +} + +.home-link { + float: left; +} + +.other-links { + float: right; +} + +footer { + font-size: smaller; + text-align: center; +} + +.icon-links { + height: 40px; + text-decoration: none; +} + +blockquote { + border-left-style: solid; + padding-left: 1em; +} + +dt { + font-weight: bold; +} + +pre { + overflow: auto; + border-top-style: solid; + border-top-width: 2px; + border-left-style: solid; + border-left-width: 2px; + border-right-style: solid; + border-right-width: 1px; + border-bottom-style: solid; + border-bottom-width: 1px; + padding: 0.8em; + background-color: #222522; +} + +.footpara { + display: inline; +} + +code { + color: #78afff; + font-family: Hack,monospace; +} + +h1 { + color: #00c089; + font-weight: bold; +} +h2 { + color: #7fc500; + font-weight: bold; +} +h3 { + color: #5dc0aa; + font-weight: bold; +} +h4 { + color: #af9fff; + font-weight: bold; +} +h5 { + color: #7fcfdf; + font-weight: bold; +} +h6 { + color: #cfc04f; + font-weight: bold; +} + +/* +Generated with `M-x org-html-htmlize-generate-css` after loading the +`ef-bio` theme by Protesilaos Stavrou. +*/ +.org-builtin { + /* font-lock-builtin-face */ + color: #3fb83f; + font-weight: bold; +} +.org-comment { + /* font-lock-comment-face */ + color: #b7a07f; + font-style: italic; +} +.org-comment-delimiter { + /* font-lock-comment-delimiter-face */ + color: #b7a07f; + font-style: italic; +} +.org-constant { + /* font-lock-constant-face */ + color: #37aff6; +} +.org-doc { + /* font-lock-doc-face */ + color: #7fc07f; + font-style: italic; +} +.org-doc-markup { + /* font-lock-doc-markup-face */ + color: #37aff6; +} +.org-escape { + /* font-lock-escape-face */ + color: #cfc04f; +} +.org-function-call { + /* font-lock-function-call-face */ + color: #7fc500; +} +.org-function-name { + /* font-lock-function-name-face */ + color: #7fc500; +} +.org-preprocessor { + /* font-lock-preprocessor-face */ + color: #3fb83f; +} +.org-property-name { + /* font-lock-property-name-face */ + color: #78afff; +} +.org-property-use { + /* font-lock-property-use-face */ + color: #78afff; +} +.org-rainbow-delimiters-depth-1 { + /* rainbow-delimiters-depth-1-face */ + color: #00c089; +} +.org-rainbow-delimiters-depth-2 { + /* rainbow-delimiters-depth-2-face */ + color: #7fc500; +} +.org-rainbow-delimiters-depth-3 { + /* rainbow-delimiters-depth-3-face */ + color: #5dc0aa; +} +.org-rainbow-delimiters-depth-4 { + /* rainbow-delimiters-depth-4-face */ + color: #af9fff; +} +.org-rainbow-delimiters-depth-5 { + /* rainbow-delimiters-depth-5-face */ + color: #7fcfdf; +} +.org-rainbow-delimiters-depth-6 { + /* rainbow-delimiters-depth-6-face */ + color: #cfc04f; +} +.org-rainbow-delimiters-depth-7 { + /* rainbow-delimiters-depth-7-face */ + color: #37aff6; +} +.org-rainbow-delimiters-depth-8 { + /* rainbow-delimiters-depth-8-face */ + color: #6fc5ef; +} +.org-rainbow-delimiters-depth-9 { + /* rainbow-delimiters-depth-9-face */ + color: #d38faf; +} +.org-rainbow-delimiters-mismatched { + /* rainbow-delimiters-mismatched-face */ + color: #ffffff; + background-color: #bd1f30; +} +.org-string { + /* font-lock-string-face */ + color: #af9fff; +} +.org-type { + /* font-lock-type-face */ + color: #7fcfdf; +} +.org-variable-name { + /* font-lock-variable-name-face */ + color: #78afff; +} +.org-variable-use { + /* font-lock-variable-use-face */ + color: #78afff; +} +.org-warning-1 { + /* font-lock-warning-face */ + color: #cfc04f; +} +.org-negation-char { + /* font-lock-negation-char-face */ + font-weight: bold; +} +.org-regexp { + /* font-lock-regexp-face */ + color: #af9fff; +} +.org-regexp-grouping-backslash { + /* font-lock-regexp-grouping-backslash */ + color: #cfc04f; +} +.org-regexp-grouping-construct { + /* font-lock-regexp-grouping-construct */ + color: #3fb83f; +} diff --git a/dotfiles b/dotfiles index 9dfe58a..58ef067 160000 --- a/dotfiles +++ b/dotfiles @@ -1 +1 @@ -Subproject commit 9dfe58a7f79a90d8398c745bb6c57fe0df54e909 +Subproject commit 58ef0679439d4a756235774c5357e97859469911 diff --git a/org/favicon.ico b/org/favicon.ico deleted file mode 100644 index 5143802..0000000 Binary files a/org/favicon.ico and /dev/null differ diff --git a/org/html_postamble.html b/org/html_postamble.html deleted file mode 100644 index 5c872a7..0000000 --- a/org/html_postamble.html +++ /dev/null @@ -1,35 +0,0 @@ - diff --git a/org/index.org b/org/index.org index f12d2f3..f02c566 100644 --- a/org/index.org +++ b/org/index.org @@ -18,6 +18,14 @@ Welcome to [[./index.org][my website]], the one true source of reliable curated Stuff = 'free software'. #+end_src +* Recent Posts +:PROPERTIES: +:CUSTOM_ID: recent-posts +:END: +#+BEGIN: posts :dir "/Users/eshelyaron/checkouts/eshelyaron.com/org/posts" :limit 5 +#+END: + + * Projects :PROPERTIES: :CUSTOM_ID: projects @@ -28,10 +36,10 @@ Welcome to [[./index.org][my website]], the one true source of reliable curated :CUSTOM_ID: sweep :END: -[[https://git.sr.ht/~eshel/sweep][sweep]] is an Emacs module which uses the C interfaces of both +[[https://git.sr.ht/~eshel/sweep][Sweep]] is an Emacs module which uses the C interfaces of both SWI-Prolog and Emacs to bring the two together into one address space. -For more details, see [[file:sweep.org][the =sweep= manual]]. +For more details, see [[file:sweep.org][the Sweep manual]]. ** Sourcehut GraphQL client for SWI-Prolog :PROPERTIES: @@ -51,24 +59,6 @@ tag of a git repository from within SWI-Prolog: sourcehut_git_upload_artifact(RepoId, "v0.1.2", "/tmp/foo/baz.txt", Artifact, []). #+end_src -** [[https://git.sr.ht/~eshel/dotfiles][GNU Emacs literate configuration]] -:PROPERTIES: -:CUSTOM_ID: emacsconf -:END: - -My personal configuration for GNU Emacs, written in as a [[https://en.wikipedia.org/wiki/Literate_programming][Literate -Program]] with =Org-mode= and =Babel=. An online version is also -published as [[file:esy.org][an HTML webpage on this website]]. - -** [[https://github.com/eshelyaron/debug_adapter][SWI-Prolog Debug Adapter Protocol Server]] -:PROPERTIES: -:CUSTOM_ID: debug-adapter -:END: - -An implementation of the [[https://microsoft.github.io/debug-adapter-protocol/][Debug Adapter Protocol]] (DAP) for [[https://www.swi-prolog.org][SWI-Prolog]], -facilitating an advanced debugging experience for Prolog from the -comfort of GNU Emacs (and other editors, as well). - ** [[https://git.sr.ht/~eshel/eshellisp][eshellisp]] :PROPERTIES: :CUSTOM_ID: eshellisp diff --git a/org/modus-operandi-theme.css b/org/modus-operandi-theme.css deleted file mode 100644 index 0f3ab0a..0000000 --- a/org/modus-operandi-theme.css +++ /dev/null @@ -1,2257 +0,0 @@ -/* Modus Operandi CSS Theme - * - * Modus Operandi is an accessible Emacs theme created by Protesilaos Stavrou. - * It is released under the GNU GPLv3 and its source code can be retrieved - * from: https://gitlab.com/protesilaos/modus-themes - * - * CSS created using the Emacs `org-html-htmlize-generate-css' - * function with some manual tweaks - */ - -.org-bold { - /* bold */ - font-weight: bold; -} -.org-bold-italic { - /* bold-italic */ - font-weight: bold; - font-style: italic; -} -.org-bookmark-menu-bookmark { - /* bookmark-menu-bookmark */ - font-weight: bold; -} -.org-bookmark-menu-heading { - /* bookmark-menu-heading */ - color: #8f0075; -} -.org-border { -} -.org-browse-url-button { - /* browse-url-button */ - color: #0000bb; - text-decoration: underline; -} -.org-buffer-menu-buffer { - /* buffer-menu-buffer */ - font-weight: bold; -} -.org-builtin { - /* font-lock-builtin-face */ - color: #f78fe7; -} -.org-button { - /* button */ - color: #0000bb; - text-decoration: underline; -} -.org-c-annotation { - /* c-annotation-face */ - color: #0000bb; -} -.org-c-nonbreakable-space { - /* c-nonbreakable-space-face */ - background-color: #703700; -} -.org-calc-nonselected { - /* calc-nonselected-face */ - color: #505050; - font-style: italic; -} -.org-calc-selected { - /* calc-selected-face */ - font-weight: bold; -} -.org-calendar-month-header { - /* calendar-month-header */ - color: #000000; - font-weight: bold; -} -.org-calendar-today { - /* calendar-today */ - text-decoration: underline; -} -.org-calendar-weekday-header { - /* calendar-weekday-header */ - color: #282828; -} -.org-calendar-weekend-header { - /* calendar-weekend-header */ - color: #505050; -} -.org-clang-include-fixer-highlight { - /* clang-include-fixer-highlight */ - background-color: #00ff00; -} -.org-comint-highlight-input { - /* comint-highlight-input */ - font-weight: bold; -} -.org-comint-highlight-prompt { - /* comint-highlight-prompt */ - color: #00538b; -} -.org-comment { - /* font-lock-comment-face */ - color: #a8a8a8; -} -.org-comment-delimiter { - /* font-lock-comment-delimiter-face */ - color: #a8a8a8; -} -.org-company-echo { -} -.org-company-echo-common { - /* company-echo-common */ - color: #5317ac; -} -.org-company-preview { - /* company-preview */ - color: #282828; - background-color: #f8f8f8; -} -.org-company-preview-common { - /* company-preview-common */ - color: #223fbf; -} -.org-company-preview-search { - /* company-preview-search */ - color: #61284f; - background-color: #f8ddea; -} -.org-company-scrollbar-bg { - /* company-scrollbar-bg */ - background-color: #e0e0e0; -} -.org-company-scrollbar-fg { - /* company-scrollbar-fg */ - background-color: #191919; -} -.org-company-template-field { - /* company-template-field */ - color: #000000; - background-color: #d5baff; -} -.org-company-tooltip { - /* company-tooltip */ - color: #505050; - background-color: #f0f0f0; -} -.org-company-tooltip-annotation { - /* company-tooltip-annotation */ - color: #093060; -} -.org-company-tooltip-annotation-selection { - /* company-tooltip-annotation-selection */ - color: #000000; - font-weight: bold; -} -.org-company-tooltip-common { - /* company-tooltip-common */ - color: #223fbf; - font-weight: bold; -} -.org-company-tooltip-common-selection { - /* company-tooltip-common-selection */ - color: #000000; -} -.org-company-tooltip-mouse { - /* company-tooltip-mouse */ - color: #000000; - background-color: #6aaeff; -} -.org-compilation-column-number { - /* compilation-column-number */ - color: #5317ac; -} -.org-compilation-error { - /* compilation-error */ - color: #a60000; -} -.org-compilation-info { - /* compilation-info */ - color: #093060; -} -.org-compilation-line-number { - /* compilation-line-number */ - color: #5d3026; -} -.org-compilation-mode-line-exit { - /* compilation-mode-line-exit */ - color: #0033c0; -} -.org-compilation-mode-line-fail { - /* compilation-mode-line-fail */ - color: #930000; -} -.org-compilation-mode-line-run { - /* compilation-mode-line-run */ - color: #6320a0; -} -.org-compilation-warning { - /* compilation-warning */ - color: #813e00; -} -.org-completions-annotations { - /* completions-annotations */ - color: #093060; -} -.org-completions-common-part { - /* completions-common-part */ - color: #005a5f; -} -.org-completions-first-difference { - /* completions-first-difference */ - color: #0000bb; - font-weight: bold; -} -.org-constant { - /* font-lock-constant-face */ - color: #00bcff; -} -.org-css-property { - /* css-property */ - color: #5317ac; -} -.org-css-selector { - /* css-selector */ - color: #721045; -} -.org-cua-global-mark { - /* cua-global-mark */ - color: #000000; - background-color: #ffff00; -} -.org-cua-rectangle { - /* cua-rectangle */ - color: #ffffff; - background-color: #b03060; -} -.org-cua-rectangle-noselect { - /* cua-rectangle-noselect */ - color: #ffffff; - background-color: #696969; -} -.org-cursor { - /* cursor */ - background-color: #000000; -} -.org-custom-button { - /* custom-button */ - color: #000000; - background-color: #e0e0e0; -} -.org-custom-button-mouse { - /* custom-button-mouse */ - color: #191919; - background-color: #e0e0e0; -} -.org-custom-button-pressed { - /* custom-button-pressed */ - color: #000000; - background-color: #e0e0e0; -} -.org-custom-button-pressed-unraised { - /* custom-button-pressed-unraised */ - color: #8b008b; - text-decoration: underline; -} -.org-custom-button-unraised { - /* custom-button-unraised */ - text-decoration: underline; -} -.org-custom-changed { - /* custom-changed */ - color: #282828; - background-color: #c0efff; -} -.org-custom-comment { - /* custom-comment */ - color: #505050; -} -.org-custom-comment-tag { - /* custom-comment-tag */ - color: #863927; - background-color: #f0f0f0; -} -.org-custom-documentation { -} -.org-custom-face-tag { - /* custom-face-tag */ - color: #1111ee; - font-weight: bold; -} -.org-custom-group-subtitle { - /* custom-group-subtitle */ - font-weight: bold; -} -.org-custom-group-tag { - /* custom-group-tag */ - color: #006800; - font-weight: bold; -} -.org-custom-group-tag-1 { - /* custom-group-tag-1 */ - color: #5d3026; - background-color: #f0e0d4; -} -.org-custom-link { - /* custom-link */ - color: #0000bb; - text-decoration: underline; -} -.org-custom-modified { - /* custom-modified */ - color: #282828; - background-color: #c0efff; -} -.org-custom-rogue { - /* custom-rogue */ - color: #770077; - background-color: #ffccff; -} -.org-custom-saved { - /* custom-saved */ - text-decoration: underline; -} -.org-custom-set { - /* custom-set */ - color: #223fbf; -} -.org-custom-state { - /* custom-state */ - color: #005a5f; -} -.org-custom-themed { - /* custom-themed */ - color: #282828; - background-color: #b5d0ff; -} -.org-custom-variable-button { - /* custom-variable-button */ - font-weight: bold; - text-decoration: underline; -} -.org-custom-variable-obsolete { - /* custom-variable-obsolete */ - color: #0000ff; -} -.org-custom-variable-tag { - /* custom-variable-tag */ - color: #00538b; - font-weight: bold; -} -.org-custom-visibility { - /* custom-visibility */ - color: #0000bb; - font-size: 80%; - text-decoration: underline; -} -.org-diary { - /* diary */ - color: #005a5f; -} -.org-diff-added { - /* diff-added */ - color: #002c00; - background-color: #bbeabb; -} -.org-diff-changed { - /* diff-changed */ - color: #392900; - background-color: #ecdfbf; -} -.org-diff-context { - /* diff-context */ - color: #56576d; -} -.org-diff-file-header { - /* diff-file-header */ - color: #0030a6; - font-weight: bold; -} -.org-diff-function { - /* diff-function */ - color: #093060; -} -.org-diff-header { - /* diff-header */ - color: #201f55; -} -.org-diff-hunk-header { - /* diff-hunk-header */ - color: #043355; - background-color: #b7c2dd; -} -.org-diff-index { - /* diff-index */ - color: #223fbf; - font-weight: bold; -} -.org-diff-indicator-added { - /* diff-indicator-added */ - color: #002c00; - background-color: #bbeabb; -} -.org-diff-indicator-changed { - /* diff-indicator-changed */ - color: #392900; - background-color: #ecdfbf; -} -.org-diff-indicator-removed { - /* diff-indicator-removed */ - color: #4a0000; - background-color: #efcbcf; -} -.org-diff-refine-added { - /* diff-refine-added */ - color: #002a00; - background-color: #94cf94; -} -.org-diff-refine-changed { - /* diff-refine-changed */ - color: #302010; - background-color: #cccf8f; -} -.org-diff-refine-removed { - /* diff-refine-removed */ - color: #400000; - background-color: #daa2b0; -} -.org-diff-removed { - /* diff-removed */ - color: #4a0000; - background-color: #efcbcf; -} -.org-dired-directory { - /* dired-directory */ - color: #0030a6; -} -.org-dired-flagged { - /* dired-flagged */ - color: #840040; - background-color: #ffccbb; - font-weight: bold; -} -.org-dired-header { - /* dired-header */ - color: #000000; - font-weight: bold; -} -.org-dired-ignored { - /* dired-ignored */ - color: #505050; -} -.org-dired-mark { - /* dired-mark */ - color: #223fbf; - font-weight: bold; -} -.org-dired-marked { - /* dired-marked */ - color: #005040; - background-color: #a0f0cf; - font-weight: bold; -} -.org-dired-perm-write { - /* dired-perm-write */ - color: #5d3026; -} -.org-dired-set-id { - /* dired-set-id */ - color: #703700; -} -.org-dired-special { - /* dired-special */ - color: #00538b; -} -.org-dired-symlink { - /* dired-symlink */ - color: #30517f; - text-decoration: underline; -} -.org-dired-warning { - /* dired-warning */ - color: #813e00; - font-weight: bold; -} -.org-doc { - /* font-lock-doc-face */ - color: #b0d6f5; -} -.org-eldoc-highlight-function-argument { - /* eldoc-highlight-function-argument */ - color: #0000bb; - font-weight: bold; -} -.org-epa-field-body { - /* epa-field-body */ - color: #000000; -} -.org-epa-field-name { - /* epa-field-name */ - color: #282828; - font-weight: bold; -} -.org-epa-mark { - /* epa-mark */ - color: #721045; - font-weight: bold; -} -.org-epa-string { - /* epa-string */ - color: #223fbf; -} -.org-epa-validity-disabled { - /* epa-validity-disabled */ - color: #780000; - background-color: #ffcccc; -} -.org-epa-validity-high { - /* epa-validity-high */ - color: #145c33; - font-weight: bold; -} -.org-epa-validity-low { - /* epa-validity-low */ - color: #505050; -} -.org-epa-validity-medium { - /* epa-validity-medium */ - color: #315b00; -} -.org-error { - /* error */ - color: #a60000; - font-weight: bold; -} -.org-escape-glyph { - /* escape-glyph */ - color: #8b1030; -} -.org-eww-form-checkbox { - /* eww-form-checkbox */ - color: #000000; - background-color: #efedef; -} -.org-eww-form-file { - /* eww-form-file */ - color: #000000; - background-color: #e0e0e0; -} -.org-eww-form-select { - /* eww-form-select */ - color: #000000; - background-color: #efedef; -} -.org-eww-form-submit { - /* eww-form-submit */ - color: #000000; - background-color: #e0e0e0; -} -.org-eww-form-text { - /* eww-form-text */ - color: #191919; - background-color: #e0e0e0; -} -.org-eww-form-textarea { - /* eww-form-textarea */ - color: #000000; - background-color: #f0f0f0; -} -.org-eww-invalid-certificate { - /* eww-invalid-certificate */ - color: #930000; -} -.org-eww-valid-certificate { - /* eww-valid-certificate */ - color: #005300; -} -.org-ffap { - /* ffap */ - color: #282828; - background-color: #b5d0ff; -} -.org-file-name-shadow { - /* file-name-shadow */ - color: #56576d; -} -.org-fill-column-indicator { - /* fill-column-indicator */ - color: #505050; -} -.org-fixed-pitch { -} -.org-fixed-pitch-serif { -} -.org-flymake-error { - /* flymake-error */ - text-decoration: underline; -} -.org-flymake-note { - /* flymake-note */ - text-decoration: underline; -} -.org-flymake-warning { - /* flymake-warning */ - text-decoration: underline; -} -.org-flyspell-duplicate { - /* flyspell-duplicate */ - text-decoration: underline; -} -.org-flyspell-incorrect { - /* flyspell-incorrect */ - text-decoration: underline; -} -.org-fringe { - /* fringe */ - color: #000000; -} -.org-function-name { - /* font-lock-function-name-face */ - color: #f08be0; -} - -.org-elixir-atom { - color: #f78fe7; -} - -.org-rainbow-delimiters-depth-2 { - color: #ff62d4; -} - -.org-rainbow-delimiters-depth-3 { - color: #3fdfd0; -} - -.org-rainbow-delimiters-depth-4 { - color: #fba849; -} - -.org-rainbow-delimiters-depth-5 { - color: #9f80ff; -} - -.org-rainbow-delimiters-depth-6 { - color: #4fe42f; -} - -.org-glyphless-char { - /* glyphless-char */ - font-size: 60%; -} -.org-gnus-button { - /* gnus-button */ - color: #0000bb; - text-decoration: underline; -} -.org-gnus-emphasis-bold { - /* gnus-emphasis-bold */ - font-weight: bold; -} -.org-gnus-emphasis-bold-italic { - /* gnus-emphasis-bold-italic */ - font-weight: bold; - font-style: italic; -} -.org-gnus-emphasis-highlight-words { - /* gnus-emphasis-highlight-words */ - color: #604000; - background-color: #fff29a; -} -.org-gnus-emphasis-italic { - /* gnus-emphasis-italic */ - font-style: italic; -} -.org-gnus-emphasis-strikethru { - /* gnus-emphasis-strikethru */ - text-decoration: line-through; -} -.org-gnus-emphasis-underline { - /* gnus-emphasis-underline */ - text-decoration: underline; -} -.org-gnus-emphasis-underline-bold { - /* gnus-emphasis-underline-bold */ - font-weight: bold; - text-decoration: underline; -} -.org-gnus-emphasis-underline-bold-italic { - /* gnus-emphasis-underline-bold-italic */ - font-weight: bold; - font-style: italic; - text-decoration: underline; -} -.org-gnus-emphasis-underline-italic { - /* gnus-emphasis-underline-italic */ - font-style: italic; - text-decoration: underline; -} -.org-gnus-group-mail-1 { - /* gnus-group-mail-1 */ - color: #8f0075; - font-weight: bold; -} -.org-gnus-group-mail-1-empty { - /* gnus-group-mail-1-empty */ - color: #8f0075; -} -.org-gnus-group-mail-2 { - /* gnus-group-mail-2 */ - color: #721045; - font-weight: bold; -} -.org-gnus-group-mail-2-empty { - /* gnus-group-mail-2-empty */ - color: #721045; -} -.org-gnus-group-mail-3 { - /* gnus-group-mail-3 */ - color: #5317ac; - font-weight: bold; -} -.org-gnus-group-mail-3-empty { - /* gnus-group-mail-3-empty */ - color: #5317ac; -} -.org-gnus-group-mail-low { - /* gnus-group-mail-low */ - color: #541f4f; - font-weight: bold; -} -.org-gnus-group-mail-low-empty { - /* gnus-group-mail-low-empty */ - color: #541f4f; -} -.org-gnus-group-news-1 { - /* gnus-group-news-1 */ - color: #005e00; - font-weight: bold; -} -.org-gnus-group-news-1-empty { - /* gnus-group-news-1-empty */ - color: #005e00; -} -.org-gnus-group-news-2 { - /* gnus-group-news-2 */ - color: #00538b; - font-weight: bold; -} -.org-gnus-group-news-2-empty { - /* gnus-group-news-2-empty */ - color: #00538b; -} -.org-gnus-group-news-3 { - /* gnus-group-news-3 */ - color: #3f3000; - font-weight: bold; -} -.org-gnus-group-news-3-empty { - /* gnus-group-news-3-empty */ - color: #3f3000; -} -.org-gnus-group-news-4 { - /* gnus-group-news-4 */ - color: #0f3360; - font-weight: bold; -} -.org-gnus-group-news-4-empty { - /* gnus-group-news-4-empty */ - color: #0f3360; -} -.org-gnus-group-news-5 { - /* gnus-group-news-5 */ - color: #5f0000; - font-weight: bold; -} -.org-gnus-group-news-5-empty { - /* gnus-group-news-5-empty */ - color: #5f0000; -} -.org-gnus-group-news-6 { - /* gnus-group-news-6 */ - color: #505050; - font-weight: bold; -} -.org-gnus-group-news-6-empty { - /* gnus-group-news-6-empty */ - color: #505050; -} -.org-gnus-group-news-low { - /* gnus-group-news-low */ - color: #004000; - font-weight: bold; -} -.org-gnus-group-news-low-empty { - /* gnus-group-news-low-empty */ - color: #004000; -} -.org-gnus-header-content { - /* gnus-header-content */ - color: #61284f; -} -.org-gnus-header-from { - /* gnus-header-from */ - color: #30517f; - font-weight: bold; -} -.org-gnus-header-name { - /* gnus-header-name */ - color: #005a5f; -} -.org-gnus-header-newsgroups { - /* gnus-header-newsgroups */ - color: #223fbf; - font-weight: bold; -} -.org-gnus-header-subject { - /* gnus-header-subject */ - color: #5317ac; - font-weight: bold; -} -.org-gnus-signature { - /* gnus-signature */ - color: #093060; - font-style: italic; -} -.org-gnus-splash { - /* gnus-splash */ - color: #505050; -} -.org-gnus-summary-cancelled { - /* gnus-summary-cancelled */ - color: #782900; - background-color: #f5d88f; - font-weight: bold; -} -.org-gnus-summary-high-ancient { - /* gnus-summary-high-ancient */ - color: #505050; - font-weight: bold; -} -.org-gnus-summary-high-read { - /* gnus-summary-high-read */ - color: #093060; - font-weight: bold; -} -.org-gnus-summary-high-ticked { - /* gnus-summary-high-ticked */ - color: #a0132f; - font-weight: bold; -} -.org-gnus-summary-high-undownloaded { - /* gnus-summary-high-undownloaded */ - color: #813e00; - font-weight: bold; -} -.org-gnus-summary-high-unread { - /* gnus-summary-high-unread */ - color: #000000; - font-weight: bold; -} -.org-gnus-summary-low-ancient { - /* gnus-summary-low-ancient */ - color: #505050; - font-style: italic; -} -.org-gnus-summary-low-read { - /* gnus-summary-low-read */ - color: #093060; - font-style: italic; -} -.org-gnus-summary-low-ticked { - /* gnus-summary-low-ticked */ - color: #780000; - font-style: italic; -} -.org-gnus-summary-low-undownloaded { - /* gnus-summary-low-undownloaded */ - color: #604000; - font-style: italic; -} -.org-gnus-summary-low-unread { - /* gnus-summary-low-unread */ - color: #093060; - font-weight: bold; -} -.org-gnus-summary-normal-ancient { - /* gnus-summary-normal-ancient */ - color: #61284f; -} -.org-gnus-summary-normal-read { - /* gnus-summary-normal-read */ - color: #093060; -} -.org-gnus-summary-normal-ticked { - /* gnus-summary-normal-ticked */ - color: #a0132f; -} -.org-gnus-summary-normal-undownloaded { - /* gnus-summary-normal-undownloaded */ - color: #813e00; -} -.org-gnus-summary-normal-unread { - /* gnus-summary-normal-unread */ - color: #000000; -} -.org-gnus-summary-selected { - /* gnus-summary-selected */ - color: #282828; - background-color: #b5d0ff; -} -.org-go-coverage-0 { - /* go-coverage-0 */ - color: #c00000; -} -.org-go-coverage-1 { - /* go-coverage-1 */ - color: #808080; -} -.org-go-coverage-10 { - /* go-coverage-10 */ - color: #14ec9b; -} -.org-go-coverage-2 { - /* go-coverage-2 */ - color: #748c83; -} -.org-go-coverage-3 { - /* go-coverage-3 */ - color: #689886; -} -.org-go-coverage-4 { - /* go-coverage-4 */ - color: #5ca489; -} -.org-go-coverage-5 { - /* go-coverage-5 */ - color: #50b08c; -} -.org-go-coverage-6 { - /* go-coverage-6 */ - color: #44bc8f; -} -.org-go-coverage-7 { - /* go-coverage-7 */ - color: #38c892; -} -.org-go-coverage-8 { - /* go-coverage-8 */ - color: #2cd495; -} -.org-go-coverage-9 { - /* go-coverage-9 */ - color: #20e098; -} -.org-go-coverage-covered { - /* go-coverage-covered */ - color: #2cd495; -} -.org-go-coverage-untracked { - /* go-coverage-untracked */ - color: #505050; -} -.org-go-dot-mod-module-name { - /* go-dot-mod-module-name */ - color: #000000; - background-color: #ffffff; -} -.org-go-dot-mod-module-semver { - /* go-dot-mod-module-semver */ - color: #000000; - background-color: #ffffff; -} -.org-go-dot-mod-module-version { - /* go-dot-mod-module-version */ - color: #000000; - background-color: #ffffff; -} -.org-header-line { - /* header-line */ - color: #2a2a2a; - background-color: #e5e5e5; -} -.org-header-line-highlight { - /* header-line-highlight */ - color: #e0e0e0; - background-color: #0033c0; -} -.org-help-argument-name { - /* help-argument-name */ - font-style: italic; -} -.org-highlight { - /* highlight */ - color: #282828; - background-color: #b5d0ff; -} -.org-holiday { - /* holiday */ - color: #8f0075; -} -.org-homoglyph { - /* homoglyph */ - color: #8b1030; -} -.org-ibuffer-locked-buffer { - /* ibuffer-locked-buffer */ - color: #863927; -} -.org-info-header-node { - /* info-header-node */ - color: #505050; - font-weight: bold; -} -.org-info-header-xref { - /* info-header-xref */ - color: #0033c0; -} -.org-info-index-match { - /* info-index-match */ - color: #61284f; - background-color: #f8ddea; -} -.org-info-menu-star { - /* info-menu-star */ - color: #a60000; -} -.org-info-node { - /* info-node */ - font-weight: bold; -} -.org-info-quoted { - /* Info-quoted */ - color: #721045; -} -.org-info-xref { - /* info-xref */ - color: #0000bb; - text-decoration: underline; -} -.org-internal-border { -} -.org-isearch-fail { - /* isearch-fail */ - color: #780000; - background-color: #ffcccc; -} -.org-italic { - /* italic */ - font-style: italic; -} -.org-keyword { - /* font-lock-keyword-face */ - color: #b6a0ff; -} -.org-lazy-highlight { - /* lazy-highlight */ - color: #004850; - background-color: #8eecf4; -} -.org-line-number { - /* line-number */ - color: #505050; - background-color: #f8f8f8; -} -.org-line-number-current-line { - /* line-number-current-line */ - color: #191919; - background-color: #e0e0e0; - font-weight: bold; -} -.org-line-number-major-tick { - /* line-number-major-tick */ - color: #3f3000; - background-color: #fff3da; -} -.org-line-number-minor-tick { - /* line-number-minor-tick */ - color: #0f3360; - background-color: #ebf6fa; -} -.org-link { - /* link */ - color: #0000bb; - text-decoration: underline; -} -.org-link-visited { - /* link-visited */ - color: #5317ac; - text-decoration: underline; -} -.org-match { - /* match */ - color: #61284f; - background-color: #f8ddea; -} -.org-menu { -} -.org-message-cited-text-1 { - /* message-cited-text-1 */ - color: #223fbf; -} -.org-message-cited-text-2 { - /* message-cited-text-2 */ - color: #972500; -} -.org-message-cited-text-3 { - /* message-cited-text-3 */ - color: #315b00; -} -.org-message-cited-text-4 { - /* message-cited-text-4 */ - color: #8f0075; -} -.org-message-header-cc { - /* message-header-cc */ - color: #223fbf; -} -.org-message-header-name { - /* message-header-name */ - color: #145c33; -} -.org-message-header-newsgroups { - /* message-header-newsgroups */ - color: #0030a6; - font-weight: bold; -} -.org-message-header-other { - /* message-header-other */ - color: #005a5f; - font-weight: bold; -} -.org-message-header-subject { - /* message-header-subject */ - color: #5317ac; - font-weight: bold; -} -.org-message-header-to { - /* message-header-to */ - color: #8f0075; - font-weight: bold; -} -.org-message-header-xheader { - /* message-header-xheader */ - color: #0000bb; -} -.org-message-mml { - /* message-mml */ - color: #315b00; -} -.org-message-separator { - /* message-separator */ - color: #5d3026; - background-color: #e0e0e0; -} -.org-minibuffer-prompt { - /* minibuffer-prompt */ - color: #005a5f; -} -.org-mm-command-output { - /* mm-command-output */ - color: #a0132f; -} -.org-mm-uu-extract { - /* mm-uu-extract */ - color: #184034; - background-color: #f8f8f8; -} -.org-mode-line { - /* mode-line */ - color: #191919; - background-color: #e0e0e0; -} -.org-mode-line-buffer-id { - /* mode-line-buffer-id */ - font-weight: bold; -} -.org-mode-line-emphasis { - /* mode-line-emphasis */ - color: #0033c0; - font-weight: bold; -} -.org-mode-line-highlight { - /* mode-line-highlight */ - color: #e0e0e0; - background-color: #0033c0; -} -.org-mode-line-inactive { - /* mode-line-inactive */ - color: #424242; - background-color: #efedef; -} -.org-modus-theme-active-blue { - /* modus-theme-active-blue */ - color: #e0e0e0; - background-color: #0033c0; -} -.org-modus-theme-active-cyan { - /* modus-theme-active-cyan */ - color: #e0e0e0; - background-color: #004882; -} -.org-modus-theme-active-green { - /* modus-theme-active-green */ - color: #e0e0e0; - background-color: #005300; -} -.org-modus-theme-active-magenta { - /* modus-theme-active-magenta */ - color: #e0e0e0; - background-color: #6320a0; -} -.org-modus-theme-active-red { - /* modus-theme-active-red */ - color: #e0e0e0; - background-color: #930000; -} -.org-modus-theme-active-yellow { - /* modus-theme-active-yellow */ - color: #e0e0e0; - background-color: #703700; -} -.org-modus-theme-diff-added { - /* modus-theme-diff-added */ - color: #004500; - background-color: #d4fad4; -} -.org-modus-theme-diff-changed { - /* modus-theme-diff-changed */ - color: #524200; - background-color: #fcefcf; -} -.org-modus-theme-diff-focus-added { - /* modus-theme-diff-focus-added */ - color: #002c00; - background-color: #bbeabb; -} -.org-modus-theme-diff-focus-changed { - /* modus-theme-diff-focus-changed */ - color: #392900; - background-color: #ecdfbf; -} -.org-modus-theme-diff-focus-removed { - /* modus-theme-diff-focus-removed */ - color: #4a0000; - background-color: #efcbcf; -} -.org-modus-theme-diff-heading { - /* modus-theme-diff-heading */ - color: #043355; - background-color: #b7c2dd; -} -.org-modus-theme-diff-refine-added { - /* modus-theme-diff-refine-added */ - color: #002a00; - background-color: #94cf94; -} -.org-modus-theme-diff-refine-changed { - /* modus-theme-diff-refine-changed */ - color: #302010; - background-color: #cccf8f; -} -.org-modus-theme-diff-refine-removed { - /* modus-theme-diff-refine-removed */ - color: #400000; - background-color: #daa2b0; -} -.org-modus-theme-diff-removed { - /* modus-theme-diff-removed */ - color: #691616; - background-color: #ffe8ef; -} -.org-modus-theme-fringe-blue { - /* modus-theme-fringe-blue */ - color: #282828; - background-color: #82afff; -} -.org-modus-theme-fringe-cyan { - /* modus-theme-fringe-cyan */ - color: #282828; - background-color: #00d6e0; -} -.org-modus-theme-fringe-green { - /* modus-theme-fringe-green */ - color: #282828; - background-color: #86cf86; -} -.org-modus-theme-fringe-magenta { - /* modus-theme-fringe-magenta */ - color: #282828; - background-color: #f0a3ff; -} -.org-modus-theme-fringe-red { - /* modus-theme-fringe-red */ - color: #282828; - background-color: #ff9a9a; -} -.org-modus-theme-fringe-yellow { - /* modus-theme-fringe-yellow */ - color: #282828; - background-color: #e0c050; -} -.org-modus-theme-header { - /* modus-theme-header */ - color: #000000; - font-weight: bold; -} -.org-modus-theme-hl-line { - /* modus-theme-hl-line */ - background-color: #f2eff3; -} -.org-modus-theme-intense-blue { - /* modus-theme-intense-blue */ - color: #000000; - background-color: #6aaeff; -} -.org-modus-theme-intense-cyan { - /* modus-theme-intense-cyan */ - color: #000000; - background-color: #42cbd4; -} -.org-modus-theme-intense-green { - /* modus-theme-intense-green */ - color: #000000; - background-color: #5ada88; -} -.org-modus-theme-intense-magenta { - /* modus-theme-intense-magenta */ - color: #000000; - background-color: #d5baff; -} -.org-modus-theme-intense-neutral { - /* modus-theme-intense-neutral */ - color: #000000; - background-color: #e0e0e0; -} -.org-modus-theme-intense-red { - /* modus-theme-intense-red */ - color: #000000; - background-color: #ff8892; -} -.org-modus-theme-intense-yellow { - /* modus-theme-intense-yellow */ - color: #000000; - background-color: #f5df23; -} -.org-modus-theme-mark-alt { - /* modus-theme-mark-alt */ - color: #782900; - background-color: #f5d88f; - font-weight: bold; -} -.org-modus-theme-mark-del { - /* modus-theme-mark-del */ - color: #840040; - background-color: #ffccbb; - font-weight: bold; -} -.org-modus-theme-mark-sel { - /* modus-theme-mark-sel */ - color: #005040; - background-color: #a0f0cf; - font-weight: bold; -} -.org-modus-theme-mark-symbol { - /* modus-theme-mark-symbol */ - color: #223fbf; - font-weight: bold; -} -.org-modus-theme-nuanced-blue { - /* modus-theme-nuanced-blue */ - background-color: #f3f3ff; -} -.org-modus-theme-nuanced-cyan { - /* modus-theme-nuanced-cyan */ - background-color: #ebf6fa; -} -.org-modus-theme-nuanced-green { - /* modus-theme-nuanced-green */ - background-color: #ecf7ed; -} -.org-modus-theme-nuanced-magenta { - /* modus-theme-nuanced-magenta */ - background-color: #fdf0ff; -} -.org-modus-theme-nuanced-red { - /* modus-theme-nuanced-red */ - background-color: #fff1f0; -} -.org-modus-theme-nuanced-yellow { - /* modus-theme-nuanced-yellow */ - background-color: #fff3da; -} -.org-modus-theme-refine-blue { - /* modus-theme-refine-blue */ - color: #002288; - background-color: #8ac7ff; -} -.org-modus-theme-refine-cyan { - /* modus-theme-refine-cyan */ - color: #004850; - background-color: #8eecf4; -} -.org-modus-theme-refine-green { - /* modus-theme-refine-green */ - color: #004c00; - background-color: #aceaac; -} -.org-modus-theme-refine-magenta { - /* modus-theme-refine-magenta */ - color: #770077; - background-color: #ffccff; -} -.org-modus-theme-refine-red { - /* modus-theme-refine-red */ - color: #780000; - background-color: #ffcccc; -} -.org-modus-theme-refine-yellow { - /* modus-theme-refine-yellow */ - color: #604000; - background-color: #fff29a; -} -.org-modus-theme-special-calm { - /* modus-theme-special-calm */ - color: #61284f; - background-color: #f8ddea; -} -.org-modus-theme-special-cold { - /* modus-theme-special-cold */ - color: #093060; - background-color: #dde3f4; -} -.org-modus-theme-special-mild { - /* modus-theme-special-mild */ - color: #184034; - background-color: #c4ede0; -} -.org-modus-theme-special-warm { - /* modus-theme-special-warm */ - color: #5d3026; - background-color: #f0e0d4; -} -.org-modus-theme-subtle-blue { - /* modus-theme-subtle-blue */ - color: #282828; - background-color: #b5d0ff; -} -.org-modus-theme-subtle-cyan { - /* modus-theme-subtle-cyan */ - color: #282828; - background-color: #c0efff; -} -.org-modus-theme-subtle-green { - /* modus-theme-subtle-green */ - color: #282828; - background-color: #aecf90; -} -.org-modus-theme-subtle-magenta { - /* modus-theme-subtle-magenta */ - color: #282828; - background-color: #f0d3ff; -} -.org-modus-theme-subtle-neutral { - /* modus-theme-subtle-neutral */ - color: #424242; - background-color: #efedef; -} -.org-modus-theme-subtle-red { - /* modus-theme-subtle-red */ - color: #282828; - background-color: #f2b0a2; -} -.org-modus-theme-subtle-yellow { - /* modus-theme-subtle-yellow */ - color: #282828; - background-color: #e4c340; -} -.org-mouse { -} -.org-mouse-drag-and-drop-region { - /* mouse-drag-and-drop-region */ - color: #000000; - background-color: #bcbcbc; -} -.org-negation-char { - /* font-lock-negation-char-face */ - color: #813e00; -} -.org-next-error { - /* next-error */ - color: #282828; - background-color: #f2b0a2; -} -.org-nobreak-hyphen { - /* nobreak-hyphen */ - color: #8b1030; -} -.org-nobreak-space { - /* nobreak-space */ - color: #8b1030; - text-decoration: underline; -} -.org-org-agenda-calendar-event { - /* org-agenda-calendar-event */ - color: #000000; -} -.org-org-agenda-calendar-sexp { - /* org-agenda-calendar-sexp */ - color: #30517f; -} -.org-org-agenda-clocking { - /* org-agenda-clocking */ - color: #093060; - background-color: #dde3f4; -} -.org-org-agenda-column-dateline { - /* org-agenda-column-dateline */ - background-color: #f0f0f0; -} -.org-org-agenda-current-time { - /* org-agenda-current-time */ - color: #282828; - background-color: #c0efff; -} -.org-org-agenda-diary { - /* org-agenda-diary */ - color: #000000; -} -.org-org-agenda-dimmed-todo { - /* org-agenda-dimmed-todo-face */ - color: #424242; - background-color: #efedef; -} -.org-org-agenda-done { - /* org-agenda-done */ - color: #315b00; -} -.org-org-agenda-filter-category { - /* org-agenda-filter-category */ - color: #6320a0; - font-weight: bold; -} -.org-org-agenda-filter-effort { - /* org-agenda-filter-effort */ - color: #6320a0; - font-weight: bold; -} -.org-org-agenda-filter-regexp { - /* org-agenda-filter-regexp */ - color: #6320a0; - font-weight: bold; -} -.org-org-agenda-filter-tags { - /* org-agenda-filter-tags */ - color: #6320a0; - font-weight: bold; -} -.org-org-agenda-restriction-lock { - /* org-agenda-restriction-lock */ - color: #282828; - background-color: #f8f8f8; -} -.org-org-agenda-structure { - /* org-agenda-structure */ - color: #184034; - background-color: #ffffff; -} -.org-org-archived { - /* org-archived */ - color: #505050; - background-color: #f0f0f0; -} -.org-org-block { - /* org-block */ - color: #000000; -} -.org-org-block-begin-line { - /* org-block-begin-line */ - color: #184034; - background-color: #f0f0f0; -} -.org-org-block-end-line { - /* org-block-end-line */ - color: #184034; - background-color: #f0f0f0; -} -.org-org-checkbox { - /* org-checkbox */ - color: #191919; - background-color: #efedef; -} -.org-org-checkbox-statistics-done { - /* org-checkbox-statistics-done */ - color: #005e00; - background-color: #f8f8f8; -} -.org-org-checkbox-statistics-todo { - /* org-checkbox-statistics-todo */ - color: #972500; - background-color: #f8f8f8; -} -.org-org-clock-overlay { - /* org-clock-overlay */ - color: #093060; - background-color: #dde3f4; -} -.org-org-code { - /* org-code */ - color: #721045; -} -.org-org-column { - /* org-column */ - background-color: #f0f0f0; -} -.org-org-column-title { - /* org-column-title */ - background-color: #f0f0f0; - font-weight: bold; - text-decoration: underline; -} -.org-org-date { - /* org-date */ - color: #005a5f; - text-decoration: underline; -} -.org-org-date-selected { - /* org-date-selected */ - color: #223fbf; - font-weight: bold; -} -.org-org-default { - /* org-default */ - color: #000000; - background-color: #ffffff; -} -.org-org-document-info { - /* org-document-info */ - color: #093060; -} -.org-org-document-info-keyword { - /* org-document-info-keyword */ - color: #505050; -} -.org-org-done { - /* org-done */ - color: #005e00; - background-color: #f8f8f8; -} -.org-org-drawer { - /* org-drawer */ - color: #00538b; - background-color: #ffffff; -} -.org-org-ellipsis { -} -.org-org-footnote { - /* org-footnote */ - color: #223fbf; - text-decoration: underline; -} -.org-org-formula { - /* org-formula */ - color: #972500; -} -.org-org-habit-alert { - /* org-habit-alert-face */ - color: #000000; - background-color: #f5df23; -} -.org-org-habit-alert-future { - /* org-habit-alert-future-face */ - color: #604000; - background-color: #fff29a; -} -.org-org-habit-clear { - /* org-habit-clear-face */ - color: #000000; - background-color: #d5baff; -} -.org-org-habit-clear-future { - /* org-habit-clear-future-face */ - color: #770077; - background-color: #ffccff; -} -.org-org-habit-overdue { - /* org-habit-overdue-face */ - color: #000000; - background-color: #ff8892; -} -.org-org-habit-overdue-future { - /* org-habit-overdue-future-face */ - color: #780000; - background-color: #ffcccc; -} -.org-org-habit-ready { - /* org-habit-ready-face */ - color: #000000; - background-color: #6aaeff; -} -.org-org-habit-ready-future { - /* org-habit-ready-future-face */ - color: #002288; - background-color: #8ac7ff; -} -.org-org-headline-done { - /* org-headline-done */ - color: #004000; - background-color: #ffffff; -} -.org-org-hide { - /* org-hide */ - color: #ffffff; -} -.org-org-latex-and-related { - /* org-latex-and-related */ - color: #770077; -} -.org-org-link { - /* org-link */ - color: #0000bb; - text-decoration: underline; -} -.org-org-list-dt { - /* org-list-dt */ - font-weight: bold; -} -.org-org-macro { - /* org-macro */ - color: #5317ac; - background-color: #f3f3ff; -} -.org-org-meta-line { - /* org-meta-line */ - color: #0f3360; - background-color: #ebf6fa; -} -.org-org-mode-line-clock { - /* org-mode-line-clock */ - color: #000000; -} -.org-org-mode-line-clock-overrun { - /* org-mode-line-clock-overrun */ - color: #e0e0e0; - background-color: #930000; -} -.org-org-priority { - /* org-priority */ - color: #721045; - background-color: #f8f8f8; -} -.org-org-property-value { - /* org-property-value */ - color: #005a5f; -} -.org-org-quote { - /* org-quote */ - color: #61284f; -} -.org-org-scheduled { - /* org-scheduled */ - color: #5d3026; -} -.org-org-scheduled-previously { - /* org-scheduled-previously */ - color: #863927; -} -.org-org-scheduled-today { - /* org-scheduled-today */ - color: #5317ac; -} -.org-org-sexp-date { - /* org-sexp-date */ - color: #005a5f; - text-decoration: underline; -} -.org-org-special-keyword { - /* org-special-keyword */ - color: #201f55; - background-color: #ffffff; -} -.org-org-table { - /* org-table */ - color: #093060; -} -.org-org-tag { - /* org-tag */ - color: #541f4f; -} -.org-org-tag-group { - /* org-tag-group */ - color: #0f3360; - font-weight: bold; -} -.org-org-target { - /* org-target */ - text-decoration: underline; -} -.org-org-time-grid { - /* org-time-grid */ - color: #56576d; -} -.org-org-todo { - /* org-todo */ - color: #972500; - background-color: #f8f8f8; -} -.org-org-upcoming-deadline { - /* org-upcoming-deadline */ - color: #a0132f; -} -.org-org-upcoming-distant-deadline { - /* org-upcoming-distant-deadline */ - color: #5f0000; -} -.org-org-verbatim { - /* org-verbatim */ - color: #61284f; - background-color: #f0f0f0; -} -.org-org-verse { - /* org-verse */ - color: #61284f; -} -.org-org-warning { - /* org-warning */ - color: #a0132f; - font-weight: bold; -} -.org-package-description { - /* package-description */ - color: #093060; -} -.org-package-help-section-name { - /* package-help-section-name */ - color: #5317ac; - font-weight: bold; -} -.org-package-name { - /* package-name */ - color: #0000bb; - text-decoration: underline; -} -.org-package-status-avail-obso { - /* package-status-avail-obso */ - color: #a60000; - font-weight: bold; -} -.org-package-status-available { - /* package-status-available */ - color: #184034; -} -.org-package-status-built-in { - /* package-status-built-in */ - color: #721045; -} -.org-package-status-dependency { - /* package-status-dependency */ - color: #5317ac; -} -.org-package-status-disabled { - /* package-status-disabled */ - color: #282828; - background-color: #f2b0a2; -} -.org-package-status-external { - /* package-status-external */ - color: #005a5f; -} -.org-package-status-held { - /* package-status-held */ - color: #70480f; -} -.org-package-status-incompat { - /* package-status-incompat */ - color: #813e00; - font-weight: bold; -} -.org-package-status-installed { - /* package-status-installed */ - color: #5d3026; -} -.org-package-status-new { - /* package-status-new */ - color: #005e00; - font-weight: bold; -} -.org-package-status-unsigned { - /* package-status-unsigned */ - color: #972500; - font-weight: bold; -} -.org-preprocessor { - /* font-lock-preprocessor-face */ - color: #a0132f; -} -.org-read-multiple-choice { - /* read-multiple-choice-face */ - font-weight: bold; - text-decoration: underline; -} -.org-rectangle-preview { - /* rectangle-preview */ - color: #184034; - background-color: #c4ede0; -} -.org-regexp-grouping-backslash { - /* font-lock-regexp-grouping-backslash */ - color: #654d0f; - font-weight: bold; -} -.org-regexp-grouping-construct { - /* font-lock-regexp-grouping-construct */ - color: #8b1030; - font-weight: bold; -} -.org-region { - /* region */ - color: #000000; - background-color: #bcbcbc; -} -.org-rmail-header-name { - /* rmail-header-name */ - color: #005a5f; -} -.org-rmail-highlight { - /* rmail-highlight */ - color: #8f0075; - font-weight: bold; -} -.org-scroll-bar { -} -.org-secondary-selection { - /* secondary-selection */ - color: #093060; - background-color: #dde3f4; -} -.org-sgml-namespace { - /* sgml-namespace */ - color: #8f0075; -} -.org-sh-escaped-newline { - /* sh-escaped-newline */ - color: #223fbf; -} -.org-sh-heredoc { - /* sh-heredoc */ - color: #223fbf; -} -.org-sh-quoted-exec { - /* sh-quoted-exec */ - color: #8f0075; -} -.org-shadow { - /* shadow */ - color: #505050; -} -.org-show-paren-match { - /* show-paren-match */ - color: #000000; - background-color: #e0af82; -} -.org-show-paren-match-expression { - /* show-paren-match-expression */ - color: #61284f; - background-color: #f8ddea; -} -.org-show-paren-mismatch { - /* show-paren-mismatch */ - color: #000000; - background-color: #ff8892; -} -.org-shr-abbreviation { - /* shr-abbreviation */ - text-decoration: underline; -} -.org-shr-link { - /* shr-link */ - color: #0000bb; - text-decoration: underline; -} -.org-shr-selected-link { - /* shr-selected-link */ - color: #0000bb; - background-color: #ff0000; - text-decoration: underline; -} -.org-shr-strike-through { - /* shr-strike-through */ - text-decoration: line-through; -} -.org-speedbar-button { - /* speedbar-button-face */ - color: #0000bb; - text-decoration: underline; -} -.org-speedbar-directory { - /* speedbar-directory-face */ - color: #0030a6; - font-weight: bold; -} -.org-speedbar-file { - /* speedbar-file-face */ - color: #000000; -} -.org-speedbar-highlight { - /* speedbar-highlight-face */ - color: #282828; - background-color: #b5d0ff; -} -.org-speedbar-selected { - /* speedbar-selected-face */ - color: #00538b; - font-weight: bold; -} -.org-speedbar-separator { - /* speedbar-separator-face */ - color: #000000; - background-color: #e0e0e0; -} -.org-speedbar-tag { - /* speedbar-tag-face */ - color: #863927; -} -.org-string { - /* font-lock-string-face */ - color: #79a8ff; -} -.org-success { - /* success */ - color: #005e00; - font-weight: bold; -} -.org-tab-bar { - /* tab-bar */ - color: #000000; - background-color: #d5d5d5; -} -.org-tab-bar-tab { - /* tab-bar-tab */ - color: #000000; - background-color: #f6f6f6; - font-weight: bold; -} -.org-tab-bar-tab-inactive { - /* tab-bar-tab-inactive */ - color: #282828; - background-color: #bdbdbd; -} -.org-tab-line { - /* tab-line */ - color: #000000; - background-color: #d5d5d5; - font-size: 95%; -} -.org-table-cell { - /* table-cell */ - background-color: #f3f3ff; -} -.org-tabulated-list-fake-header { - /* tabulated-list-fake-header */ - font-weight: bold; - text-decoration: underline; - text-decoration: overline; -} -.org-term { - /* term */ - color: #000000; - background-color: #ffffff; -} -.org-term-bold { - /* term-bold */ - font-weight: bold; -} -.org-term-color-black { - /* term-color-black */ - color: #000000; - background-color: #000000; -} -.org-term-color-blue { - /* term-color-blue */ - color: #0030a6; - background-color: #0030a6; -} -.org-term-color-cyan { - /* term-color-cyan */ - color: #00538b; - background-color: #00538b; -} -.org-term-color-green { - /* term-color-green */ - color: #005e00; - background-color: #005e00; -} -.org-term-color-magenta { - /* term-color-magenta */ - color: #721045; - background-color: #721045; -} -.org-term-color-red { - /* term-color-red */ - color: #a60000; - background-color: #a60000; -} -.org-term-color-white { - /* term-color-white */ - color: #ffffff; - background-color: #ffffff; -} -.org-term-color-yellow { - /* term-color-yellow */ - color: #813e00; - background-color: #813e00; -} -.org-term-underline { - /* term-underline */ - text-decoration: underline; -} -.org-tool-bar { - /* tool-bar */ - color: #000000; - background-color: #bfbfbf; -} -.org-tooltip { - /* tooltip */ - color: #000000; - background-color: #dde3f4; -} -.org-trailing-whitespace { - /* trailing-whitespace */ - background-color: #ff8892; -} -.org-tty-menu-disabled { - /* tty-menu-disabled-face */ - color: #505050; - background-color: #f0f0f0; -} -.org-tty-menu-enabled { - /* tty-menu-enabled-face */ - color: #000000; - background-color: #f0f0f0; - font-weight: bold; -} -.org-tty-menu-selected { - /* tty-menu-selected-face */ - color: #000000; - background-color: #6aaeff; -} -.org-type { - /* font-lock-type-face */ - color: #6ae4b9; -} -.org-underline { - /* underline */ - text-decoration: underline; -} -.org-variable-name { - /* font-lock-variable-name-face */ - color: #00d3d0; -} -.org-variable-pitch { -} -.org-vc-conflict-state { - /* vc-conflict-state */ - color: #930000; -} -.org-vc-edited-state { - /* vc-edited-state */ - color: #5d3026; -} -.org-vc-locally-added-state { - /* vc-locally-added-state */ - color: #004882; -} -.org-vc-locked-state { - /* vc-locked-state */ - color: #6320a0; -} -.org-vc-missing-state { - /* vc-missing-state */ - color: #703700; -} -.org-vc-needs-update-state { - /* vc-needs-update-state */ - color: #184034; -} -.org-vc-removed-state { - /* vc-removed-state */ - color: #930000; -} -.org-vc-state-base { - /* vc-state-base */ - color: #191919; -} -.org-vc-up-to-date-state { - /* vc-up-to-date-state */ - color: #093060; -} -.org-vertical-border { - /* vertical-border */ - color: #888888; -} -.org-warning { - /* warning */ - color: #813e00; - font-weight: bold; -} -.org-warning-1 { - /* font-lock-warning-face */ - color: #703700; -} -.org-widget-button { - /* widget-button */ - color: #0000bb; - text-decoration: underline; -} -.org-widget-button-pressed { - /* widget-button-pressed */ - color: #721045; - text-decoration: underline; -} -.org-widget-documentation { - /* widget-documentation */ - color: #005e00; -} -.org-widget-field { - /* widget-field */ - color: #282828; - background-color: #f0f0f0; -} -.org-widget-inactive { - /* widget-inactive */ - color: #424242; - background-color: #efedef; -} -.org-widget-single-line-field { - /* widget-single-line-field */ - color: #282828; - background-color: #f0f0f0; -} -.org-window-divider { - /* window-divider */ - color: #888888; -} -.org-window-divider-first-pixel { - /* window-divider-first-pixel */ - color: #585858; -} -.org-window-divider-last-pixel { - /* window-divider-last-pixel */ - color: #585858; -} -.org-xref-file-header { - /* xref-file-header */ - color: #093060; - font-weight: bold; -} -.org-xref-line-number { - /* xref-line-number */ - color: #505050; -} -.org-xref-match { - /* xref-match */ - color: #61284f; - background-color: #f8ddea; -} diff --git a/org/posts/2023-03-27-foo.org b/org/posts/2023-03-27-foo.org new file mode 100644 index 0000000..1c0bc06 --- /dev/null +++ b/org/posts/2023-03-27-foo.org @@ -0,0 +1,10 @@ +#+TITLE: Foo +#+SUBTITLE: Bar +#+DESCRIPTION: Baz +#+KEYWORDS: spam +#+DATE: 2023-03-28 + +* An exercise in recursion courtesy of Jeremy Friesen +#+INDEX: CV + +Foo bar baz. diff --git a/org/posts/2023-03-31-bar.org b/org/posts/2023-03-31-bar.org new file mode 100644 index 0000000..14f6e64 --- /dev/null +++ b/org/posts/2023-03-31-bar.org @@ -0,0 +1,9 @@ +#+TITLE: Bar +#+SUBTITLE: Foo +#+DESCRIPTION: Baz +#+KEYWORDS: spam +#+DATE: 2023-03-31 + +* An exercise in recursion courtesy of Jeremy Friesen + +Foo bar baz. diff --git a/org/posts/2023-04-01-a-post-about-nothing.org b/org/posts/2023-04-01-a-post-about-nothing.org new file mode 100644 index 0000000..2005d4c --- /dev/null +++ b/org/posts/2023-04-01-a-post-about-nothing.org @@ -0,0 +1,14 @@ +#+TITLE: A post about nothing +#+SUBTITLE: John von Neumann once said... +#+DESCRIPTION: A post about nothing at all +#+KEYWORDS: personal +#+DATE: 2023-04-01 + +* What's this post all about? + +#+begin_quote +There is no point in being precise if you do not even know what you +are talking about. +#+end_quote + +I don't know. diff --git a/org/posts/2023-04-01-take-on-recursion.org b/org/posts/2023-04-01-take-on-recursion.org new file mode 100644 index 0000000..bd463d5 --- /dev/null +++ b/org/posts/2023-04-01-take-on-recursion.org @@ -0,0 +1,111 @@ +#+TITLE: Take on Recursion +#+SUBTITLE: My take on a recursive Elisp function for accumulating a list while walking up an AST +#+DESCRIPTION: A post by Eshel Yaron describing his take on a recursive Elisp function for accumulating a list while walking up an AST +#+KEYWORDS: emacs +#+DATE: 2023-04-01 + +Over at [[https://takeonrules.com]], Jeremy Friesen has [[https://takeonrules.com/2023/03/25/using-built-in-emacs-29-tree-sitter-package-to-get-qualified-ruby-function-name/][a couple of]] [[https://takeonrules.com/2023/03/25/using-built-in-emacs-29-tree-sitter-package-to-get-qualified-ruby-function-name/][recent posts]] +about an Emacs command he wrote for grabbing the qualified name of the function +at point in Ruby files. + +I don't know much about Ruby, but the way he implemented this command caught my +attention because he's relying on the new =treesit= package from Emacs 29 to +examine the syntax tree of his Ruby code, and I've been playing around with this +nice parsing framework myself recently. + +Apparently, Ruby /functions/ can reside within nested /modules/. Jeremy's +command thus leverages the function ~treesit-defun-at-point~ to obtain the +syntax tree node corresponding to the Ruby function at point, and calls a +recursive helper function called ~jf/treesit/module_space~ that walks up the +syntax tree and accumulates the names of the enclosing modules it finds along +the way to the root of the syntax tree. There's just a tiny problem which is +that this helper function accumulates the module names in a rather awkward +manner... As Jeremy notes: + +#+begin_quote +The list returned by ~jf/treesit/module_space~ is ~'(nil ("Hello" ("World")))~; +which is a ugly but workable. Perhaps someone will write to me with a refactor +of this code. +#+end_quote + +Let's have a look at this function's implementation: + +#+begin_src emacs-lisp + (defun jf/treesit/module_space (node) + (when-let* ((parent (treesit-parent-until + node + (lambda (n) (member (treesit-node-type n) + '("class" "module" "assignment"))))) + (parent_name (treesit-node-text + (car + (treesit-filter-child + parent + (lambda (n) + (member (treesit-node-type n) + '("constant" "scope_resolution")))))))) + (list (jf/treesit/module_space parent) parent_name))) +#+end_src + +Basically what this does is climbing up the syntax tree with +~treesit-parent-until~ to find the next module boundary (if there is one) and +then grabbing its name with ~treesit-node-text~. Now all that's left is to +perform a recursive call and return its result along with the found module name, +but the way it bundles them together as two elements of a ~list~ causes the +result to be a nested tree structure, instead of a simple list. Then, to obtain +the desired list of module names, the calling command needs to apply the +~-flatten~ function to the tree that ~jf/treesit/module_space~ returns. + +Here's my take on this function: + +#+begin_src emacs-lisp + (defun esy/treesit/module_space (node &optional acc) + (if-let ((parent (treesit-parent-until + node + (lambda (n) (member (treesit-node-type n) + '("class" "module" "assignment"))))) + (parent_name (treesit-node-text + (car + (treesit-filter-child + parent + (lambda (n) + (member (treesit-node-type n) + '("constant" "scope_resolution")))))))) + (esy/treesit/module_space parent (cons parent_name acc)) + acc)) +#+end_src + +It's extremely similar to the original version, but the crucial difference is +that we use an accumulator argument ~ACC~ to hold the result of our syntax tree +traversal as we climb up to the root. At each step in the way, ~ACC~ holds a +list of module names which is the ~cdr~ of the list that we'll eventually +return. We extend this list with the name of the next parent module during the +recursive call, and when we reach the root of the syntax tree we simply return +the accumulated list. + +For example, if we have Ruby code that looks something like this: + +#+begin_src ruby +module Foo + module Bar + module Baz + def spam + :true + end + end + end +end +#+end_src + +With point inside the function definition we get a simple list: + +#+begin_src emacs-lisp + (esy/treesit/module_space (treesit-defun-at-point)) + ⇒ ("Foo" "Bar" "Baz") +#+end_src + +Which is a little cleaner than what we get with ~jf/treesit/module_space~: + +#+begin_src emacs-lisp + (jf/treesit/module_space (treesit-defun-at-point)) + ⇒ (((nil "Foo") "Bar") "Baz") +#+end_src diff --git a/org/posts/index.org b/org/posts/index.org new file mode 100644 index 0000000..1002c95 --- /dev/null +++ b/org/posts/index.org @@ -0,0 +1,6 @@ +#+TITLE: Posts +#+DESCRIPTION: Eshel Yaron's blog posts +#+KEYWORDS: eshel language emacs programming prolog + +#+BEGIN: posts :dir "/Users/eshelyaron/checkouts/eshelyaron.com/org/posts" :limit nil +#+END: diff --git a/org/sitemap.org b/org/sitemap.org new file mode 100644 index 0000000..fd69e04 --- /dev/null +++ b/org/sitemap.org @@ -0,0 +1,12 @@ +#+TITLE: Sitemap for project org + +- [[file:index.org][Eshel Yaron]] +- [[file:theindex.org][Index]] +- [[file:pub.org][Public PGP Key]] +- [[file:sweep.org][Sweep: SWI-Prolog Embedded in Emacs]] +- posts + - [[file:posts/2023-04-01-a-post-about-nothing.org][A post about nothing]] + - [[file:posts/2023-03-31-bar.org][Bar]] + - [[file:posts/2023-03-27-foo.org][Foo]] + - [[file:posts/index.org][Posts]] + - [[file:posts/2023-04-01-take-on-recursion.org][Take on Recursion]] \ No newline at end of file diff --git a/org/style.css b/org/style.css deleted file mode 100644 index 3424f57..0000000 --- a/org/style.css +++ /dev/null @@ -1,284 +0,0 @@ -@import 'modus-operandi-theme.css'; - -:root { - --color-scheme-background: black; - --color-scheme-text: white; - --color-scheme-secondary: #eee; - --color-scheme-shadow: #333; -} - -a:link { color: lightblue } -a:visited { color: lightblue } -a:hover { color: lightblue } - -body { - margin-top: 0; - margin-left: auto; - margin-right: auto; - padding-left: 1em; - padding-right: 1em; - max-width: 52rem; - color: var(--color-scheme-text); - background: var(--color-scheme-background); -} - -#content { - max-width: 50rem; - margin-left: auto; - margin-right: auto; -} - -@media (min-width: 43em) { - #profile { - float: right; - } -} - -#preamble { - display: flex; - justify-content: space-between; - flex-direction: row-reverse; - align-items: flex-start; - padding-bottom: 0.25em; -} - -#updated { - font-family: monospace; - font-size: 1em; - color: var(--color-scheme-secondary); - padding-top: 2em; - padding-bottom: 0.75em; - padding-left: 1em; - padding-right: 1em; - border-bottom: 1px dotted var(--color-scheme-secondary); -} - -#preamble a { - text-transform: uppercase; - border: 1px solid var(--color-scheme-secondary); - padding: 0.2em; - padding-left: 0.3em; - padding-right: 0.3em; -} - -nav a:link { font-size: large; } -nav h2 { font-size: 2em; } - -figure { - border: 2px solid var(--color-scheme-text); - box-shadow: 4px 4px 6px var(--color-scheme-shadow); - display: inline-block; - font-family: monospace; -} - -img { - padding: 0.9em; - vertical-align: center; -} - -figcaption { - padding-left: 0.9em; - padding-bottom: 0.9em; -} - -blockquote { - border-left-style: solid; - padding-left: 1em; -} - -.todo { font-family: monospace; color: red; } -.done { font-family: monospace; color: green; } - - -.timestamp { - font-family: monospace; - color: var(--color-scheme-secondary); -} - -.timestamp:after { - concontent: '\A'; -} - -li { - padding-bottom: 0.3em; -} - -dd, dt, li, a, p, h1, h2, h3, h4, h5, h6 { - font-family: "Helvetica Neue", sans-serif; -} - -dt { - font-weight: bold; -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2em; - margin-bottom: 0.2em; -} - -h3 { - font-size: 1.5em; - margin-bottom: 0.2em; -} - -h4 { - font-size: 1.4em; -} - -h5 { - font-size: 1.2em; -} - -h6 { - font-size: 1em; -} - -table { - border-collapse: collapse; - border: 2px solid var(--color-scheme-text); - box-shadow: 4px 4px 6px var(--color-scheme-shadow); -} - -th, td { - padding: 0.25em; - border: 1px solid var(--color-scheme-secondary); -} - -pre { - font-size: 1.25em; - overflow: auto; - border: 2px solid var(--color-scheme-text); - box-shadow: 4px 4px 6px var(--color-scheme-shadow); - padding: 1em; -} - - -.published { - font-family: monospace; - font-size: 1.3em; - color: var(--color-scheme-secondary); -} - -.right-justify { - float: right; -} - - -.comma-list ul { - list-style: none; -} - -.comma-list li { - display: inline; -} - -.comma-list li:after { - content: ", "; -} - -.comma-list li:last-child:before { - content: "and "; -} - -.comma-list li:last-child:after { - content: ""; -} - -.license-notice { - display: flex; - align-content: center; - align-items: center; - justify-content: center; - background: lightyellow; - padding: 0 1em; - border: 1px dotted var(--color-scheme-secondary); - border-radius: 1em; -} - -.blog-entries ul { - list-style: none; - padding-left: 0; -} - -.blog-entries li { - padding-bottom: 5mm; -} - -.blog-entries a { - font-family: monospace; - font-size: 1.8em; - font-weight: bold; -} - -.blog-entries span { - display: block; -} - -.footdef { - padding-top: 0.5em; - padding-bottom: 0.5em; -} - -.footpara { - display: inline; -} - -footer { - font-size: 80%; - line-height: 1.5em; -} - -.copyright-container { - display: flex; - justify-content: space-between; - align-items: center; - flex-wrap: wrap; -} - -.banner { - text-align: center; -} - -.generated { - font-family: monospace; - text-align: center; - padding: 1em; -} - -a { - outline: none; - text-decoration: none; -} - -p { - font-size: large; -} - -.links-container { - width: 100%; - display: flex; - flex-direction: row; - justify-content: center; -} - -.links-first, .links-second, .links-third, .links-fourth { - width: 20%; -} - -.links-fifth, links-sixth { - width: 10%; -} - -span.tag { - font-size: small; - color: #4aa64a; -} - -code { - color: #f78fe7; - font-family: Hack,monospace; -} diff --git a/org/sweep.org b/org/sweep.org new file mode 120000 index 0000000..b077d19 --- /dev/null +++ b/org/sweep.org @@ -0,0 +1 @@ +../sweep/README.org \ No newline at end of file diff --git a/org/theindex.inc b/org/theindex.inc new file mode 100644 index 0000000..6453c73 --- /dev/null +++ b/org/theindex.inc @@ -0,0 +1,2 @@ +* C + - [[file:posts/2023-03-27-foo.org::*An exercise in recursion courtesy of Jeremy Friesen][CV]] diff --git a/org/theindex.org b/org/theindex.org new file mode 100644 index 0000000..9ac19f8 --- /dev/null +++ b/org/theindex.org @@ -0,0 +1,4 @@ +#+TITLE: Index + +#+INCLUDE: "theindex.inc" + diff --git a/publish.el b/publish.el index e9ae293..51172c5 100644 --- a/publish.el +++ b/publish.el @@ -6,152 +6,175 @@ ;;; Code: -(require 'package) -(setq package-selected-packages '(htmlize rainbow-delimiters)) -(package-install-selected-packages) (package-initialize) + +(use-package htmlize :ensure t :demand t) +(use-package rainbow-delimiters :ensure t :demand t) + (add-hook 'prog-mode-hook #'rainbow-delimiters-mode) +(require 'org) (require 'ox-publish) (require 'ox-html) -(require 'htmlize) -(require 'f) -(require 'tramp) +(require 'dom) (org-babel-do-load-languages 'org-babel-load-languages - '((shell . t))) - -(setq tramp-cache-read-persistent-data t - tramp-allow-unsafe-temporary-files t) - -(defconst esy/source-path "~/checkouts/eshelyaron.com/dotfiles/.emacs.d/" - "Local path of my GNU Emacs configuration.") - -(defconst esy/website-source-root "~/checkouts/eshelyaron.com" - "Local path of my website sources.") - -(defconst esy/website-source-org (expand-file-name "org" - esy/website-source-root) - "Local path of my website Org files.") - -(defconst esy/website-target-root "/ssh:root@direct.eshelyaron.com:/var/www" - "Remote path of my website pages.") - -(defconst esy/website-target-html (concat esy/website-target-root "/html") - "Remote path of my website pages.") - -(defconst esy/website-html-header - "" - "HTML Header of my website pages.") - -(defconst esy/website-html-postamble - (f-read-text (expand-file-name "html_postamble.html" esy/website-source-org)) - "HTML Postamble of my website pages.") - -(defun esy/publish-project-make-org-template (dir file) - "Return an `org-publish-project-alist' value template for Org FILE in DIR." - `( :base-extension "org" - :base-directory ,dir - :exclude ".*" - :include (,file) - :publishing-function org-html-publish-to-html - :html-head ,esy/website-html-header - :html-postamble ,esy/website-html-postamble)) - -(defconst esy/publish-project-index-template - (esy/publish-project-make-org-template esy/website-source-org "index.org") - "Template for the index page of my website.") - -(defconst esy/publish-project-pub-template - (esy/publish-project-make-org-template esy/website-source-org "pub.org") - "Template for the GPG key page of my website.") - -(defconst esy/publish-project-config-template - (esy/publish-project-make-org-template - (expand-file-name "dotfiles/.emacs.d" esy/website-source-root) - "esy.org") - "Template for the index page of my website.") - -(defconst esy/publish-project-sweep-template - (esy/publish-project-make-org-template - (expand-file-name "sweep" esy/website-source-root) - "README.org") - "Template for the `sweep' manual page of my website.") - -(defconst esy/publish-project-static-template - `( :base-directory ,esy/website-source-org - :base-extension "ico\\|css\\|jpg\\|gif\\|png\\|txt\\|pdf" - :recursive t - :publishing-function org-publish-attachment) - "Template for the static assets of my website.") - -(with-eval-after-load 'ox-publish - (require 'ox-html) - (require 'htmlize) - (setq org-export-with-section-numbers nil - org-html-html5-fancy t - org-html-doctype "html5" - org-html-head-include-default-style nil - org-html-head-include-scripts nil - org-html-htmlize-output-type 'css - org-publish-project-alist - `(("index" - :publishing-directory ,esy/website-target-html - . - ,esy/publish-project-index-template) - ("pub" - :publishing-directory ,esy/website-target-html - . - ,esy/publish-project-pub-template) - ("static" - :publishing-directory ,esy/website-target-html - . - ,esy/publish-project-static-template) - ("config" - :publishing-directory ,esy/website-target-html - . - ,esy/publish-project-config-template) - ("sweep" - :publishing-directory ,esy/website-target-html - . - ,esy/publish-project-sweep-template) - ("eshelyaron.com" :components ("index" - "pub" - "sweep" - "static" - "config")) - ("index.local" - :publishing-directory ,(expand-file-name "html" - esy/website-source-root) - . - ,esy/publish-project-index-template) - ("pub.local" - :publishing-directory ,(expand-file-name "html" - esy/website-source-root) - . - ,esy/publish-project-pub-template) - ("config.local" - :publishing-directory ,(expand-file-name "html" - esy/website-source-root) - . - ,esy/publish-project-config-template) - ("sweep.local" - :publishing-directory ,(expand-file-name "html" - esy/website-source-root) - . - ,esy/publish-project-sweep-template) - ("static.local" - :publishing-directory ,(expand-file-name "html" - esy/website-source-root) - . - ,esy/publish-project-static-template) - ("eshelyaron.local" :components ("index.local" - "pub.local" - "sweep.local" - "static.local" - "config.local"))))) + '((emacs-lisp . t) + (shell . t))) + (setq org-confirm-babel-evaluate nil) +(defun esy/dom-to-string (&rest doms) + (with-temp-buffer + (mapc #'dom-print doms) + (buffer-string))) + +(defun esy/publish-post-to-dom (file) + (with-current-buffer (find-file-noselect (expand-file-name file "/Users/eshelyaron/checkouts/eshelyaron.com/out/posts")) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + `(item nil + (title nil ,(string-join (dom-strings (car (dom-by-tag dom 'title))))) + (author nil ,user-full-name) + (category nil ,(car (string-split (dom-attr (seq-find (lambda (m) (pcase m (`(meta ((name . "keywords") . ,_)) t))) (dom-by-tag dom 'meta)) 'content) " "))) + (link nil ,(concat "https://eshelyaron.com/posts/" file)) + (guid ((isPermaLink . "true")) ,(concat "https://eshelyaron.com/posts/" file)) + (pubDate nil ,(substring file 0 10)) + (description nil ,(format "" (esy/dom-to-string (car (dom-by-id dom "content"))))))))) + +(defun esy/publish-posts (&rest _) + (let ((posts (reverse (directory-files "/Users/eshelyaron/checkouts/eshelyaron.com/out/posts" nil (rx bos digit (+ any) ".html" eos))))) + (with-temp-buffer + (insert "\n") + (dom-print `(rss ((version . "2.0")) + (channel nil + (title nil ,user-full-name) + (generator nil "GNU Emacs") + (link nil "https://eshelyaron.com") + (description nil "RSS Feed of eshelyaron.com") + (pubDate nil ,(format-time-string "%F")) + ,@(mapcar #'esy/publish-post-to-dom posts))) + t t) + (write-file "/Users/eshelyaron/checkouts/eshelyaron.com/out/rss.xml")))) + +(defun esy/org-dblock-insert-posts (limit) + (interactive (list (when current-prefix-arg + (prefix-numeric-value current-prefix-arg)))) + (org-create-dblock (list :name "posts" + :dir "/Users/eshelyaron/checkouts/eshelyaron.com/org/posts" + :limit limit)) + (org-update-dblock)) + +(org-dynamic-block-define "posts" #'esy/org-dblock-insert-posts) + +(defun org-dblock-write:posts (params) + (let* ((dir (plist-get params :dir)) + (limit (plist-get params :limit)) + (all-posts (reverse (directory-files dir nil (rx bos digit (+ any) ".org" eos)))) + (posts (if limit (take limit all-posts) all-posts))) + (dolist (post posts) + (let ((file (expand-file-name post dir))) + (insert "- [[file:" (file-relative-name file) "][" (substring post 0 10) " ~ " (org-get-title file) "]]")) + (newline)) + (when (and limit (< limit (length all-posts))) + (insert "- [[file:" (file-relative-name dir) "][...older posts]]")) + (delete-blank-lines))) + +(defun esy/publish-posts-prepare-index (&rest _) + (dolist (file '("/Users/eshelyaron/checkouts/eshelyaron.com/org/posts/index.org" + "/Users/eshelyaron/checkouts/eshelyaron.com/org/index.org")) + (with-current-buffer (find-file-noselect file) + (org-update-all-dblocks)))) + +(defun esy/publish (&optional modified-only) + (interactive "P") + (let* ((publishing-directory "/Users/eshelyaron/checkouts/eshelyaron.com/out") + (org-export-with-sub-superscripts '{}) + (org-export-with-section-numbers nil) + (org-export-with-toc nil) + (org-html-htmlize-output-type 'css) + (org-publish-project-alist + (list '("all" :components ("org" "assets")) + (list "assets" + :base-directory "/Users/eshelyaron/checkouts/eshelyaron.com/assets" + :publishing-directory publishing-directory + :preparation-function #'ignore + :completion-function #'ignore + :base-extension "svg\\|ico\\|css" + :publishing-function #'org-publish-attachment) + (list "org" + :completion-function #'esy/publish-posts + :base-directory "/Users/eshelyaron/checkouts/eshelyaron.com/org" + :publishing-directory publishing-directory + :preparation-function #'esy/publish-posts-prepare-index + :completion-function #'ignore + :base-extension "org" + :recursive t + :exclude nil + :include nil + :publishing-function #'org-html-publish-to-html + :html-doctype "html5" + :html-html5-fancy t + :auto-sitemap t + :makeindex t + :with-date t + :html-head-include-default-style nil + :html-head-include-scripts nil + :html-use-infojs nil + :html-link-org-files-as-html t + :html-head (esy/dom-to-string '(link ((rel . "stylesheet") + (href . "/style.css") + (type . "text/css")))) + :html-head-extra (esy/dom-to-string '(link ((rel . "alternate") + (href . "/rss.xml") + (type . "application/rss+xml") + (title . "RSS feed of eshelyaron.com")))) + :html-preamble-format + (list + (list + "en" + (esy/dom-to-string + '(nav ((id . "icon-links") + (class . "icon-links")) + (div ((class . "home-link")) + (a ((href . "/")) + (img ((src . "/home.svg") + (height . "35") + (width . "35") + (alt . "Home"))))) + (div ((class . "other-links")) + (a ((href . "mailto:me@eshelyaron.com")) + (img ((src . "/mail.svg") + (height . "30") + (width . "30") + (alt . "Mail")))) + " " + (a ((href . "https://emacs.ch/@eshel")) + (img ((src . "/mastodon.svg") + (height . "28") + (width . "28") + (alt . "Mastodon")))) + " " + (a ((href . "/rss.xml")) + (img ((src . "/rss.svg") + (height . "30") + (width . "30") + (alt . "RSS Feed")))))) + '(hr nil)))) + :html-postamble t + :html-postamble-format + (list + (list + "en" + (esy/dom-to-string + '(footer ((id . "footer") + (class . "footer")) + (hr nil) + "© " + (time ((class . "copyright-year")) "2023") + " %a")))))))) + (org-publish "all" (not modified-only)))) + + (provide 'publish) ;;; publish.el ends here diff --git a/sweep b/sweep index eedc3fa..41c40c0 160000 --- a/sweep +++ b/sweep @@ -1 +1 @@ -Subproject commit eedc3fa93fbe83b96636bfcf1f77933c73f713e7 +Subproject commit 41c40c0e1f26903ab16f65605e83a33563058fc8