4

スペース プレフィックス バッファーとは、名前がスペースで始まるバッファーを意味します。そのようなバッファの正式な専門用語が何であるかはわかりません。

スペース プレフィックス バッファーの唯一の違いは、元に戻す機能が無効になっていることだと思いましたが、パッケージhtmlizeがスペース プレフィックス バッファーに対して異なる反応を示す原因となっている他の違いがあるようです。

(require 'htmlize)

;; function to write stuff on current buffer and call htmlize-region
(defun my-test-htmlize ()
  (insert "1234567")
  (emacs-lisp-mode)
  ;; (put-text-property 1 2 'font-lock-face "bold")
  (put-text-property 3 4 'font-lock-face 'bold)
  (with-current-buffer (htmlize-region (point-min)
                                       (point-max))
    (buffer-string)))

;; function that makes a (failed) attempt to make current buffer behave like a normal buffer
(defun my-make-buffer-normal ()
  (buffer-enable-undo))

;; like with-temp-buffer, except it uses a buffer that is not a space prefix buffer.
(defmacro my-with-temp-buffer-with-no-space-prefix (&rest body)
  (declare (indent 0) (debug t))
  (let ((temp-buffer (make-symbol "temp-buffer")))
    `(let ((,temp-buffer (generate-new-buffer "*tempwd2kemgv*")))
       (with-current-buffer ,temp-buffer
         (unwind-protect
             (progn ,@body)
           (and (buffer-name ,temp-buffer)
                (kill-buffer ,temp-buffer)))))))

;; In a normal buffer, bold face is htmlized.
(my-with-temp-buffer-with-no-space-prefix
  (my-test-htmlize))

;; In a space prefix buffer, bold face is not htmlized.
(with-temp-buffer
  (my-test-htmlize))

;; Bold face is still not htmlized.
(with-temp-buffer
  (my-make-buffer-normal)
  (my-test-htmlize))
4

2 に答える 2