Emacs:使用行号打印

时间:2012-11-28 06:49:39

标签: emacs printing

是否有人知道如何使用保证金中代码的行号进行打印?我可以显示行号,在打印输出中不能有。谢谢!

3 个答案:

答案 0 :(得分:4)

您可以使用临时叠加层添加行号,并使用htmlize包将缓冲区转换为HTML,之后您可以使用lpr或浏览器保存HTML并进行打印。

(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

答案 1 :(得分:3)

一种简单而又狡猾的方式当然是暂时将行号直接插入缓冲区

C-<
C-M-% ^ RET \,(1+ \#) SPC RET

然后打印

M-x print-buffer

然后再次撤消行号:

C-/
C-u C-SPC

结果不是很漂亮,但可以使用。有三个主要问题:

  • 您正在更改缓冲区。特别是,这意味着缓冲区不能是只读的。
  • 行号左对齐,这意味着您会根据行号中的位数获得不同的缩进。
  • 您的主要模式将跳过行号,您将失去语法高亮显示。如果你在黑白打印机上打印,这不是问题。

您可以使用更复杂的替换字符串来修复第二点:

\,(format "%4d " (1+ \#))

但是你必须知道最大行号是多少,这样你就可以在%d之间给出正确的位数。您当然可以快速跳转到缓冲区的末尾以检查最大行号。但更重要的是,每次要打印行号时都要输入所有内容。

答案 2 :(得分:2)

很抱歉这个旧帖子的解决方案。我使用ps-print-buffer而不是print-buffer,因为结果很多更好看。无论如何,由于某种原因,它没有在手册中记录,但如果你查看ps-print.el的来源,你会发现ps-line-number变量你可以设置为非零,顺序包括行号。

M-x set-variable RET ps-line-number RET t

这应该暂时设置,以便您可以打印。您可能希望将其永久设置在init.el

您还可以使用M-x pr-interface命令进行打印,这会打开各种打印选项的缓冲区。