2009-02-20 10 views
7

Używam Emacsa 23.0.60.1, pobranego z here, w systemie Windows XP, z drukarką sieciową skonfigurowaną jako drukarka domyślna.Jak wydrukować z Emacsa na Win32?

Jak skonfigurować Emacs do łatwego drukowania zawartości bufora?

documentation poprawionej wersji Emacsa dla Win32 wspomina o "szybkim i łatwym" drukowaniu, ale pozycja menu "Szybki wydruk" nie pojawia się, a zwykłe wpisy ("Bufor wydruku", "Bufor wydruku Postscript") nie są " wydaje się, że robi cokolwiek.

EDIT:
Mam ten sam problem z oficjalnym okna kompilacji Emacsa 22.3. Dlatego należy docenić instrukcje dotyczące konfiguracji/rozwiązywania problemów dla dowolnej wersji.

EDIT2:
poszedłem z roztworem pliku drukowanego przedstawionego przez Joe Casadonte poniżej, które działa ładnie. Nadal interesowały mnie pomysły, dlaczego "właściwy" sposób nie działa.

(Nawiasem mówiąc, jest to odpowiedni SO pytanie, będąc jedynie marginalnie programowania związanego?)

+0

Uaktualniłem z Win32 Emacs 22 do Win32 Emacs 23, i znalazłem ten sam problem: menu bufora wydruku nie działa tak jak zostało udokumentowane. I, oczywiście, zupełnie nie udało mi się na to odpowiedzieć. –

+1

re: odpowiednie pytanie SO - tak, uważam, że jest to właściwe. Pytania Emacs i VIM są tutaj zadawane i cały czas udzielane. –

Odpowiedz

4

to nie jest „właściwy” sposób, ale robiłem to w ten sposób od lat i to działa cudownie. Używam darmowego programu do drukowania PrintFile (który może być również używany jako samodzielny). Potem mam to w moim .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)))) 

Nie wyglądało na to w latach, bo to po prostu działa, więc jestem pewien, że to mogło być lepsze.

+0

Działa świetnie na moim XP; dzięki za wskazanie doskonałej aplikacji! Jednak - w jaki sposób mogę (a) dodać obsługę znaków spoza alfabetu łacińskiego (lub UTF-8) i (b) mieć linebreaks przez _words_, a nie _characters_? Mogą to być jednak problemy z PrintFile, a nie Emacs. Dzięki! – marttt

+0

Obawiam się, że nie wiem - przepraszam. –

1

dodać następującą linię do swoich plików startowych emacs

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

To też nie miało żadnego efektu. Może moje ustawienia drukarki są dziwne ... –

5

opiszę wszystko dla Windows 7 ze wspólnej drukarki USB. Dostosuj proces tam, gdzie jest to konieczne do Twojej wersji. Dostęp do sieci zwykle jest taki sam. Wystarczy użyć //NetworkComputerName/SharedPrinterName zamiast // mój_komputer/MyPrinter i pomiń kroki 1.-6 ..

  1. Przejdź do Start -> Panel sterowania -> Sprzęt i dźwięk -> Urządzenia i drukarki
  2. Kliknij prawym przyciskiem myszy drukarką wybierz „Właściwości drukarki”
  3. Przejdź do sekcji „Udostępnianie” i zaznacz „Udostępnij tę drukarkę” i „Render zadania drukowania na komputerach klienckich”
  4. Wpisz nazwę Podziel się: MyPrinter lub coś, co można zapamiętać i ma spacji.
  5. Kliknij OK, aby zapisać zmiany.
  6. idź do Start -> Komputery aby sprawdzić nazwę komputera w lewym dolnym rogu (np MyComputer)
  7. W Emacs ocenić (setq printer-name "//MyComputer/MyPrinter") lub umieścić go w pliku .emacs.el
  8. Gotowe. Możesz wydrukować swoje pliki za pomocą M-x print-buffer
+1

To jest rozwiązanie –

+0

To działało również do drukowania bezprzewodowego. –