[Emacs] Better org-mode visuals
Now inline source blocks should be fontified We should also have better LaTeX handling as well as markers
This commit is contained in:
		
							parent
							
								
									43b8263702
								
							
						
					
					
						commit
						d4aaecab9b
					
				@ -2416,10 +2416,13 @@ such as with this document.
 | 
				
			|||||||
    <<org-confirm-babel>>
 | 
					    <<org-confirm-babel>>
 | 
				
			||||||
    ;; Beautiful org
 | 
					    ;; Beautiful org
 | 
				
			||||||
    <<beautiful-org-hooks>>
 | 
					    <<beautiful-org-hooks>>
 | 
				
			||||||
    <<beautiful-org-faces>>
 | 
					 | 
				
			||||||
    <<beautiful-org-options>>
 | 
					    <<beautiful-org-options>>
 | 
				
			||||||
 | 
					    <<beautiful-org-fontify-blocks>>
 | 
				
			||||||
 | 
					    <<beautiful-org-fontify-inline>>
 | 
				
			||||||
    <<beautiful-org-images>>
 | 
					    <<beautiful-org-images>>
 | 
				
			||||||
    <<beautiful-org-hide-macro-markers>>
 | 
					    <<beautiful-org-latex-inline>>
 | 
				
			||||||
 | 
					    <<beautiful-org-latex-inline-transparent>>
 | 
				
			||||||
 | 
					    <<beautiful-org-macro-ellipsis-markers>>
 | 
				
			||||||
    <<beautiful-org-hide-dots>>
 | 
					    <<beautiful-org-hide-dots>>
 | 
				
			||||||
    ;; Capture
 | 
					    ;; Capture
 | 
				
			||||||
    <<org-capture-target-files>>
 | 
					    <<org-capture-target-files>>
 | 
				
			||||||
@ -2629,46 +2632,219 @@ of:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
In order to make org-mode even sexier, let’s enable ~variable-pitch-mode~ for
 | 
					In order to make org-mode even sexier, let’s enable ~variable-pitch-mode~ for
 | 
				
			||||||
org-mode so we can get some proportional font. I’ll also remove ~auto-fill-mode~
 | 
					org-mode so we can get some proportional font. I’ll also remove ~auto-fill-mode~
 | 
				
			||||||
which seems to stick to Orgmode like hell and I don’t know why. A hook to
 | 
					which seems to stick to Orgmode like hell and I don’t know why.
 | 
				
			||||||
org-appear’s minor mode will also be added.
 | 
					 | 
				
			||||||
