Tôi có chức năng elisp tùy chỉnh này mà tôi sử dụng để chuyển đổi một vùng đã chọn hoặc toàn bộ bộ đệm sang HTML được cú pháp.
(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))))))
Dưới đây là một vài điểm về modi/htmlize-region-to-file
chức năng:
- Nếu khu vực được chọn, chỉ khu vực đó sẽ được xuất sang tệp HTML trong
modi/htmlize-output-directory
thư mục.
- Nếu không có vùng nào được chọn, toàn bộ bộ đệm sẽ được xuất.
- Nó yêu cầu
ox-html
( org-mode
trình xuất HTML) vì nó sử dụng org-html-htmlize-region-for-paste
chức năng sử dụng htmlize
gói phía sau hậu trường và cũng cho phép tùy chỉnh cách liên kết CSS với mã HTML để tạo phông chữ.
- Nó có thể phông chữ mã dựa trên tệp css được chỉ định bởi
modi/htmlize-css-file
biến. Để sử dụng chức năng này ngay lập tức, bạn có thể lưu tệp css dựa trên chủ đề tùy chỉnh này ở đâu đó và đặt biến này thành đường dẫn tệp đó. Nếu bạn sử dụng tệp css đó, mã được xuất sẽ luôn có chủ đề Leuven bất kể chủ đề emacs của bạn (đó là mục đích duy nhất của tôi để viết chức năng này).
Tôi khuyên bạn nên cài đặt region-bindings-mode
gói. Với cài đặt đó, bạn chỉ cần chọn khu vực bạn muốn xuất và nhấn H... Voila! Mã của bạn sẽ được lưu vào một tệp HTML modi/htmlize-output-directory
.
(with-eval-after-load 'region-bindings-mode
(define-key region-bindings-mode-map (kbd "H") #'modi/htmlize-region-to-file))
Nếu bạn làm như vậy C-u H
, nó sẽ xuất mã và sao chép tên tệp đầu ra vào vòng khử.
- Nếu bạn làm
C-u C-u H
thay vào đó, nó sẽ làm như trên và cũng mở tệp HTML trong trình duyệt mặc định của bạn bằng cách sử dụng browse-url-of-file
chức năng.
Dưới đây là những gì tôi nhận được trong trình duyệt web của mình khi tôi thực C-u C-u H
hiện một phần của đoạn mã trên:
LƯU Ý: Tôi cần lưu HTML vào một tệp. Việc lưu mã chú thích HTML chỉ vào bảng tạm sẽ không hiệu quả với tôi vì tôi không biết cách chuyển đổi mã html trong bảng tạm sang tệp html được kết xuất khi dán trong Outlook / Word.