2009-02-20 42 views
7

我在Windows XP上运行Emacs 23.0.60.1,从here下载,并将网络打印机配置为默认打印机。如何从Win32上的Emacs打印?

如何设置Emacs轻松打印缓冲区内容?

修补后的Emacs for Win32的documentation提到“快速和简单”的打印,但没有出现“快速打印”菜单条目,并且常规条目(“打印缓冲区”,“Postscript打印缓冲区”似乎什么都不做。

编辑:
我与Emacs 22.3的官方Windows版本有相同的问题。因此,任何版本的设置/故障排除说明将不胜感激。

EDIT2:
我下面由乔Casadonte提出的PrintFile解决方案,它很好地工作去了。尽管如此,我仍然对任何想法都感兴趣,为什么“正确”的方式不起作用。

(顺便说一句,这是一个合适的SO问题,暂时只轻微编程有关?)

+0

我从Win32的Emacs的22升级到Win32的Emacs的23,并发现了同样的问题,打印文件:打印缓冲区菜单不再工作的记录。 当然,我完全没有跟进。 – 2009-02-20 18:27:54

+1

回复:适当的SO问题 - 是的,我相信这是适当的。 Emacs和VIM问题一直在这里提出并回答。 – 2009-02-23 20:48:25

回答

4

它不是“正确”的方式,但我已经做了多年,这种方式奇妙的作品。我使用的是免费软件打印程序PrintFile(也可以单独使用)。然后,我有这个在我的.emacs:

(defun joc-make-fname-from-buffer-name (buffer-name-in) 
    "Returns a valid filename from a given buffer name" 
    (interactive "b") 
    (save-match-data 
    (let* ((start (string-match "[^ \*]" buffer-name-in)) 
      (end (string-match "[ \*]*$" buffer-name-in (match-end 0))) 
      (rc (substring buffer-name-in start end))) 
     ;; remove some special characters 
     (while (string-match "[:]+" rc) 
     (setq rc (replace-match "_" t t rc))) 
     rc))) 

(when is-win32 
    (defun joc-print-buffer-or-region (prefix) 
     "Prints buffer or region via PrintFile32. If a prefix arg is set (via C-u) then 
     the current region is printed, otherwise the current buffer is printed." 

     (interactive "P") 

     ;; ----- set the print directory, fname and args ----- 
     (let* ((print-dir (expand-file-name "~/emacs/print")) 
      (print-fname (joc-make-fname-from-buffer-name (buffer-name))) 
      (print-fullpath (concat print-dir "/" print-fname)) 
      (print-args "/delete") 
      ;; ----- set rstart and rend to the current region ----- 
      (rstart (point-min)) (rend (point-max))) 

     ;; ----- if prefix given, set them to region ----- 
     (if (and prefix) 
      (if (and (point) (mark) (/= (point) (mark))) 
       (progn (setq rstart (min (point) (mark))) 
         (setq rend (max (point) (mark)))) 
       (error "No region defined"))) 

     ;; ----- make the directory ----- 
     (if (not (file-directory-p print-dir)) 
      (make-directory print-dir)) 

     ;; ----- write buffer/region to a temp file, print it, delete directory ----- 
     (write-region rstart rend print-fullpath) 
     (call-process "prfile32" nil t nil print-args print-fullpath) 
     (delete-directory print-dir)))) 

我已经很多年没有看它,因为它只是工作,所以我敢肯定,这可以改善。

+0

在我的XP上很好用;感谢您指出一个优秀的应用程序!然而 - 我如何(a)添加对非拉丁字符(或UTF-8)的支持和(b)_words_而不是_characters_是否有换行符?但这些可能是PrintFile而不是Emacs的问题。谢谢! – marttt 2012-01-24 12:58:09

+0

恐怕我不知道 - 对不起。 – 2012-01-25 01:42:07

1

以下行添加到您的Emacs init文件

(setq printer-name "//domain/printer-name") 
5

我将描述所有的Windows 7与普通USB打印机。根据需要调整流程以适应您的版本。网络通常可以以相同的方式访问。只需使用//NetworkComputerName/SharedPrinterName而不是//我的电脑/ MyPrinter并跳过步骤1 - 6 ..

  1. 转到开始 - >控制面板 - >硬件和声音 - >设备和打印机
  2. 请右键单击打印机选择“打印机属性”
  3. 进入“共享”,勾选“共享这台打印机”和“渲染客户端计算机上的打印作业”
  4. 输入共享名:MyPrinter或东西,你可以记住并没有空格。
  5. 单击确定保存更改。
  6. 转到开始 - >计算机检查在左下角你的计算机的名称(例如MyComputer
  7. 在Emacs的评估(setq printer-name "//MyComputer/MyPrinter")或把它放在做你.emacs.el文件
  8. 。你可以用M-x print-buffer