Перенос слов для буфера печати Emacs в PDF - PullRequest
4 голосов
/ 09 сентября 2011

Я использую эту функцию для печати содержимого буфера в PDF

(из моего файла .emacs:)

(defun print-to-pdf ()
  (interactive)
  (ps-spool-buffer-with-faces)
  (switch-to-buffer "*PostScript*")
  (write-file "/tmp/tmp.ps")
  (kill-buffer "tmp.ps")
  (setq cmd (concat "ps2pdf14 /tmp/tmp.ps /home/user/" (buffer-name) ".pdf"))
  (shell-command cmd)
  (shell-command "rm /tmp/tmp.ps")
  (message (concat "Saved to:  /home/user/" (buffer-name) ".pdf"))  
  )

Однако я не могу найти способ включить или применитьвторостепенный режим визуальной строки в буфер PostScript перед его записью на диск, чтобы включить перенос слов в выводе.

1 Ответ

5 голосов
/ 13 сентября 2011

Проблема с соблюдением режима визуальной линии состоит в том, что он вставляет «мягкие новые строки» (которые игнорируются рендерером PS).Решение состоит в том, чтобы заменить их жесткими символами новой строки.Код ниже делает то, что вы хотите, я думаю.Обратите внимание, что мы вызываем harden-newlines во временном буфере, чтобы не испортить текущий документ.Кроме того, я изменил назначение вывода, чтобы оно всегда попадало в /tmp/print.pdf.Кажется ... неразумно переписывать документы в вашем /home без какого-либо предупреждения!После этого вы всегда можете переместить 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 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)
      (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")))
...