2011-09-16 13 views
4

Rupert Swarbrickは、行が折り返されたpdfにEmacsバッファを印刷する次の3つの関数を思いついた。 ps-print*関数)。Emacs関数のヘッダを書式設定してバッファにPDF /行折り返しを印刷する

この関数は、この行の折り返しを実現するために、現在のバッファのコピーを作成する必要があるという問題があります。これにより、ps-print-buffer-with-facesの機能が損なわれ、結果として得られるPDFファイルの各ページの上部に正しいヘッダーが表示されます。

彼の解決策の一環として、Rupert Swarbrickはこの情報を保存する関数を書いた。ただし、結果のヘッダーは常にです。HeaderLinesLeft

間違いを見つけられるのは誰ですか?

(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) 
     (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 "/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"))) 

答えて

2

これを試してみてください:

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

は、上記の中で私をclued何である変数PS-左ヘッダーのためのマニュアルを参照してください。

これはきちんとした機能です。私は間違いなくps-printの代わりに使用します。 C-u M-x ps-print-buffer-with-facesのように動作させると良いでしょう。欠落している2つの機能は、ヘッダー内のディレクトリ名であり、ユーザーにファイル名の入力を促すものです。どちらも難しくありません。

+0

こんにちは。お返事をありがとうございます。 'spool-buffer-given-name'を完全に置き換えるのですか、それとも変更する必要がありますか? – Werner

+0

こんにちはワーナー。それを私のものと置き換えることができます。同等です。 unwind-protect/setfの効果は、letでより簡単に(この場合はとにかく)達成されます。なぜラムダが必要なのか分かりません。免責事項として、このバージョン(あなたが投稿したコードと組み合わせて)は、Ubuntu 10.04のEmacs 23.1.1で正常に動作します。 –

+0

私はちょうど2つの関連する投稿でコメントを作成したかった:Rupert Swarbrickの初期コード:http://stackoverflow.com/questions/7362625/word-wrap-for-emacs-print-buffer-to-pdfそして、 2番目のフォローアップ:http://stackoverflow.com/questions/16779882/save-buffer-as-a-pdf-with-ns-write-file-using-panel-or-similar-option私はまだ開いて実装する必要がありますパネルだが、それは私が探しているものとほとんど同じだ。 – lawlist

関連する問題