;;; printing.el --- printing utilities
-;; Copyright (C) 2000-2001, 2003-2012 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2003-2014 Free Software Foundation, Inc.
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
"printing.el, v 6.9.3 <2007/12/09 vinicius>
Please send all bug fixes and enhancements to
- Vinicius Jose Latorre <viniciusjl@ig.com.br>
+ bug-gnu-emacs@gnu.org and Vinicius Jose Latorre <viniciusjl@ig.com.br>
")
;; This file is part of GNU Emacs.
(defconst pr-cygwin-system
- (and ps-windows-system (getenv "OSTYPE")
+ (and lpr-windows-system (getenv "OSTYPE")
(string-match "cygwin" (getenv "OSTYPE"))))
;; To avoid compilation gripes
-(or (fboundp 'subst-char-in-string) ; hacked from subr.el
- (defun subst-char-in-string (fromchar tochar string &optional inplace)
- "Replace FROMCHAR with TOCHAR in STRING each time it occurs.
+;; Emacs has this since at least 21.1.
+(when (featurep 'xemacs)
+ (or (fboundp 'subst-char-in-string) ; hacked from subr.el
+ (defun subst-char-in-string (fromchar tochar string &optional inplace)
+ "Replace FROMCHAR with TOCHAR in STRING each time it occurs.
Unless optional argument INPLACE is non-nil, return a new string."
- (let ((i (length string))
- (newstr (if inplace string (copy-sequence string))))
- (while (> (setq i (1- i)) 0)
- (if (eq (aref newstr i) fromchar)
- (aset newstr i tochar)))
- newstr)))
-
-
-(or (fboundp 'make-temp-file) ; hacked from subr.el
- (defun make-temp-file (prefix &optional dir-flag suffix)
+ (let ((i (length string))
+ (newstr (if inplace string (copy-sequence string))))
+ (while (> (setq i (1- i)) 0)
+ (if (eq (aref newstr i) fromchar)
+ (aset newstr i tochar)))
+ newstr))))
+
+
+;; Emacs has this since at least 21.1, but the SUFFIX argument
+;; (which this file uses) only since 22.1. So the fboundp test
+;; wasn't even correct/adequate. Whatever, no-one is using
+;; this file on older Emacs version, so it's irrelevant.
+(when (featurep 'xemacs)
+ (or (fboundp 'make-temp-file) ; hacked from subr.el
+ (defun make-temp-file (prefix &optional dir-flag suffix)
"Create a temporary file.
The returned file name (created by appending some random characters at the end
of PREFIX, and expanding against `temporary-file-directory' if necessary),
nil)
file)
;; Reset the umask.
- (set-default-file-modes umask)))))
+ (set-default-file-modes umask))))))
(eval-when-compile
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; GNU Emacs Definitions
+(eval-and-compile
+ (unless (featurep 'xemacs)
+ (defvar pr-menu-bar nil
+ "Specify Printing menu-bar entry.")))
(cond
((featurep 'xemacs) ; XEmacs
(defun pr-menu-char-width ()
(frame-char-width))
- (defvar pr-menu-bar nil
- "Specify Printing menu-bar entry.")
-
;; GNU Emacs
;; Menu binding
;; Replace existing "print" item by "Printing" item.
(eval-and-compile
(cond
- (ps-windows-system
+ (lpr-windows-system
;; GNU Emacs for Windows 9x/NT
(defun pr-menu-position (entry index horizontal)
(let ((pos (cdr (mouse-pixel-position))))
"Ensure the proper directory separator depending on the OS.
That is, if Emacs is running on DOS/Windows, ensure dos/windows-style directory
separator; otherwise, ensure unix-style directory separator."
- (if (or pr-cygwin-system ps-windows-system)
+ (if (or pr-cygwin-system lpr-windows-system)
(subst-char-in-string ?/ ?\\ path)
(subst-char-in-string ?\\ ?/ path)))
(defcustom pr-path-style
(if (and (not pr-cygwin-system)
- ps-windows-system)
+ lpr-windows-system)
'windows
'unix)
"Specify which path style to use for external commands.
(defcustom pr-txt-printer-alist
(list (list 'default lpr-command nil
(cond ((boundp 'printer-name) printer-name)
- (ps-windows-system "PRN")
+ (lpr-windows-system "PRN")
(t nil)
)))
;; Examples:
Where:
SYMBOL It's a symbol to identify a text printer. It's for
- `pr-txt-name' variable setting and for menu selection.
+ setting option `pr-txt-name' and for menu selection.
Examples:
'prt_06a
'my_printer
(defcustom pr-ps-printer-alist
(list (list 'default lpr-command nil
- (cond (ps-windows-system nil)
- (ps-lp-system "-d")
+ (cond (lpr-windows-system nil)
+ (lpr-lp-system "-d")
(t "-P"))
(or (getenv "PRINTER") (getenv "LPDEST") ps-printer-name)))
;; Examples:
Where:
SYMBOL It's a symbol to identify a PostScript printer. It's for
- `pr-ps-name' variable setting and for menu selection.
+ setting option `pr-ps-name' and for menu selection.
Examples:
'prt_06a
'my_printer
;; hacked from `temporary-file-directory' variable in files.el
(file-name-as-directory
(or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP")
- (cond (ps-windows-system "c:/temp")
+ (cond (lpr-windows-system "c:/temp")
(t "/tmp")
)))))
"Specify a directory for temporary files during printing.
(defcustom pr-gv-command
- (if ps-windows-system
+ (if lpr-windows-system
"gsview32.exe"
"gv")
"Specify path and name of the gsview/gv utility.
(defcustom pr-gs-command
- (if ps-windows-system
+ (if lpr-windows-system
"gswin32.exe"
"gs")
"Specify path and name of the ghostscript utility.
(defcustom pr-gs-switches
- (if ps-windows-system
+ (if lpr-windows-system
'("-q -dNOPAUSE -Ic:/gs/gs5.50;c:/gs/gs5.50/fonts")
'("-q -dNOPAUSE -I/usr/share/ghostscript/5.10"))
"Specify ghostscript switches. See the documentation on GS for more info.
(defcustom pr-gs-device
- (if ps-windows-system
+ (if lpr-windows-system
"mswinpr2"
"uniprint")
"Specify the ghostscript device switch value (-sDEVICE=).
The example above has two setting groups: no-duplex and
no-duplex-and-landscape. When setting no-duplex is activated
- through `inherits-from:' (see `pr-ps-utility', `pr-mode-alist'
- and `pr-ps-printer-alist'), the variables pr-file-duplex and
- pr-file-tumble are both set to nil.
+ through `inherits-from:' (see option `pr-ps-utility',
+ `pr-mode-alist' and `pr-ps-printer-alist'), the variables
+ pr-file-duplex and pr-file-tumble are both set to nil.
Now when setting no-duplex-and-landscape is activated through
`inherits-from:', the variable pr-file-landscape is set to nil
(defmacro pr-save-file-modes (&rest body)
- "Set temporally file modes to `pr-file-modes'."
- `(let ((pr--default-file-modes (default-file-modes))) ; save default
- (set-default-file-modes pr-file-modes)
- ,@body
- (set-default-file-modes pr--default-file-modes))) ; restore default
-
+ "Execute BODY with file permissions temporarily set to `pr-file-modes'."
+ (declare (obsolete with-file-modes "24.5"))
+ `(with-file-modes pr-file-modes ,@body))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Keys & Menus
(defalias 'pr-get-symbol
- (if (fboundp 'easy-menu-intern) ; hacked from easymenu.el
- 'easy-menu-intern
- (lambda (s) (if (stringp s) (intern s) s))))
+ (if (featurep 'emacs) 'easy-menu-intern ; since 22.1
+ (if (fboundp 'easy-menu-intern) ; hacked from easymenu.el
+ 'easy-menu-intern
+ (lambda (s) (if (stringp s) (intern s) s)))))
(defconst pr-menu-spec
send the image to the printer. If FILENAME is a string, save the PostScript
image in a file with that name."
(interactive (list (ps-print-preprint current-prefix-arg)))
- (pr-save-file-modes
- (let ((ps-lpr-command (pr-command pr-ps-command))
- (ps-lpr-switches pr-ps-switches)
- (ps-printer-name-option pr-ps-printer-switch)
- (ps-printer-name pr-ps-printer))
- (ps-despool filename))))
+ (with-file-modes pr-file-modes
+ (let ((ps-lpr-command (pr-command pr-ps-command))
+ (ps-lpr-switches pr-ps-switches)
+ (ps-printer-name-option pr-ps-printer-switch)
+ (ps-printer-name pr-ps-printer))
+ (ps-despool filename))))
;;;###autoload
;;;###autoload
-(defun pr-customize (&rest ignore)
+(defun pr-customize (&rest _ignore)
"Customization of the `printing' group."
(interactive)
(customize-group 'printing))
;;;###autoload
-(defun lpr-customize (&rest ignore)
+(defun lpr-customize (&rest _ignore)
"Customization of the `lpr' group."
(interactive)
(customize-group 'lpr))
;;;###autoload
-(defun pr-help (&rest ignore)
+(defun pr-help (&rest _ignore)
"Help for the printing package."
(interactive)
(pr-show-setup pr-help-message "*Printing Help*"))
;;;###autoload
-(defun pr-show-ps-setup (&rest ignore)
+(defun pr-show-ps-setup (&rest _ignore)
"Show current ps-print settings."
(interactive)
(pr-show-setup (ps-setup) "*PS Setup*"))
;;;###autoload
-(defun pr-show-pr-setup (&rest ignore)
+(defun pr-show-pr-setup (&rest _ignore)
"Show current printing settings."
(interactive)
(pr-show-setup (pr-setup) "*PR Setup*"))
;;;###autoload
-(defun pr-show-lpr-setup (&rest ignore)
+(defun pr-show-lpr-setup (&rest _ignore)
"Show current lpr settings."
(interactive)
(pr-show-setup (lpr-setup) "*LPR Setup*"))
(ps-comment-string "pr-ps-printer-switch" pr-ps-printer-switch)
(ps-comment-string "pr-ps-printer " pr-ps-printer)
(ps-comment-string "pr-cygwin-system " pr-cygwin-system)
- (ps-comment-string "ps-windows-system " ps-windows-system)
- (ps-comment-string "ps-lp-system " ps-lp-system)
+ (ps-comment-string "lpr-windows-system " lpr-windows-system)
+ (ps-comment-string "lpr-lp-system " lpr-lp-system)
nil
'(14 . pr-path-style)
'(14 . pr-path-alist)
pr-ps-printer (nth 3 ps))
(or (stringp pr-ps-command)
(setq pr-ps-command
- (cond (ps-windows-system "print")
- (ps-lp-system "lp")
+ (cond (lpr-windows-system "print")
+ (lpr-lp-system "lp")
(t "lpr")
)))
(or (stringp pr-ps-printer-switch)
(setq pr-ps-printer-switch
- (cond (ps-windows-system "/D:")
- (ps-lp-system "-d")
+ (cond (lpr-windows-system "/D:")
+ (lpr-lp-system "-d")
(t "-P")
)))
(pr-eval-alist (nthcdr 4 ps)))
pr-txt-printer (nth 2 txt)))
(or (stringp pr-txt-command)
(setq pr-txt-command
- (cond (ps-windows-system "print")
- (ps-lp-system "lp")
+ (cond (lpr-windows-system "print")
+ (lpr-lp-system "lp")
(t "lpr")
)))
(pr-update-mode-line))
(goto-char (point-max))
(insert (format "%s %S\n" cmd args)))
;; *Printing Command Output* == show any return message from command
- (pr-save-file-modes
- (setq status
- (condition-case data
- (apply 'call-process cmd nil buffer nil args)
- ((quit error)
- (error-message-string data)))))
+ (with-file-modes pr-file-modes
+ (setq status
+ (condition-case data
+ (apply 'call-process cmd nil buffer nil args)
+ ((quit error)
+ (error-message-string data)))))
;; *Printing Command Output* == show exit status
(with-current-buffer buffer
(goto-char (point-max))
(defun pr-switches (switches mess)
(or (listp switches)
(error "%S should have a list of strings" mess))
- (ps-flatten-list ; dynamic evaluation
+ (lpr-flatten-list ; dynamic evaluation
(mapcar 'ps-eval-switch switches)))
(defun pr-find-buffer-visiting (file)
(if (not (file-directory-p file))
- (find-buffer-visiting (if ps-windows-system
+ (find-buffer-visiting (if lpr-windows-system
(downcase file)
file))
(let ((truename (file-truename file))
(defun pr-text2ps (kind n-up filename &optional from to)
- (pr-save-file-modes
- (let ((ps-n-up-printing n-up)
- (ps-spool-config (and (eq ps-spool-config 'setpagedevice)
- 'setpagedevice)))
- (pr-delete-file-if-exists filename)
- (cond (pr-faces-p
- (cond (pr-spool-p
- ;; pr-faces-p and pr-spool-p
- ;; here FILENAME arg is ignored
- (cond ((eq kind 'buffer)
- (ps-spool-buffer-with-faces))
- ((eq kind 'region)
- (ps-spool-region-with-faces (or from (point))
- (or to (mark))))
- ))
- ;; pr-faces-p and not pr-spool-p
- ((eq kind 'buffer)
- (ps-print-buffer-with-faces filename))
- ((eq kind 'region)
- (ps-print-region-with-faces (or from (point))
- (or to (mark)) filename))
- ))
- (pr-spool-p
- ;; not pr-faces-p and pr-spool-p
- ;; here FILENAME arg is ignored
- (cond ((eq kind 'buffer)
- (ps-spool-buffer))
- ((eq kind 'region)
- (ps-spool-region (or from (point)) (or to (mark))))
- ))
- ;; not pr-faces-p and not pr-spool-p
- ((eq kind 'buffer)
- (ps-print-buffer filename))
- ((eq kind 'region)
- (ps-print-region (or from (point)) (or to (mark)) filename))
- ))))
+ (with-file-modes pr-file-modes
+ (let ((ps-n-up-printing n-up)
+ (ps-spool-config (and (eq ps-spool-config 'setpagedevice)
+ 'setpagedevice)))
+ (pr-delete-file-if-exists filename)
+ (cond (pr-faces-p
+ (cond (pr-spool-p
+ ;; pr-faces-p and pr-spool-p
+ ;; here FILENAME arg is ignored
+ (cond ((eq kind 'buffer)
+ (ps-spool-buffer-with-faces))
+ ((eq kind 'region)
+ (ps-spool-region-with-faces (or from (point))
+ (or to (mark))))
+ ))
+ ;; pr-faces-p and not pr-spool-p
+ ((eq kind 'buffer)
+ (ps-print-buffer-with-faces filename))
+ ((eq kind 'region)
+ (ps-print-region-with-faces (or from (point))
+ (or to (mark)) filename))
+ ))
+ (pr-spool-p
+ ;; not pr-faces-p and pr-spool-p
+ ;; here FILENAME arg is ignored
+ (cond ((eq kind 'buffer)
+ (ps-spool-buffer))
+ ((eq kind 'region)
+ (ps-spool-region (or from (point)) (or to (mark))))
+ ))
+ ;; not pr-faces-p and not pr-spool-p
+ ((eq kind 'buffer)
+ (ps-print-buffer filename))
+ ((eq kind 'region)
+ (ps-print-region (or from (point)) (or to (mark)) filename))
+ ))))
(defun pr-command (command)
(pr-dosify-file-name
(or (pr-find-command command)
(pr-path-command (cond (pr-cygwin-system 'cygwin)
- (ps-windows-system 'windows)
+ (lpr-windows-system 'windows)
(t 'unix))
(file-name-nondirectory command)
nil)
(defun pr-find-command (cmd)
- (if ps-windows-system
+ (if lpr-windows-system
;; windows system
(let ((ext (cons (file-name-extension cmd t)
(list ".exe" ".bat" ".com")))
(pr-insert-checkbox
"\n "
'pr-i-region
- #'(lambda (widget &rest ignore)
+ #'(lambda (widget &rest _ignore)
(let ((region-p (pr-interface-save
(ps-mark-active-p))))
(cond ((null (widget-value widget)) ; widget is nil
(pr-insert-checkbox
" "
'pr-i-mode
- #'(lambda (widget &rest ignore)
+ #'(lambda (widget &rest _ignore)
(let ((mode-p (pr-interface-save
(pr-mode-alist-p))))
(cond
(widget-create 'regexp
:size 58
:format "\n File Regexp : %v\n"
- :notify (lambda (widget &rest ignore)
+ :notify (lambda (widget &rest _ignore)
(setq pr-i-regexp (widget-value widget)))
pr-i-regexp)
;; 1b. Directory: List Directory Entry
(pr-insert-checkbox
" "
'pr-i-despool
- #'(lambda (widget &rest ignore)
+ #'(lambda (widget &rest _ignore)
(if pr-spool-p
(setq pr-i-despool (not pr-i-despool))
(ding)
'integer
:size 3
:format "\n N-Up : %v"
- :notify (lambda (widget &rest ignore)
+ :notify (lambda (widget &rest _ignore)
(let ((value (if (string= (widget-apply widget :value-get) "")
0
(widget-value widget))))
;; 4. Settings:
;; 4. Settings: Landscape Auto Region Verbose
(pr-insert-checkbox "\n\n " 'ps-landscape-mode
- #'(lambda (&rest ignore)
+ #'(lambda (&rest _ignore)
(setq ps-landscape-mode (not ps-landscape-mode)
pr-file-landscape ps-landscape-mode))
" Landscape ")
(pr-insert-toggle 'ps-zebra-stripes " Zebra Stripes")
(pr-insert-checkbox " "
'pr-spool-p
- #'(lambda (&rest ignore)
+ #'(lambda (&rest _ignore)
(setq pr-spool-p (not pr-spool-p))
(unless pr-spool-p
(setq pr-i-despool nil)
;; 4. Settings: Duplex Print with faces
(pr-insert-checkbox "\n "
'ps-spool-duplex
- #'(lambda (&rest ignore)
+ #'(lambda (&rest _ignore)
(setq ps-spool-duplex (not ps-spool-duplex)
pr-file-duplex ps-spool-duplex))
" Duplex ")
;; 4. Settings: Tumble Print via Ghostscript
(pr-insert-checkbox "\n "
'ps-spool-tumble
- #'(lambda (&rest ignore)
+ #'(lambda (&rest _ignore)
(setq ps-spool-tumble (not ps-spool-tumble)
pr-file-tumble ps-spool-tumble))
" Tumble ")
;; 5. Customize:
(pr-insert-italic "\n\nCustomize : " 2 11)
(pr-insert-button 'pr-customize "printing" " ")
- (pr-insert-button #'(lambda (&rest ignore) (ps-print-customize))
+ (pr-insert-button #'(lambda (&rest _ignore) (ps-print-customize))
"ps-print" " ")
(pr-insert-button 'lpr-customize "lpr"))
(pr-insert-button 'pr-kill-help "Kill All Printing Help Buffer"))
-(defun pr-kill-help (&rest ignore)
+(defun pr-kill-help (&rest _ignore)
"Kill all printing help buffer."
(interactive)
(let ((help '("*Printing Interface Help*" "*Printing Help*"
(recenter (- (window-height) 2)))
-(defun pr-interface-quit (&rest ignore)
+(defun pr-interface-quit (&rest _ignore)
"Kill the printing buffer interface and quit."
(interactive)
(kill-buffer pr-buffer-name)
(set-window-configuration pr-i-window-configuration))
-(defun pr-interface-help (&rest ignore)
+(defun pr-interface-help (&rest _ignore)
"printing buffer interface help."
(interactive)
(pr-show-setup pr-interface-help-message "*Printing Interface Help*"))
-(defun pr-interface-txt-print (&rest ignore)
+(defun pr-interface-txt-print (&rest _ignore)
"Print using lpr package."
(interactive)
(condition-case data
(message "%s" (error-message-string data)))))
-(defun pr-interface-printify (&rest ignore)
+(defun pr-interface-printify (&rest _ignore)
"Printify a buffer."
(interactive)
(condition-case data
(message "%s" (error-message-string data)))))
-(defun pr-interface-ps-print (&rest ignore)
+(defun pr-interface-ps-print (&rest _ignore)
"Print using ps-print package."
(interactive)
(pr-interface-ps 'pr-despool-ps-print 'pr-ps-directory-ps-print
'pr-ps-buffer-ps-print))
-(defun pr-interface-preview (&rest ignore)
+(defun pr-interface-preview (&rest _ignore)
"Preview a PostScript file."
(interactive)
(pr-interface-ps 'pr-despool-preview 'pr-ps-directory-preview
(defun pr-i-directory ()
- (or (and (file-directory-p pr-i-directory)
- (file-readable-p pr-i-directory))
+ (or (file-accessible-directory-p pr-i-directory)
(error "Please specify be a readable directory")))
-(defun pr-interface-directory (widget &rest ignore)
+(defun pr-interface-directory (widget &rest _ignore)
(and pr-buffer-verbose
(message "You can use M-TAB or ESC TAB for file completion"))
(let ((dir (widget-value widget)))
- (and (file-directory-p dir)
- (file-readable-p dir)
+ (and (file-accessible-directory-p dir)
(setq pr-i-directory dir))))
-(defun pr-interface-infile (widget &rest ignore)
+(defun pr-interface-infile (widget &rest _ignore)
(and pr-buffer-verbose
(message "You can use M-TAB or ESC TAB for file completion"))
(let ((file (widget-value widget)))
(setq pr-i-ps-file file))))
-(defun pr-interface-outfile (widget &rest ignore)
+(defun pr-interface-outfile (widget &rest _ignore)
(setq pr-i-answer-yes nil)
(and pr-buffer-verbose
(message "You can use M-TAB or ESC TAB for file completion"))
(defun pr-insert-toggle (var-sym label)
(widget-create 'checkbox
- :notify `(lambda (&rest ignore)
+ :notify `(lambda (&rest _ignore)
(setq ,var-sym (not ,var-sym)))
(symbol-value var-sym))
(widget-insert label))
:format "%v"
:inline t
:value ,var-sym
- :notify (lambda (widget &rest ignore)
+ :notify (lambda (widget &rest _ignore)
(setq ,var-sym (widget-value widget))
,@body)
:void '(choice-item :format "%[%t%]"
'radio-button
:format " %[%v%]"
:value (eq ,var-sym (quote ,sym))
- :notify (lambda (&rest ignore)
+ :notify (lambda (&rest _ignore)
(setq ,var-sym (quote ,sym))
(pr-update-radio-button (quote ,var-sym)))))))
(put var-sym 'pr-widget-list (cons (cons wid sym) wid-list))))