2009-02-20 21 views
7

Estoy ejecutando Emacs 23.0.60.1, descargado desde here, en Windows XP, con una impresora de red configurada como la impresora predeterminada.¿Cómo imprimo desde Emacs en Win32?

¿Cómo configuro Emacs para imprimir fácilmente el contenido del búfer?

El documentation de la versión parchada de Emacs para Win32 menciona la impresión "rápida y sencilla", pero la entrada del menú "Impresión rápida" no aparece y las entradas normales ("Print Buffer", "Postscript Print Buffer") don ' parece hacer cualquier cosa.

EDIT:
estoy teniendo el mismo problema con la construcción de ventanas oficiales Emacs 22.3. Por lo tanto, se agradecerán las instrucciones de configuración/solución de problemas para cualquier versión.

Edit2:
Fui con la solución PrintFile presentado por Joe Casadonte a continuación, que funciona muy bien. Sin embargo, aún me interesarían las ideas de por qué la forma "adecuada" no funciona.

(Por cierto, ¿es una pregunta apropiada SO, siendo sólo marginalmente programación relacionada?)

+0

Actualicé desde Win32 Emacs 22 a Win32 Emacs 23, y encontré el mismo problema: el menú del búfer de impresión ya no funciona como está documentado. Y, por supuesto, he fallado totalmente en el seguimiento de eso. –

+1

re: pregunta SO apropiada - sí, creo que es apropiada. Las preguntas de Emacs y VIM se hacen y se responden todo el tiempo aquí. –

Respuesta

4

no es el camino "correcto", pero he estado haciendo así durante años y se funciona maravillosamente Yo uso PrintFile, un programa de impresión freeware (que también se puede usar de forma independiente). Entonces tengo esto en mi .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)))) 

no he mirado en años causa simplemente funciona, así que estoy seguro de que podría ser mejorado.

+0

Funciona muy bien en mi XP; gracias por apuntar a una excelente aplicación! Sin embargo, ¿cómo podría (a) agregar soporte para caracteres no latinos (o UTF-8) y (b) tener saltos de línea por _words_ y no _characters_? Sin embargo, estos pueden ser problemas con PrintFile y no con Emacs. ¡Gracias! – marttt

+0

Me temo que no sé, lo siento. –

1

añadir la siguiente línea a su archivo init emacs

(setq printer-name "//domain/printer-name") 
+0

Esto tampoco tuvo ningún efecto. Tal vez la configuración de mi impresora es extraña ... –

5

voy a describir todo para Windows 7 con una impresora USB común. Adapte el proceso donde sea necesario a su versión. Por lo general, se puede acceder a la red de la misma manera. Sólo tiene que utilizar //NetworkComputerName/SharedPrinterName en lugar de // Mi PC/myprinter y omita los pasos 1.-6 ..

  1. Ir a Inicio -> Panel de control -> Hardware y sonido -> Dispositivos e impresoras
  2. Rightclick la impresora seleccione "Propiedades de la impresora"
  3. Ir a "compartir" y marca "Compartir esta impresora" y "Render trabajos de impresión en equipos cliente"
  4. Anote la participación nombre: MyPrinter o algo que pueda recordar y no tiene espacios.
  5. Haga clic en Aceptar para guardar sus cambios.
  6. Ir a Inicio -> Informática para comprobar el nombre de su equipo en la esquina inferior izquierda (por ejemplo MyComputer)
  7. En Emacs evaluar (setq printer-name "//MyComputer/MyPrinter") o lo pone en su archivo .emacs.el
  8. Hecho. Puede imprimir sus archivos con M-x print-buffer
+1

Esta es la solución –

+0

Esto también funcionaba para la impresión inalámbrica. –

Cuestiones relacionadas