2009-02-20 14 views
7

Sto eseguendo Emacs 23.0.60.1, scaricato da here, su Windows XP, con una stampante di rete configurata come stampante predefinita.Come posso stampare da Emacs su Win32?

Come si configura Emacs per stampare facilmente i contenuti del buffer?

La documentation della versione Emacs patch per Win32 menzioni stampa "semplice e veloce", ma la voce di menu "Quick Print" non appare e le voci regolari ("Stampa buffer", "Postscript Stampa buffer") don' t sembra di fare qualsiasi cosa.

EDIT:
Sto avendo lo stesso problema con il Windows ufficiali build di Emacs 22.3. Pertanto le istruzioni di installazione/risoluzione dei problemi per qualsiasi versione sarebbero apprezzate.

EDIT2:
sono andato con la soluzione PrintFile presentato da Joe Casadonte seguito, che funziona bene. Sarei comunque interessato a qualsiasi idea sul perché il modo "giusto" non funzioni, comunque.

(A proposito, è questa una domanda appropriata SO, essendo solo marginalmente programmazione relativa?)

+0

Ho eseguito l'aggiornamento da Win32 Emacs 22 a Win32 Emacs 23 e ho riscontrato lo stesso problema: il menu del buffer di stampa non funziona più come documentato. E, naturalmente, non sono riuscito a dare seguito a ciò. –

+1

: domanda SO appropriata - si, credo sia appropriato. Emacs e le domande VIM sono poste e hanno sempre risposto qui. –

risposta

4

E 'non è il modo "corretto", ma ho fatto in questo modo per anni ed è funziona meravigliosamente. Io uso PrintFile, un programma di stampa gratuito (che può anche essere usato da solo). Poi ho questo nel mio .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)))) 

non l'ho guardato negli anni perche 'funziona, quindi sono sicuro che potrebbe essere migliorata.

+0

Funziona alla grande sul mio XP; grazie per aver indicato un'applicazione eccellente! Tuttavia, come potrei (a) aggiungere il supporto a caratteri non latini (o UTF-8) e (b) avere interruzioni di riga con _words_ e non _caratteri_? Questi potrebbero benissimo essere problemi con PrintFile e non con Emacs. Grazie! – marttt

+0

Ho paura di non sapere - scusa. –

1

aggiungere la seguente riga al tuo emacs init il file

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

Anche questo non ha avuto alcun effetto. Forse le mie impostazioni della stampante sono strane ... –

5

mi limiterò a descrivere tutto per Windows 7 con una stampante USB comune. Adattare il processo dove necessario alla tua versione. Di solito si accede alla rete allo stesso modo. Basta usare //NetworkComputerName/SharedPrinterName anziché // MyComputer/MyPrinter e saltare i passaggi 1.-6 ..

  1. Vai Start -> Pannello di controllo -> Hardware e suoni -> Dispositivi e stampanti
  2. Rightclick la stampante selezionare "Proprietà stampante"
  3. Vai alla "condivisione" e seleziona "Condividi la stampante" e "Render lavori di stampa su computer client"
  4. Inserisci il nome Condividi: MyPrinter o qualcosa che si può ricordare e non ha spazi.
  5. Fare clic su OK per salvare le modifiche.
  6. Vai Start -> Computer per verificare il nome del computer nell'angolo in basso a sinistra (es MyComputer)
  7. In Emacs valutare (setq printer-name "//MyComputer/MyPrinter") o metterlo nel file .emacs.el
  8. Fatto. È possibile stampare i file con M-x print-buffer
+1

Questa è la soluzione –

+0

Questo ha funzionato anche per la stampa wireless. –

Problemi correlati