コードの行番号を余白に入れて印刷する方法を知っている人はいますか?行番号を表示できますが、印刷には表示できません。ありがとう!
3 に答える
一時的なオーバーレイを使用して行番号を追加し、パッケージを使用してバッファをHTMLに変換できます。その後、HTMLを保存し、またはブラウザhtmlize
を使用して印刷できます。lpr
(defun htmlize-with-line-numbers ()
(interactive)
(goto-char (point-min))
(let ((n 1))
(while (not (eobp))
(htmlize-make-tmp-overlay (point) (point) `(before-string ,(format "%4d " n)))
(setq n (1+ n))
(forward-line 1)))
(switch-to-buffer (htmlize-buffer)))
これには、の最新バージョンが必要になりますhtmlize
。
もちろん、簡単でありながらハックな方法は、一時的に行番号をバッファに直接挿入することです。
C-<
C-M-% ^ RET \,(1+ \#) SPC RET
次にそれを印刷します
M-x print-buffer
その後、行番号を再度元に戻します。
C-/
C-u C-SPC
結果はあまり美しくはありませんが、使用可能です。3つの主な問題があります。
- バッファに変更を加えています。特に、これはバッファが読み取り専用であってはならないことを意味します。
- 行番号は左寄せです。つまり、行番号の桁数に応じて異なるインデントが得られます。
- メジャーモードは行番号につまずき、構文の強調表示が失われます。白黒プリンターで印刷している場合でも、問題はありません。
より複雑な置換文字列を使用して、2番目のポイントを修正できます。
\,(format "%4d " (1+ \#))
ただし、との間の正しい桁数を指定できるように、最大行番号を知る必要が%
ありd
ます。もちろん、バッファの最後にすばやくジャンプして、最大行数を確認することもできます。しかし、もっと重要なことは、行番号を印刷するたびにすべてを入力するのが面倒になっていることです。
そのような古い投稿の解決策をお詫びします。結果がはるかに見栄えが良いので、私はps-print-buffer
ではなくを使用しました。とにかく、何らかの理由でマニュアルには記載されていませんが、のソースを見ると、行番号を含めるためにnil以外に設定できる変数が見つかります。print-buffer
ps-print.el
ps-line-number
M-x set-variable RET ps-line-number RET t
印刷できるように一時的に設定する必要があります。に永続的に設定することをお勧めしますinit.el
。
コマンドを使用して印刷することもできます。このM-x pr-interface
コマンドは、あらゆる種類の印刷オプションのバッファーを表示します。