Как мне печатать из Emacs на Win32? - PullRequest
7 голосов
/ 20 февраля 2009

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

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

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

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

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

1 голос
/ 23 февраля 2009

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

(setq printer-name "//domain/printer-name")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...