2009-02-20 1 views
7

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

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

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

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

EDIT2:
Я пошел с решением PrintFile, представленный Джо Casadonte ниже, который работает хорошо. Меня все равно интересуют любые идеи, почему «правильный» способ не работает.

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

+0

Я обновил версию с Win32 Emacs 22 до Win32 Emacs 23 и нашел ту же проблему: меню print-buffer больше не работает как задокументировано. И, конечно же, я полностью не смог следить за этим. –

+1

re: соответствующий вопрос SO - да, я считаю, что это уместно. Вопросы Emacs и VIM задаются и отвечают все время здесь. –

ответ

4

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

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

+0

Отлично работает на моем XP; спасибо за указание на отличное приложение! Однако - как я мог (а) добавить поддержку нелатинским символам (или UTF-8) и (b) иметь разрывы строк по _words_, а не _characters_? Однако это могут быть проблемы с PrintFile, а не с Emacs. Благодаря! – marttt

+0

Боюсь, я не знаю, извините. –

1

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

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

Это тоже не имело никакого эффекта. Возможно, настройки моего принтера странные ... –

5

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

  1. Перейти к Пуск -> Панель управления -> Оборудование и звук -> Устройства и принтеры
  2. Щелкните правой кнопкой мыши ваш принтер выберите «Свойства принтера»
  3. Перейти к «Совместное использование» и установите флажок «Совместный доступ к принтеру» и «Прорисовка заданий печати на клиентских компьютерах»
  4. Введите имя общего ресурса: MyPrinter или что-то, что вы можете вспомнить и не имеет места.
  5. Нажмите «ОК», чтобы сохранить изменения.
  6. Перейти к Пуск -> Компьютер проверить имя компьютера в левом нижнем углу (например MyComputer)
  7. В Emacs оценить (setq printer-name "//MyComputer/MyPrinter") или поместить его в файл
  8. .emacs.el Done. Вы можете печатать файлы с помощью
+1

Это решение –

+0

Это также работало для беспроводной печати. –

 Смежные вопросы

  • Нет связанных вопросов^_^