Tengo esta función de elisp personalizada que utilizo para convertir una región seleccionada o todo el búfer a HTML con fuente de sintaxis.
(defvar modi/htmlize-output-directory
(let ((dir (concat temporary-file-directory
(getenv "USER") "/.htmlize/"))) ; must end with /
(make-directory dir :parents)
dir)
"Output directory for files exported by `modi/htmlize-region-to-file'.")
(defvar modi/htmlize-css-file (concat user-emacs-directory
"misc/css/leuven_theme.css")
"CSS file to be embedded in the html file created using the
`modi/htmlize-region-to-file' function.")
(defun modi/htmlize-region-to-file (option)
"Export the selected region to an html file. If a region is not
selected, export the whole buffer.
The output file is saved to `modi/htmlize-output-directory' and its fontification
is done using `modi/htmlize-css-file'.
If OPTION is non-nil (for example, using `\\[universal-argument]' prefix), copy
the output file name to kill ring.
If OPTION is \\='(16) (using `\\[universal-argument] \\[universal-argument]' prefix),
do the above and also open the html file in the default browser."
(interactive "P")
(let ((org-html-htmlize-output-type 'css)
(org-html-htmlize-font-prefix "org-")
(fname (concat modi/htmlize-output-directory
(if (buffer-file-name)
(file-name-nondirectory (buffer-file-name))
"temp")
".html"))
start end html-string)
(if (use-region-p)
(progn
(setq start (region-beginning))
(setq end (region-end)))
(progn
(setq start (point-min))
(setq end (point-max))))
(setq html-string (org-html-htmlize-region-for-paste start end))
(with-temp-buffer
;; Insert the `modi/htmlize-css-file' contents in the temp buffer
(insert-file-contents modi/htmlize-css-file nil nil nil :replace)
;; Go to the beginning of the buffer and insert comments and
;; opening tags for `html', `head' and `style'. These are
;; inserted *above* the earlier inserted css code.
(goto-char (point-min))
(insert (concat "<!-- This file is generated using the "
"`modi/htmlize-region-to-file' function\n"
"from https://github.com/kaushalmodi/.emacs.d/"
"blob/master/setup-files/setup-org.el -->\n"))
(insert "<html>\n<head>\n<style media=\"screen\" type=\"text/css\">\n")
;; Go to the end of the buffer (end of the css code) and
;; insert the closing tags for `style' and `head' and opening
;; tag for `body'.
(goto-char (point-max))
(insert "</style>\n</head>\n<body>\n")
;; Insert the HTML for fontified text in `html-string'.
(insert html-string)
;; Close the `body' and `html' tags.
(insert "</body>\n</html>\n")
(write-file fname)
(when option
(kill-new fname)
(when (= 16 (car option))
(browse-url-of-file fname))))))
Aquí hay algunos puntos sobre la modi/htmlize-region-to-file
función:
- Si se selecciona la región, solo esa región se exportará a un archivo HTML en el
modi/htmlize-output-directory
directorio.
- Si no se selecciona ninguna región, se exportará todo el búfer.
- Requiere
ox-html
( org-mode
exportador de HTML) ya que usa la org-html-htmlize-region-for-paste
función que usa el htmlize
paquete detrás de escena y también permite personalizar cómo asociar CSS con el código HTML para la fuente.
- Es capaz de fuente de código basado en el archivo CSS especificado por
modi/htmlize-css-file
variable. Para usar esta función de inmediato, puede guardar este archivo css personalizado basado en temas leuven en algún lugar y establecer esta variable en esa ruta de archivo. Si usa ese archivo CSS, el código exportado siempre tendrá el tema Lovaina, independientemente de su tema emacs (que era mi único propósito para escribir esta función).
Yo recomendaría instalar el region-bindings-mode
paquete. Con eso instalado, simplemente seleccione la región que desea exportar y Hpresione ... ¡Voila! Su código se guardará en un archivo HTML en modi/htmlize-output-directory
.
(with-eval-after-load 'region-bindings-mode
(define-key region-bindings-mode-map (kbd "H") #'modi/htmlize-region-to-file))
Si lo hace C-u H
, exportará el código y copiará el nombre del archivo de salida al kill-ring.
- Si lo hace
C-u C-u H
, hará lo anterior y también abrirá el archivo HTML en su navegador predeterminado utilizando la browse-url-of-file
función.
A continuación se muestra lo que obtuve en mi navegador web cuando hice C-u C-u H
parte del código anterior:
NOTA: Necesito guardar el HTML en un archivo. Guardar el código HTML anotado solo en el portapapeles no funcionará para mí porque no sé cómo convertir el código html en el portapapeles directamente en html renderizado cuando pego en Outlook / Word.