Как печатать из Emacs на Win32?

Я запускаю Emacs 23.0.60.1, загруженный из здесь, в Windows XP, с сетевым принтером, настроенным в качестве принтера по умолчанию.

Как настроить Emacs для легкой печати содержимого буфера?

на документация исправленной версии Emacs для Win32 упоминает" быструю и легкую " печать, но запись меню "Быстрая печать" не отображается, а обычные записи ("буфер печати"," буфер печати Postscript"), похоже, не делают что угодно.

EDIT:
У меня такая же проблема с официальной сборкой windows Emacs 22.3. Поэтому инструкции по установке / устранению неполадок для любой версии будут оценены.

EDIT2:
Я пошел с решением PrintFile, представленным Джо Касадонте ниже, который отлично работает. Однако меня все равно интересуют любые идеи, почему "правильный" способ не работает.

(кстати, это уместен поэтому вопрос, будучи лишь незначительно связанным с программированием?)

3 ответов


Это не "правильный" способ, но я делаю это так в течение многих лет, и это работает замечательно. Я использую 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))))

Я не смотрел на него годами, потому что он просто работает, поэтому я уверен, что его можно улучшить.


я опишу все для Windows 7 с общим USB-принтером. При необходимости адаптируйте процесс к своей версии. К сети обычно можно получить доступ таким же образом. Просто используйте //NetworkComputerName/SharedPrinterName вместо / / MyComputer / MyPrinter и пропустите шаги 1.-6..

  1. на Пуск -> Панель управления -> Оборудование и звук -> устройства и принтеры
  2. щелкните правой кнопкой мыши принтер выберите "свойства принтера"
  3. перейдите в раздел " Общий доступ "и проверьте" поделиться этим принтером" и "визуализация заданий печати на клиентских компьютерах"
  4. введите имя: MyPrinter или что-то, что вы можете вспомнить и не имеет пробелов.
  5. нажмите OK, чтобы сохранить изменения.
  6. на Пуск -> Компьютер чтобы проверить имя Вашего компьютера в левом нижнем углу (e.g MyComputer)
  7. в Emacs оценить (setq printer-name "//MyComputer/MyPrinter") или положите его в свой .в Emacs.файл El
  8. сделано. Вы можете распечатать свои файлы с помощью M-x print-buffer

добавьте следующую строку в файл инициализации emacs

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