2009-02-20 8 views
7

J'utilise Emacs 23.0.60.1, téléchargé à partir de here, sur Windows XP, avec une imprimante réseau configurée comme imprimante par défaut.Comment imprimer à partir d'Emacs sous Win32?

Comment configurer Emacs pour imprimer facilement le contenu du tampon? Le documentation de la version corrigée d'Emacs pour Win32 mentionne une impression "rapide et facile", mais l'entrée de menu "Quick Print" n'apparaît pas et les entrées normales ("Print Buffer", "Postscript Print Buffer") Je ne semble rien faire.

EDIT:
Je vais avoir le même problème avec les fenêtres officielles construction d'Emacs 22.3. Par conséquent, des instructions de configuration/dépannage pour toute version seraient appréciées.

EDIT2:
Je suis allé avec la solution PrintFile présenté par Joe Casadonte ci-dessous, qui fonctionne bien. Je serais toujours intéressé par des idées pour lesquelles la "bonne" manière ne fonctionne pas, cependant.

(Soit dit en passant, est-ce une appropriée SO question, étant que marginalement la programmation liée?)

+0

J'ai mis à jour de Win32 Emacs 22 à Win32 Emacs 23, et j'ai trouvé le même problème: le menu de tampon d'impression ne fonctionne plus comme documenté. Et, bien sûr, je n'ai absolument pas suivi ce sujet. –

+1

re: question SO appropriée - oui, je crois que c'est approprié. Les questions Emacs et VIM sont posées et répondues tout le temps ici. –

Répondre

4

Ce n'est pas la façon « correcte », mais je l'ai fait ainsi depuis des années et il fonctionne à merveille. J'utilise PrintFile, un programme d'impression freeware (qui peut aussi être utilisé seul). Ensuite, j'ai dans mes .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)))) 

Je ne l'ai pas regardé dans les années parce que ça fonctionne, donc je suis sûr qu'il pourrait être amélioré.

+0

Fonctionne très bien sur mon XP; merci de signaler une excellente application! Cependant - comment pourrais-je (a) ajouter le support aux caractères non latins (ou UTF-8) et (b) Avoir des sauts de ligne par _words_ et non _characters_? Il se peut cependant que ces problèmes soient liés à PrintFile et non à Emacs. Merci! – marttt

+0

J'ai peur de ne pas savoir - désolé. –

1

ajoutez la ligne suivante à votre fichier emacs initialisation

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

Cela n'a eu aucun effet non plus. Peut-être mes paramètres d'imprimante sont étranges ... –

5

Je vais décrire tout pour Windows 7 avec une imprimante USB commune. Adaptez le processus si nécessaire à votre version. Le réseau peut généralement être accédé de la même manière. Il suffit d'utiliser //NetworkComputerName/SharedPrinterName au lieu de // MyComputer/MyPrinter et sauter les étapes 1.-6 ..

  1. Aller à Démarrer -> Panneau de configuration -> Matériel et audio -> Périphériques et imprimantes
  2. Rightclick votre imprimante sélectionnez « Propriétés de l'imprimante »
  3. Aller à « partage » et cochez « Partager cette imprimante » et « rendu des travaux d'impression sur les ordinateurs clients »
  4. Entrez le nom Partager: MyPrinter ou quelque chose que vous pouvez rappeler et n'a pas d'espace.
  5. Cliquez sur OK pour enregistrer vos modifications.
  6. Aller à Démarrer -> Ordinateur pour vérifier le nom de votre ordinateur dans le coin inférieur gauche (MyComputer par exemple)
  7. Dans Emacs évaluer (setq printer-name "//MyComputer/MyPrinter") ou le mettre dans votre fichier .emacs.el
  8. Terminé. Vous pouvez imprimer vos fichiers avec M-x print-buffer
+1

Ceci est la solution –

+0

Cela a fonctionné pour l'impression sans fil aussi. –

Questions connexes