0

Rupert Swarbrick によって書かれ、後に Rory Yorke によって変更された既存のコードは、名前を付けて保存関数 (たとえば、OSX ではns-write-file-using-panel. ns-write-file-using-panelスクリプトに記述された /tmp ディレクトリ オプションと同様のオプションを追加したり、おそらく変更したりする提案はありますか?

PDF への Emacs 印刷バッファーのワードラップ

Emacs関数でヘッダーをフォーマットして、バッファーを行折り返し付きPDFに出力する

(defun harden-newlines ()
  (interactive)
  "Make all the newlines in the buffer hard."
  (save-excursion
    (goto-char (point-min))
    (while (search-forward "\n" nil t)
      (backward-char)
      (put-text-property (point) (1+ (point)) 'hard t)
      (forward-char))))

;;    (defun spool-buffer-given-name (name)
;;      (load "ps-print")
;;      (let ((tmp ps-left-header))
;;        (unwind-protect
;;            (progn
;;              (setq ps-left-header
;;                    (list (lambda () name) 'ps-header-dirpart))
;;              (ps-spool-buffer-with-faces))
;;          (setf ps-left-header tmp))))

(defun spool-buffer-given-name (name)
  (let ((ps-left-header (list (format "(%s)" name))))
    (ps-spool-buffer-with-faces)))

(defun print-to-pdf ()
  "Print the current file to /tmp/print.pdf"
  (interactive)
  (let ((wbuf (generate-new-buffer "*Wrapped*"))
        (sbuf (current-buffer)))
    (jit-lock-fontify-now)
    (save-current-buffer
      (set-buffer wbuf)
      (insert-buffer sbuf)
;;      (longlines-mode t)
      (visual-line-mode t)
      (harden-newlines)
      (spool-buffer-given-name (buffer-name sbuf))
      (kill-buffer wbuf)
      (switch-to-buffer "*PostScript*")
      (write-file "/tmp/print.ps")
      (kill-buffer (current-buffer)))
    (call-process "ps2pdf14" nil nil nil
                  "/tmp/print.ps" "/tmp/print.pdf")
    (delete-file "/tmp/print.ps")
    (message "PDF saved to /tmp/print.pdf")))
4

1 に答える 1

2

最後の関数を変更して、ファイル名をパラメーターとして受け取ることができます。

(defun print-to-pdf (pdf-file-name)
  "Print the current file to the given file."
  (interactive "FWrite PDF file: ")
  (let ((ps-file-name (concat (file-name-sans-extension pdf-file-name) ".ps"))
        (wbuf (generate-new-buffer "*Wrapped*"))
        (sbuf (current-buffer)))
    (jit-lock-fontify-now)
    (save-current-buffer
      (set-buffer wbuf)
      (insert-buffer sbuf)
      (setq fill-column 95)
      (longlines-mode t)
      (harden-newlines)
      (message (buffer-name sbuf))
      (spool-buffer-given-name (buffer-name sbuf))
      (kill-buffer wbuf)
      (switch-to-buffer "*PostScript*")
      (write-file ps-file-name t)
      (kill-buffer (current-buffer)))
    (call-process "ps2pdf14" nil nil nil ps-file-name pdf-file-name)
    (delete-file ps-file-name)
    (message "PDF saved to %s" pdf-file-name)))

ただし、何かを上書きしないように、PDF ファイルが既に存在するかどうかをテストするコードを追加することをお勧めします。

于 2013-05-27T23:53:56.703 に答える