#+NAME: beautiful-org-hooks
 | 
					#+NAME: beautiful-org-hooks
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
  (add-hook 'org-mode-hook 'visual-line-mode)
 | 
					  (add-hook 'org-mode-hook 'visual-line-mode)
 | 
				
			||||||
  (remove-hook 'org-mode-hook 'auto-fill-mode)
 | 
					  (remove-hook 'org-mode-hook 'auto-fill-mode)
 | 
				
			||||||
  (add-hook 'org-mode-hook 'variable-pitch-mode)
 | 
					  (add-hook 'org-mode-hook 'variable-pitch-mode)
 | 
				
			||||||
  (auto-fill-mode -1)
 | 
					  (auto-fill-mode -1)
 | 
				
			||||||
  (add-hook 'org-mode-hook 'org-appear-mode)
 | 
					 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can then see the modified faces for org-mode [[#User-Configuration-Visual-configuration-Better-faces-Org-mode-07754177][here]].
 | 
					You can then see the modified faces for org-mode [[#User-Configuration-Visual-configuration-Better-faces-Org-mode-07754177][here]].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Some other tweaks will make Org-mode more beautiful. This includes a new folding
 | 
					By default, I would like my org-mode buffers to be indented and tables to be
 | 
				
			||||||
icon, some indentation that is not added whitespace.
 | 
					aligned.
 | 
				
			||||||
#+NAME: beautiful-org-options
 | 
					#+NAME: beautiful-org-options
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
  (setq org-startup-indented t
 | 
					  (setq org-startup-indented t
 | 
				
			||||||
        org-startup-align-all-tables t
 | 
					        org-startup-align-all-tables t)
 | 
				
			||||||
        org-pretty-entities t
 | 
					 | 
				
			||||||
        org-fontify-whole-heading-line t
 | 
					 | 
				
			||||||
        org-fontify-done-headline t
 | 
					 | 
				
			||||||
        org-fontify-quote-and-verse-blocks t
 | 
					 | 
				
			||||||
        org-display-inline-images t
 | 
					 | 
				
			||||||
        org-redisplay-inline-images t
 | 
					 | 
				
			||||||
        org-startup-with-inline-images "inlineimages"
 | 
					 | 
				
			||||||
        org-ellipsis "  ")
 | 
					 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Let’s limit the width of images inlined in org buffers to 550px. It roughly
 | 
					***** Fontifying parts of org-mode
 | 
				
			||||||
corresponds to the width of a paragraph on which ~org-fill-paragraph~ is called.
 | 
					:PROPERTIES:
 | 
				
			||||||
 | 
					:CUSTOM_ID: User-Configuration-Emacs-builtins-Org-mode-Beautify-Org-mode-Fontifying-parts-of-org-mode-f690ee40
 | 
				
			||||||
 | 
					:END:
 | 
				
			||||||
 | 
					Some blocks of org-mode should have their own face, such as the whole heading
 | 
				
			||||||
 | 
					line, the done headline, the quote and the verse blocks,… actually, let’s enable
 | 
				
			||||||
 | 
					that for all of them.
 | 
				
			||||||
 | 
					#+name: beautiful-org-fontify-blocks
 | 
				
			||||||
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
 | 
					(setq org-pretty-entities t
 | 
				
			||||||
 | 
					      org-fontify-whole-heading-line t
 | 
				
			||||||
 | 
					      org-fontify-done-headline t
 | 
				
			||||||
 | 
					      org-fontify-quote-and-verse-blocks t)
 | 
				
			||||||
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					***** Fontifying inline src blocks
 | 
				
			||||||
 | 
					:PROPERTIES:
 | 
				
			||||||
 | 
					:CUSTOM_ID: User-Configuration-Emacs-builtins-Org-mode-Beautify-Org-mode-Fontifying-inline-src-blocks-bf879724
 | 
				
			||||||
 | 
					:END:
 | 
				
			||||||
 | 
					When it comes to source blocks in org-mode, Emacs handle them really well with
 | 
				
			||||||
 | 
					some beautiful syntax highlight thanks to the the languages’ major mode and
 | 
				
			||||||
 | 
					their font-locks. But inline src blocks are the forgotten child and get next to
 | 
				
			||||||
 | 
					no love, which is really sad ; I want it to feel loved, to stand out from the
 | 
				
			||||||
 | 
					crowd and to give me what its brother gives me already!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Enters [[https://tecosaur.github.io/emacs-config/config.html#fontifying-inline-src][Tecosaur’s config]]! With ~org-src-font-lock-fontify-block~, anything’s
 | 
				
			||||||
 | 
					possible! And ~{{{results(...)}}}~ can also have the ~org-block~ face applied to
 | 
				
			||||||
 | 
					match and make org-mode even more beautiful! Let’s do it:
 | 
				
			||||||
 | 
					#+name: beautiful-org-fontify-inline
 | 
				
			||||||
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
 | 
					  (defvar org-prettify-inline-results t
 | 
				
			||||||
 | 
					    "Whether to use (ab)use prettify-symbols-mode on
 | 
				
			||||||
 | 
					  {{{results(...)}}}.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (defun org-fontify-inline-src-blocks (limit)
 | 
				
			||||||
 | 
					    "Try to apply `org-fontify-inline-src-blocks-1'."
 | 
				
			||||||
 | 
					    (condition-case nil
 | 
				
			||||||
 | 
					        (org-fontify-inline-src-blocks-1 limit)
 | 
				
			||||||
 | 
					      (error (message "Org mode fontification error in %S at %d"
 | 
				
			||||||
 | 
					                      (current-buffer)
 | 
				
			||||||
 | 
					                      (line-number-at-pos)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (defun org-fontify-inline-src-blocks-1 (limit)
 | 
				
			||||||
 | 
					    "Fontify inline src_LANG blocks, from `point' up to `LIMIT'."
 | 
				
			||||||
 | 
					    (let ((case-fold-search t))
 | 
				
			||||||
 | 
					      (when
 | 
				
			||||||
 | 
					          ; stolen from `org-element-inline-src-block-parser'
 | 
				
			||||||
 | 
					          (re-search-forward "\\_<src_\\([^ \t\n[{]+\\)[{[]?" limit t)
 | 
				
			||||||
 | 
					        (let ((beg (match-beginning 0))
 | 
				
			||||||
 | 
					              pt
 | 
				
			||||||
 | 
					              (lang-beg (match-beginning 1))
 | 
				
			||||||
 | 
					              (lang-end (match-end 1)))
 | 
				
			||||||
 | 
					          (remove-text-properties beg lang-end '(face nil))
 | 
				
			||||||
 | 
					          (font-lock-append-text-property lang-beg lang-end 'face 'org-meta-line)
 | 
				
			||||||
 | 
					          (font-lock-append-text-property beg lang-beg 'face 'shadow)
 | 
				
			||||||
 | 
					          (font-lock-append-text-property beg lang-end 'face 'org-block)
 | 
				
			||||||
 | 
					          (setq pt (goto-char lang-end))
 | 
				
			||||||
 | 
					          (when (org-element--parse-paired-brackets ?\[)
 | 
				
			||||||
 | 
					            (remove-text-properties pt (point) '(face nil))
 | 
				
			||||||
 | 
					            (font-lock-append-text-property pt
 | 
				
			||||||
 | 
					                                            (point)
 | 
				
			||||||
 | 
					                                            'face
 | 
				
			||||||
 | 
					                                            'org-block)
 | 
				
			||||||
 | 
					            (setq pt (point)))
 | 
				
			||||||
 | 
					          (when (org-element--parse-paired-brackets ?\{)
 | 
				
			||||||
 | 
					            (remove-text-properties pt (point) '(face nil))
 | 
				
			||||||
 | 
					            (font-lock-append-text-property pt
 | 
				
			||||||
 | 
					                                            (1+ pt)
 | 
				
			||||||
 | 
					                                            'face
 | 
				
			||||||
 | 
					                                            '(org-block shadow))
 | 
				
			||||||
 | 
					            (unless (= (1+ pt) (1- (point)))
 | 
				
			||||||
 | 
					              (if org-src-fontify-natively
 | 
				
			||||||
 | 
					                  (org-src-font-lock-fontify-block
 | 
				
			||||||
 | 
					                   (buffer-substring-no-properties lang-beg
 | 
				
			||||||
 | 
					                                                   lang-end)
 | 
				
			||||||
 | 
					                   (1+ pt)
 | 
				
			||||||
 | 
					                   (1- (point)))
 | 
				
			||||||
 | 
					                (font-lock-append-text-property (1+ pt)
 | 
				
			||||||
 | 
					                                                (1- (point))
 | 
				
			||||||
 | 
					                                                'face
 | 
				
			||||||
 | 
					                                                'org-block)))
 | 
				
			||||||
 | 
					            (font-lock-append-text-property (1- (point))
 | 
				
			||||||
 | 
					                                            (point)
 | 
				
			||||||
 | 
					                                            'face
 | 
				
			||||||
 | 
					                                            '(org-block shadow))
 | 
				
			||||||
 | 
					            (setq pt (point)))
 | 
				
			||||||
 | 
					          (when (and org-prettify-inline-results
 | 
				
			||||||
 | 
					                     (re-search-forward "\\= {{{results(" limit t))
 | 
				
			||||||
 | 
					            (font-lock-append-text-property pt
 | 
				
			||||||
 | 
					                                            (1+ pt)
 | 
				
			||||||
 | 
					                                            'face
 | 
				
			||||||
 | 
					                                            'org-block)
 | 
				
			||||||
 | 
					            (goto-char pt))))
 | 
				
			||||||
 | 
					      (when (and org-prettify-inline-results
 | 
				
			||||||
 | 
					                 (re-search-forward "{{{results(\\(.+?\\))}}}"
 | 
				
			||||||
 | 
					                                    limit t))
 | 
				
			||||||
 | 
					        (remove-list-of-text-properties (match-beginning 0)
 | 
				
			||||||
 | 
					                                        (point)
 | 
				
			||||||
 | 
					                                        '(composition prettify-symbols-start prettify-symbols-end))
 | 
				
			||||||
 | 
					        (font-lock-append-text-property (match-beginning 0)
 | 
				
			||||||
 | 
					                                        (match-end 0)
 | 
				
			||||||
 | 
					                                        'face
 | 
				
			||||||
 | 
					                                        'org-block)
 | 
				
			||||||
 | 
					        (let ((start (match-beginning 0))
 | 
				
			||||||
 | 
					              (end (match-beginning 1)))
 | 
				
			||||||
 | 
					          (with-silent-modifications (compose-region start end "⟨")
 | 
				
			||||||
 | 
					                                     (add-text-properties start
 | 
				
			||||||
 | 
					                                                          end
 | 
				
			||||||
 | 
					                                                          `(prettify-symbols-start ,start prettify-symbols-end
 | 
				
			||||||
 | 
					                                                                                   ,end))))
 | 
				
			||||||
 | 
					        (let ((start (match-end 1))
 | 
				
			||||||
 | 
					              (end (point)))
 | 
				
			||||||
 | 
					          (with-silent-modifications (compose-region start end "⟩")
 | 
				
			||||||
 | 
					                                     (add-text-properties start
 | 
				
			||||||
 | 
					                                                          end
 | 
				
			||||||
 | 
					                                                          `(prettify-symbols-start ,start prettify-symbols-end
 | 
				
			||||||
 | 
					                                                                                   ,end)))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (defun org-fontify-inline-src-blocks-enable ()
 | 
				
			||||||
 | 
					    "Add inline src fontification to font-lock in Org.
 | 
				
			||||||
 | 
					  Must be run as part of `org-font-lock-set-keywords-hook'."
 | 
				
			||||||
 | 
					    (setq org-font-lock-extra-keywords
 | 
				
			||||||
 | 
					          (append org-font-lock-extra-keywords '((org-fontify-inline-src-blocks)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (add-hook 'org-font-lock-set-keywords-hook #'org-fontify-inline-src-blocks-enable)
 | 
				
			||||||
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					***** Images in org-mode
 | 
				
			||||||
 | 
					:PROPERTIES:
 | 
				
			||||||
 | 
					:CUSTOM_ID: User-Configuration-Emacs-builtins-Org-mode-Beautify-Org-mode-Images-in-org-mode-8cf9bb6c
 | 
				
			||||||
 | 
					:END:
 | 
				
			||||||
 | 
					By default, images should be displayed inline, but not with a too large width. I
 | 
				
			||||||
 | 
					found that 550px fits well, since that is roughly the average width of the text
 | 
				
			||||||
 | 
					when ~org-fill-paragraph~ is called. Let’s also tell org-mode to display images
 | 
				
			||||||
 | 
					as inline images and redisplay them when needed.
 | 
				
			||||||
#+NAME: beautiful-org-images
 | 
					#+NAME: beautiful-org-images
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
  (setq org-image-actual-width 550)
 | 
					  (setq org-image-actual-width 550
 | 
				
			||||||
 | 
					        org-redisplay-inline-images t
 | 
				
			||||||
 | 
					        org-display-inline-images t
 | 
				
			||||||
 | 
					        org-startup-with-inline-images "inlineimages")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Visually, I prefer to hide the markers of macros, so let’s do that:
 | 
					***** Prettier LaTeX inline rendering
 | 
				
			||||||
#+NAME: beautiful-org-hide-macro-markers
 | 
					:PROPERTIES:
 | 
				
			||||||
 | 
					:CUSTOM_ID: User-Configuration-Emacs-builtins-Org-mode-Beautify-Org-mode-Prettier-LaTeX-inline-rendering-66605d3c
 | 
				
			||||||
 | 
					:END:
 | 
				
			||||||
 | 
					[[https://tecosaur.github.io/emacs-config/config.html#prettier-rendering][Tecosaur strikes again]]! Let’s admit it, inline LaTeX code looks cool, properly
 | 
				
			||||||
 | 
					formatted LaTeX inline fragments look rad! Let’s fix their appearance:
 | 
				
			||||||
 | 
					#+name: beautiful-org-latex-inline
 | 
				
			||||||
#+BEGIN_SRC emacs-lisp
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
  (setq org-hide-macro-markers t)
 | 
					  (setq org-format-latex-header "\\documentclass{article}
 | 
				
			||||||
 | 
					  \\usepackage[usenames]{color}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  \\usepackage[T1]{fontenc}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  \\usepackage{booktabs}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  \\pagestyle{empty}             % do not remove
 | 
				
			||||||
 | 
					  % The settings below are copied from fullpage.sty
 | 
				
			||||||
 | 
					  \\setlength{\\textwidth}{\\paperwidth}
 | 
				
			||||||
 | 
					  \\addtolength{\\textwidth}{-3cm}
 | 
				
			||||||
 | 
					  \\setlength{\\oddsidemargin}{1.5cm}
 | 
				
			||||||
 | 
					  \\addtolength{\\oddsidemargin}{-2.54cm}
 | 
				
			||||||
 | 
					  \\setlength{\\evensidemargin}{\\oddsidemargin}
 | 
				
			||||||
 | 
					  \\setlength{\\textheight}{\\paperheight}
 | 
				
			||||||
 | 
					  \\addtolength{\\textheight}{-\\headheight}
 | 
				
			||||||
 | 
					  \\addtolength{\\textheight}{-\\headsep}
 | 
				
			||||||
 | 
					  \\addtolength{\\textheight}{-\\footskip}
 | 
				
			||||||
 | 
					  \\addtolength{\\textheight}{-3cm}
 | 
				
			||||||
 | 
					  \\setlength{\\topmargin}{1.5cm}
 | 
				
			||||||
 | 
					  \\addtolength{\\topmargin}{-2.54cm}
 | 
				
			||||||
 | 
					  % my custom stuff
 | 
				
			||||||
 | 
					  \\usepackage[nofont,plaindd]{bmc-maths}
 | 
				
			||||||
 | 
					  \\usepackage{arev}
 | 
				
			||||||
 | 
					  ")
 | 
				
			||||||
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					And I much prefer when LaTeX fragments are transparent, so let’s make them.
 | 
				
			||||||
 | 
					#+name: beautiful-org-latex-inline-transparent
 | 
				
			||||||
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
 | 
					(setq org-format-latex-options
 | 
				
			||||||
 | 
					      (plist-put org-format-latex-options :background "Transparent"))
 | 
				
			||||||
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					***** Symbols
 | 
				
			||||||
 | 
					:PROPERTIES:
 | 
				
			||||||
 | 
					:CUSTOM_ID: User-Configuration-Emacs-builtins-Org-mode-Beautify-Org-mode-Symbols-042d7374
 | 
				
			||||||
 | 
					:END:
 | 
				
			||||||
 | 
					I visually prefer to have a nicer folding icon in Emacs and the markers of macros hidden.
 | 
				
			||||||
 | 
					#+NAME: beautiful-org-macro-ellipsis-markers
 | 
				
			||||||
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
 | 
					  (setq org-hide-macro-markers t
 | 
				
			||||||
 | 
					        org-ellipsis " ")
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I also have an issue where small dots precede my org headers. Let’s fix that:
 | 
					I also have an issue where small dots precede my org headers. Let’s fix that:
 | 
				
			||||||
@ -2843,7 +3019,7 @@ Will be exported as if it were the buffer
 | 
				
			|||||||
**** Capture
 | 
					**** Capture
 | 
				
			||||||
:PROPERTIES:
 | 
					:PROPERTIES:
 | 
				
			||||||
:CUSTOM_ID: User_Configuration-Org-mode-Org_capture-f58979cf
 | 
					:CUSTOM_ID: User_Configuration-Org-mode-Org_capture-f58979cf
 | 
				
			||||||
:header-args:org: :mkdirp yes
 | 
					:header-args:org: :mkdirp yes :padline no
 | 
				
			||||||
:END:
 | 
					:END:
 | 
				
			||||||
Org-capture is an amazing feature of Org-mode which allows me to quickly save
 | 
					Org-capture is an amazing feature of Org-mode which allows me to quickly save
 | 
				
			||||||
links, resources, reminders, and notes in neatly organized org files. Here they
 | 
					links, resources, reminders, and notes in neatly organized org files. Here they
 | 
				
			||||||
@ -3404,7 +3580,6 @@ Chinese and Korean) support.
 | 
				
			|||||||
                                           (""         "amssymb"   t)
 | 
					                                           (""         "amssymb"   t)
 | 
				
			||||||
                                           (""         "capt-of"   nil)
 | 
					                                           (""         "capt-of"   nil)
 | 
				
			||||||
                                           (""         "minted"    nil)
 | 
					                                           (""         "minted"    nil)
 | 
				
			||||||
                                           (""         "xeCJK"     nil)
 | 
					 | 
				
			||||||
                                           (""         "hyperref"  nil)))
 | 
					                                           (""         "hyperref"  nil)))
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3443,6 +3618,65 @@ HTML. Let’s disable that since I never use it.
 | 
				
			|||||||
  (setq org-html-validation-link nil)
 | 
					  (setq org-html-validation-link nil)
 | 
				
			||||||
#+END_SRC
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					However, something I very often use are metadata information in my HTML files. I
 | 
				
			||||||
 | 
					just want to automate that. Fortunately, [[https://tecosaur.github.io/emacs-config/config.html#extra-header-content,code--3][Tecosaur comes to the rescue]]! First,
 | 
				
			||||||
 | 
					here is our function that will generate all the meta tags in our HTML:
 | 
				
			||||||
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
 | 
					  (defun org-html-meta-tags-fancy (info)
 | 
				
			||||||
 | 
					    "Use the INFO plist to construct the meta tags, as described in
 | 
				
			||||||
 | 
					  `org-html-meta-tags'."
 | 
				
			||||||
 | 
					    (message "%s" info)
 | 
				
			||||||
 | 
					    (let ((title (org-html-plain-text
 | 
				
			||||||
 | 
					                  (org-element-interpret-data (plist-get info :title)) info))
 | 
				
			||||||
 | 
					          (author (and (plist-get info :with-author)
 | 
				
			||||||
 | 
					                       (let ((auth (plist-get info :author)))
 | 
				
			||||||
 | 
					                         ;; Return raw Org syntax.
 | 
				
			||||||
 | 
					                         (and auth (org-html-plain-text
 | 
				
			||||||
 | 
					                                    (org-element-interpret-data auth) info))))))
 | 
				
			||||||
 | 
					      (list
 | 
				
			||||||
 | 
					       (when (org-string-nw-p author)
 | 
				
			||||||
 | 
					         (list "name" "author" author))
 | 
				
			||||||
 | 
					       (when (org-string-nw-p (plist-get info :description))
 | 
				
			||||||
 | 
					         (list "name" "description"
 | 
				
			||||||
 | 
					               (plist-get info :description)))
 | 
				
			||||||
 | 
					       '("name" "generator" "org mode (Emacs)")
 | 
				
			||||||
 | 
					       '("name" "theme-color" "#3b4252")
 | 
				
			||||||
 | 
					       '("property" "og:type" "article")
 | 
				
			||||||
 | 
					       (list "property" "og:title" title)
 | 
				
			||||||
 | 
					       (let ((subtitle (org-export-data (plist-get info :subtitle) info)))
 | 
				
			||||||
 | 
					         (when (org-string-nw-p subtitle)
 | 
				
			||||||
 | 
					           (list "property" "og:description" subtitle)))
 | 
				
			||||||
 | 
					       (let ((meta-image (org-export-data (plist-get info :metaimage) info)))
 | 
				
			||||||
 | 
					         (when (org-string-nw-p meta-image)
 | 
				
			||||||
 | 
					           (list "property" "og:image" meta-image)))
 | 
				
			||||||
 | 
					       (let ((meta-image-type (org-export-data (plist-get info :metaimagetype) info)))
 | 
				
			||||||
 | 
					         (when (org-string-nw-p meta-image-type)
 | 
				
			||||||
 | 
					           (list "property" "og:image:type" meta-image-type)))
 | 
				
			||||||
 | 
					       (let ((meta-image-width (org-export-data (plist-get info :metaimagewidth) info)))
 | 
				
			||||||
 | 
					         (when (org-string-nw-p meta-image-width)
 | 
				
			||||||
 | 
					           (list "property" "og:image:width" meta-image-width)))
 | 
				
			||||||
 | 
					       (let ((meta-image-height  (org-export-data (plist-get info :metaimageheight) info)))
 | 
				
			||||||
 | 
					         (when (org-string-nw-p meta-image-height)
 | 
				
			||||||
 | 
					           (list "property" "og:image:height" meta-image-height)))
 | 
				
			||||||
 | 
					       (let ((meta-image-alt  (org-export-data (plist-get info :metaimagealt) info)))
 | 
				
			||||||
 | 
					         (when (org-string-nw-p meta-image-alt)
 | 
				
			||||||
 | 
					           (list "property" "og:image:alt" meta-image-alt)))
 | 
				
			||||||
 | 
					       (when (org-string-nw-p author)
 | 
				
			||||||
 | 
					         (list "property" "og:article:author:first_name" (car (s-split-up-to " " author 2))))
 | 
				
			||||||
 | 
					       (when (and (org-string-nw-p author) (s-contains-p " " author))
 | 
				
			||||||
 | 
					         (list "property" "og:article:author:last_name" (cadr (s-split-up-to " " author 2))))
 | 
				
			||||||
 | 
					       (list "property" "og:article:published_time" (format-time-string "%FT%T%z")))))
 | 
				
			||||||
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This will use some special keywords in our org buffer and insert their content in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Now let’s bind it to when we export our org buffer to HTML:
 | 
				
			||||||
 | 
					#+BEGIN_SRC emacs-lisp
 | 
				
			||||||
 | 
					  (unless (functionp #'org-html-meta-tags-default)
 | 
				
			||||||
 | 
					    (defalias 'org-html-meta-tags-default #'ignore))
 | 
				
			||||||
 | 
					  (setq org-html-meta-tags #'org-html-meta-tags-fancy)
 | 
				
			||||||
 | 
					#+END_SRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**** LaTeX formats
 | 
					**** LaTeX formats
 | 
				
			||||||
:PROPERTIES:
 | 
					:PROPERTIES:
 | 
				
			||||||
:CUSTOM_ID: User_Configuration-Org-mode-Custom_LaTeX_formats-8e8dca1c
 | 
					:CUSTOM_ID: User_Configuration-Org-mode-Custom_LaTeX_formats-8e8dca1c
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user