From 6367b616326d3ea42a97f6778da27d97c11607b9 Mon Sep 17 00:00:00 2001 From: Vinicius Jose Latorre Date: Sun, 14 Nov 2004 00:47:34 +0000 Subject: [PATCH] interactive-p & file permission bits --- lisp/ChangeLog | 39 ++ lisp/printing.el | 1017 +++++++++++++++++++++++----------------------- 2 files changed, 537 insertions(+), 519 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 23ac7d6e395..98644202476 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,42 @@ +2004-11-13 Vinicius Jose Latorre + + * printing.el: Doc fix. Insert :version tag into all defcustom. + Handle interactive-p as is recommended in Emacs Lisp Reference. Set + the file permission bits for newly created files. Reported by Glenn + Morris . The printing menu + specification (in `pr-menu-spec') was merged. Suggested by Stefan + Monnier . + (pr-version): New version number (6.8.3). + (pr-file-modes): New option. + (pr-interactive-p): New var. + (pr-save-interactive, pr-save-file-modes): New macros. + (pr-setup): Code fix. + (pr-menu-spec): Menu specification merged. + (pr-call-process, pr-text2ps): Set file permission bits. + (pr-despool-print): Set file permission bits. Handle interactive-p as + is recommended. + (pr-interface, pr-ps-directory-preview) + (pr-ps-directory-using-ghostscript, pr-ps-directory-print) + (pr-ps-directory-ps-print, pr-ps-buffer-preview) + (pr-ps-buffer-using-ghostscript, pr-ps-buffer-print) + (pr-ps-buffer-ps-print, pr-ps-region-preview) + (pr-ps-region-using-ghostscript, pr-ps-region-print) + (pr-ps-region-ps-print, pr-ps-mode-preview) + (pr-ps-mode-using-ghostscript, pr-ps-mode-print, pr-ps-mode-ps-print) + (pr-printify-directory, pr-txt-directory, pr-despool-preview) + (pr-despool-using-ghostscript, pr-despool-ps-print) + (pr-ps-file-up-preview, pr-ps-file-using-ghostscript) + (pr-ps-file-up-ps-print, pr-toggle-file-duplex, pr-toggle-file-tumble) + (pr-toggle-file-landscape, pr-toggle-ghostscript, pr-toggle-faces) + (pr-toggle-spool, pr-toggle-duplex, pr-toggle-tumble) + (pr-toggle-landscape, pr-toggle-upside-down, pr-toggle-line) + (pr-toggle-zebra, pr-toggle-header, pr-toggle-header-frame) + (pr-toggle-lock, pr-toggle-region, pr-toggle-mode, pr-ps-name) + (pr-txt-name, pr-ps-utility, pr-ps-fast-fire, pr-txt-fast-fire) + (pr-menu-lock, pr-update-menus, pr-ps-utility-args) + (pr-set-outfilename, pr-interface-ps-print, pr-interface-preview): + Handle interactive-p as is recommended. + 2004-11-13 Daniel Pfeiffer * progmodes/cc-mode.el (c-basic-common-initc-font-lock-init) diff --git a/lisp/printing.el b/lisp/printing.el index 003e6893428..2095ca58c2c 100644 --- a/lisp/printing.el +++ b/lisp/printing.el @@ -5,13 +5,13 @@ ;; Author: Vinicius Jose Latorre ;; Maintainer: Vinicius Jose Latorre -;; Time-stamp: <2004/11/11 23:54:13 vinicius> +;; Time-stamp: <2004/11/13 21:36:38 vinicius> ;; Keywords: wp, print, PostScript -;; Version: 6.8.2 +;; Version: 6.8.3 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ -(defconst pr-version "6.8.2" - "printing.el, v 6.8.2 <2004/11/11 vinicius> +(defconst pr-version "6.8.3" + "printing.el, v 6.8.3 <2004/11/13 vinicius> Please send all bug fixes and enhancements to Vinicius Jose Latorre @@ -440,15 +440,19 @@ Please send all bug fixes and enhancements to ;; ;; Current global keyboard mapping for GNU Emacs is: ;; -;; (global-set-key [print] 'pr-ps-fast-fire) -;; (global-set-key [M-print] 'pr-ps-mode-using-ghostscript) -;; (global-set-key [C-print] 'pr-txt-fast-fire) +;; (global-set-key [print] 'pr-ps-fast-fire) +;; (global-set-key [M-print] 'pr-ps-mode-using-ghostscript) +;; (global-set-key [S-print] 'pr-ps-mode-using-ghostscript) +;; (global-set-key [C-print] 'pr-txt-fast-fire) +;; (global-set-key [C-M-print] 'pr-txt-fast-fire) ;; ;; And for XEmacs is: ;; -;; (global-set-key 'f22 'pr-ps-fast-fire) -;; (global-set-key '(meta f22) 'pr-ps-mode-using-ghostscript) -;; (global-set-key '(control f22) 'pr-txt-fast-fire) +;; (global-set-key 'f22 'pr-ps-fast-fire) +;; (global-set-key '(meta f22) 'pr-ps-mode-using-ghostscript) +;; (global-set-key '(shift f22) 'pr-ps-mode-using-ghostscript) +;; (global-set-key '(control f22) 'pr-txt-fast-fire) +;; (global-set-key '(control meta f22) 'pr-txt-fast-fire) ;; ;; As a suggestion of global keyboard mapping for some `printing' commands: ;; @@ -486,6 +490,9 @@ Please send all bug fixes and enhancements to ;; ;; `pr-ps-temp-file' Specify PostScript temporary file name. ;; +;; `pr-file-modes' Specify the file permission bits for newly +;; created files. +;; ;; `pr-gv-command' Specify path and name of the gsview/gv ;; utility. ;; @@ -943,6 +950,9 @@ Please send all bug fixes and enhancements to ;; Acknowledgments ;; --------------- ;; +;; Thanks to Stefan Monnier for GNU Emacs and XEmacs +;; printing menu (in `pr-menu-spec') merging suggestion. +;; ;; Thanks to Lennart Borgman for gsprint ;; suggestion (see tip 5 in section Tips). ;; @@ -1119,6 +1129,7 @@ Valid values are: :type '(choice :tag "Path style" (const :tag "Windows 9x/NT Style (\\)" :value windows) (const :tag "Unix Style (/)" :value unix)) + :version "20" :group 'printing) @@ -1230,6 +1241,7 @@ Examples: :tag "Directory" (string :value "") (symbol :value symbol))))) + :version "20" :group 'printing) @@ -1244,6 +1256,7 @@ modified by other means (for example, a lisp function), use `pr-update-menus' function (see it for documentation) to update text printer menu." :type 'symbol :set 'pr-txt-name-custom-set + :version "20" :group 'printing) @@ -1356,6 +1369,7 @@ Examples: (const :tag "None" nil) string))) :set 'pr-alist-custom-set + :version "20" :group 'printing) @@ -1370,6 +1384,7 @@ modified by other means (for example, a lisp function), use `pr-update-menus' function (see it for documentation) to update PostScript printer menu." :type 'symbol :set 'pr-ps-name-custom-set + :version "20" :group 'printing) @@ -1564,6 +1579,7 @@ Examples: (sexp :tag "Value"))) )) :set 'pr-alist-custom-set + :version "20" :group 'printing) @@ -1578,14 +1594,34 @@ Examples: ((memq system-type '(vax-vms axp-vms)) "SYS$SCRATCH:") (t "/tmp") ))))) - "*Specify a directory for temporary files during printing." + "*Specify a directory for temporary files during printing. + +See also `pr-ps-temp-file' and `pr-file-modes'." :type '(directory :tag "Temporary Directory") + :version "20" :group 'printing) (defcustom pr-ps-temp-file "prspool.ps" - "*Specify PostScript temporary file name." + "*Specify PostScript temporary file name. + +See also `pr-temp-dir' and `pr-file-modes'." :type '(file :tag "PostScript Temporary File Name") + :version "20" + :group 'printing) + + +;; It uses 0600 as default instead of (default-file-modes). +;; So, by default, only the session owner have permission to deal with files +;; generated by `printing'. +(defcustom pr-file-modes ?\600 + "*Specify the file permission bits for newly created files. + +It should be an integer; only the low 9 bits are used. + +See also `pr-temp-dir' and `pr-ps-temp-file'." + :type '(integer :tag "File Permission Bits") + :version "21.3" :group 'printing) @@ -1597,6 +1633,7 @@ Examples: See also `pr-path-alist'." :type '(string :tag "Ghostview Utility") + :version "20" :group 'printing) @@ -1608,6 +1645,7 @@ See also `pr-path-alist'." See also `pr-path-alist'." :type '(string :tag "Ghostscript Utility") + :version "20" :group 'printing) @@ -1638,6 +1676,7 @@ To see ghostscript documentation for more information: located in the same directory as gswin32.exe. - for brief documentation, type: gswin32.exe -h" :type '(repeat (string :tag "Ghostscript Switch")) + :version "20" :group 'printing) @@ -1654,6 +1693,7 @@ A note on the gs switches: See `pr-gs-switches' for documentation. See also `pr-ps-printer-alist'." :type '(string :tag "Ghostscript Device") + :version "20" :group 'printing) @@ -1667,6 +1707,7 @@ A note on the gs switches: See `pr-gs-switches' for documentation. See also `pr-ps-printer-alist'." :type '(integer :tag "Ghostscript Resolution") + :version "20" :group 'printing) @@ -1679,30 +1720,35 @@ ghostscript to print a PostScript file. In GNU or Unix system, if ghostscript is set as a PostScript filter, this variable should be nil." :type 'boolean + :version "20" :group 'printing) (defcustom pr-faces-p nil "*Non-nil means print with face attributes." :type 'boolean + :version "20" :group 'printing) (defcustom pr-spool-p nil "*Non-nil means spool printing in a buffer." :type 'boolean + :version "20" :group 'printing) (defcustom pr-file-landscape nil "*Non-nil means print PostScript file in landscape orientation." :type 'boolean + :version "20" :group 'printing) (defcustom pr-file-duplex nil "*Non-nil means print PostScript file in duplex mode." :type 'boolean + :version "20" :group 'printing) @@ -1714,6 +1760,7 @@ right. If tumble is on, produces a printing suitable for binding at the top or bottom." :type 'boolean + :version "20" :group 'printing) @@ -1726,6 +1773,7 @@ When this variable is non-nil, the `*-buffer*' commands will behave like `*-region*' commands, that is, `*-buffer*' commands will print only the region marked instead of all buffer." :type 'boolean + :version "20" :group 'printing) @@ -1737,6 +1785,7 @@ and `*-region*' commands will behave like `*-mode*' commands; otherwise, `*-buffer*' commands will print the current buffer and `*-region*' commands will print the current region." :type 'boolean + :version "20" :group 'printing) @@ -1937,6 +1986,7 @@ DEFAULT It's a way to set default values when this entry is selected. (variable :tag "Other")) (sexp :tag "Value"))) )) + :version "20" :group 'printing) @@ -1954,6 +2004,7 @@ NOTE: Don't forget to download and install the utilities declared on `pr-ps-utility-alist'." :type '(symbol :tag "PS File Utility") :set 'pr-ps-utility-custom-set + :version "20" :group 'printing) @@ -2138,6 +2189,7 @@ Examples: (sexp :tag "Value"))) )) :set 'pr-alist-custom-set + :version "20" :group 'printing) @@ -2146,6 +2198,7 @@ Examples: See also `pr-menu-char-height' and `pr-menu-char-width'." :type 'boolean + :version "20" :group 'printing) @@ -2161,6 +2214,7 @@ menu, so don't forget to adjust it if menu position is not ok. See also `pr-menu-lock' and `pr-menu-char-width'." :type 'integer + :version "20" :group 'printing) @@ -2176,6 +2230,7 @@ menu, so don't forget to adjust it if menu position is not ok. See also `pr-menu-lock' and `pr-menu-char-height'." :type 'integer + :version "20" :group 'printing) @@ -2292,6 +2347,7 @@ SETTING It's a cons like: (variable :tag "Other")) (sexp :tag "Value"))) )) + :version "20" :group 'printing) @@ -2345,6 +2401,7 @@ Any other value is ignored." (const postscript-process) (const printing) (const help))) + :version "20" :group 'printing) @@ -2356,6 +2413,7 @@ happens when printing: Error: could not open \"c:\\temp\\prspool.ps\" for reading." :type 'boolean + :version "20" :group 'printing) @@ -2369,6 +2427,7 @@ It's used by `pr-ps-directory-preview', `pr-ps-directory-using-ghostscript', `pr-ps-directory-print', `pr-ps-directory-ps-print', `pr-printify-directory' and `pr-txt-directory'." :type 'boolean + :version "20" :group 'printing) @@ -2377,6 +2436,7 @@ and `pr-txt-directory'." It's used by `pr-interface'." :type 'string + :version "20" :group 'printing) @@ -2390,6 +2450,7 @@ NOTE: Case is important for matching, that is, `case-fold-search' is always It's used by `pr-interface'." :type '(repeat (regexp :tag "Buffer Name Regexp")) + :version "20" :group 'printing) @@ -2398,6 +2459,7 @@ It's used by `pr-interface'." It's used by `pr-interface'." :type 'boolean + :version "20" :group 'printing) @@ -2444,6 +2506,32 @@ See `pr-ps-printer-alist'.") "Specify Printing menu-bar entry.") +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Macros + + +(defvar pr-interactive-p nil + "Save the `interactive-p' result value. + +It's used by `pr-save-interactive' (which see).") + + +(defmacro pr-save-interactive (&rest body) + "Save the `interactive-p' result value using `let'. + +It uses `pr-interactive-p' var (which see)." + `(let ((pr-interactive-p (or pr-interactive-p (interactive-p)))) + ,@body)) + + +(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 + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Keys & Menus @@ -2489,33 +2577,46 @@ See `pr-ps-printer-alist'.") (defconst pr-menu-spec - (cond - ((eq ps-print-emacs-type 'emacs) ; GNU Emacs - '( + ;; Menu mapping: + ;; unfortunately XEmacs doesn't support :active or :visible + ;; for submenus, only for items. + ;; It uses :included instead of :active or :visible. + ;; Also, XEmacs doesn't support :help tag. + (let ((pr-:active (if (eq ps-print-emacs-type 'emacs) + :active ; GNU Emacs + :included)) ; XEmacs + (pr-:visible (if (eq ps-print-emacs-type 'emacs) + :visible ; GNU Emacs + :included)) ; XEmacs + pr-:help) + (if (eq ps-print-emacs-type 'emacs) + (defalias 'pr-:help #'(lambda (text) (list :help text))) ; GNU Emacs + (defalias 'pr-:help 'ignore)) ; XEmacs + `( ["Printing Interface" pr-interface - :help "Use buffer interface instead of menu interface"] + ,@(pr-:help "Use buffer interface instead of menu interface")] "--" - ("PostScript Preview" :visible (pr-visible-p 'postscript) - :help "Preview PostScript instead of sending to printer" - ("Directory" :active (not pr-spool-p) + ("PostScript Preview" ,pr-:visible (pr-visible-p 'postscript) + ,@(pr-:help "Preview PostScript instead of sending to printer") + ("Directory" ,pr-:active (not pr-spool-p) ["1-up" (pr-ps-directory-preview 1 nil nil t) t] ["2-up" (pr-ps-directory-preview 2 nil nil t) t] ["4-up" (pr-ps-directory-preview 4 nil nil t) t] ["Other..." (pr-ps-directory-preview nil nil nil t) :keys "\\[pr-ps-buffer-preview]"]) - ("Buffer" :active (not pr-spool-p) + ("Buffer" ,pr-:active (not pr-spool-p) ["1-up" (pr-ps-buffer-preview 1 t) t] ["2-up" (pr-ps-buffer-preview 2 t) t] ["4-up" (pr-ps-buffer-preview 4 t) t] ["Other..." (pr-ps-buffer-preview nil t) :keys "\\[pr-ps-buffer-preview]"]) - ("Region" :active (and (not pr-spool-p) (ps-mark-active-p)) + ("Region" ,pr-:active (and (not pr-spool-p) (ps-mark-active-p)) ["1-up" (pr-ps-region-preview 1 t) t] ["2-up" (pr-ps-region-preview 2 t) t] ["4-up" (pr-ps-region-preview 4 t) t] ["Other..." (pr-ps-region-preview nil t) :keys "\\[pr-ps-region-preview]"]) - ("Mode" :active (and (not pr-spool-p) (pr-mode-alist-p)) + ("Mode" ,pr-:active (and (not pr-spool-p) (pr-mode-alist-p)) ["1-up" (pr-ps-mode-preview 1 t) t] ["2-up" (pr-ps-mode-preview 2 t) t] ["4-up" (pr-ps-mode-preview 4 t) t] @@ -2524,10 +2625,10 @@ See `pr-ps-printer-alist'.") ("File" ["No Preprocessing..." (call-interactively 'pr-ps-file-preview) :keys "\\[pr-ps-file-preview]" - :help "Preview PostScript file"] + ,@(pr-:help "Preview PostScript file")] "--" ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist - :help "Select PostScript utility"] + ,@(pr-:help "Select PostScript utility")] "--" ["1-up..." (pr-ps-file-up-preview 1 t t) pr-ps-utility-alist] ["2-up..." (pr-ps-file-up-preview 2 t t) pr-ps-utility-alist] @@ -2537,21 +2638,21 @@ See `pr-ps-printer-alist'.") "--" ["Landscape" pr-toggle-file-landscape :style toggle :selected pr-file-landscape - :help "Toggle landscape for PostScript file" + ,@(pr-:help "Toggle landscape for PostScript file") :active pr-ps-utility-alist] ["Duplex" pr-toggle-file-duplex :style toggle :selected pr-file-duplex - :help "Toggle duplex for PostScript file" + ,@(pr-:help "Toggle duplex for PostScript file") :active pr-ps-utility-alist] ["Tumble" pr-toggle-file-tumble :style toggle :selected pr-file-tumble - :help "Toggle tumble for PostScript file" + ,@(pr-:help "Toggle tumble for PostScript file") :active (and pr-file-duplex pr-ps-utility-alist)]) ["Despool..." (call-interactively 'pr-despool-preview) :active pr-spool-p :keys "\\[pr-despool-preview]" - :help "Despool PostScript buffer to printer or file (C-u)"]) - ("PostScript Print" :visible (pr-visible-p 'postscript) - :help "Send PostScript to printer or file (C-u)" + ,@(pr-:help "Despool PostScript buffer to printer or file (C-u)")]) + ("PostScript Print" ,pr-:visible (pr-visible-p 'postscript) + ,@(pr-:help "Send PostScript to printer or file (C-u)") ("Directory" ["1-up" (pr-ps-directory-ps-print 1 nil nil t) t] ["2-up" (pr-ps-directory-ps-print 2 nil nil t) t] @@ -2564,13 +2665,13 @@ See `pr-ps-printer-alist'.") ["4-up" (pr-ps-buffer-ps-print 4 t) t] ["Other..." (pr-ps-buffer-ps-print nil t) :keys "\\[pr-ps-buffer-ps-print]"]) - ("Region" :active (ps-mark-active-p) + ("Region" ,pr-:active (ps-mark-active-p) ["1-up" (pr-ps-region-ps-print 1 t) t] ["2-up" (pr-ps-region-ps-print 2 t) t] ["4-up" (pr-ps-region-ps-print 4 t) t] ["Other..." (pr-ps-region-ps-print nil t) :keys "\\[pr-ps-region-ps-print]"]) - ("Mode" :active (pr-mode-alist-p) + ("Mode" ,pr-:active (pr-mode-alist-p) ["1-up" (pr-ps-mode-ps-print 1 t) t] ["2-up" (pr-ps-mode-ps-print 2 t) t] ["4-up" (pr-ps-mode-ps-print 4 t) t] @@ -2579,10 +2680,10 @@ See `pr-ps-printer-alist'.") ("File" ["No Preprocessing..." (call-interactively 'pr-ps-file-ps-print) :keys "\\[pr-ps-file-ps-print]" - :help "Send PostScript file to printer"] + ,@(pr-:help "Send PostScript file to printer")] "--" ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist - :help "Select PostScript utility"] + ,@(pr-:help "Select PostScript utility")] "--" ["1-up..." (pr-ps-file-up-ps-print 1 t t) pr-ps-utility-alist] ["2-up..." (pr-ps-file-up-ps-print 2 t t) pr-ps-utility-alist] @@ -2592,37 +2693,38 @@ See `pr-ps-printer-alist'.") "--" ["Landscape" pr-toggle-file-landscape :style toggle :selected pr-file-landscape - :help "Toggle landscape for PostScript file" + ,@(pr-:help "Toggle landscape for PostScript file") :active pr-ps-utility-alist] ["Duplex" pr-toggle-file-duplex :style toggle :selected pr-file-duplex - :help "Toggle duplex for PostScript file" + ,@(pr-:help "Toggle duplex for PostScript file") :active pr-ps-utility-alist] ["Tumble" pr-toggle-file-tumble :style toggle :selected pr-file-tumble - :help "Toggle tumble for PostScript file" + ,@(pr-:help "Toggle tumble for PostScript file") :active (and pr-file-duplex pr-ps-utility-alist)]) ["Despool..." (call-interactively 'pr-despool-ps-print) :active pr-spool-p :keys "\\[pr-despool-ps-print]" - :help "Despool PostScript buffer to printer or file (C-u)"]) + ,@(pr-:help "Despool PostScript buffer to printer or file (C-u)")]) ["PostScript Printers" pr-update-menus :active pr-ps-printer-alist :included (pr-visible-p 'postscript) - :help "Select PostScript printer"] + ,@(pr-:help "Select PostScript printer")] "--" - ("Printify" :visible (pr-visible-p 'text) - :help "Replace non-printing chars with printable representations." + ("Printify" ,pr-:visible (pr-visible-p 'text) + ,@(pr-:help + "Replace non-printing chars with printable representations.") ["Directory" pr-printify-directory t] ["Buffer" pr-printify-buffer t] ["Region" pr-printify-region (ps-mark-active-p)]) - ("Print" :visible (pr-visible-p 'text) - :help "Send text to printer" + ("Print" ,pr-:visible (pr-visible-p 'text) + ,@(pr-:help "Send text to printer") ["Directory" pr-txt-directory t] ["Buffer" pr-txt-buffer t] ["Region" pr-txt-region (ps-mark-active-p)] ["Mode" pr-txt-mode (pr-mode-alist-p)]) ["Text Printers" pr-update-menus :active pr-txt-printer-alist :included (pr-visible-p 'text) - :help "Select text printer"] + ,@(pr-:help "Select text printer")] "--" ["Landscape" pr-toggle-landscape :style toggle :selected ps-landscape-mode @@ -2648,8 +2750,8 @@ See `pr-ps-printer-alist'.") ["Upside-Down" pr-toggle-upside-down :style toggle :selected ps-print-upside-down :included (pr-visible-p 'postscript-options)] - ("Print All Pages" :visible (pr-visible-p 'postscript-options) - :help "Select odd/even pages/sheets to print" + ("Print All Pages" ,pr-:visible (pr-visible-p 'postscript-options) + ,@(pr-:help "Select odd/even pages/sheets to print") ["All Pages" (pr-even-or-odd-pages nil) :style radio :selected (eq ps-even-or-odd-pages nil)] ["Even Pages" (pr-even-or-odd-pages 'even-page) @@ -2664,15 +2766,15 @@ See `pr-ps-printer-alist'.") ["Spool Buffer" pr-toggle-spool :style toggle :selected pr-spool-p :included (pr-visible-p 'postscript-process) - :help "Toggle PostScript spooling"] + ,@(pr-:help "Toggle PostScript spooling")] ["Print with faces" pr-toggle-faces :style toggle :selected pr-faces-p :included (pr-visible-p 'postscript-process) - :help "Toggle PostScript printing with faces"] + ,@(pr-:help "Toggle PostScript printing with faces")] ["Print via Ghostscript" pr-toggle-ghostscript :style toggle :selected pr-print-using-ghostscript :included (pr-visible-p 'postscript-process) - :help "Toggle PostScript generation using ghostscript"] + ,@(pr-:help "Toggle PostScript generation using ghostscript")] "--" ["Auto Region" pr-toggle-region :style toggle :selected pr-auto-region @@ -2684,205 +2786,16 @@ See `pr-ps-printer-alist'.") :style toggle :selected pr-menu-lock :included (pr-visible-p 'printing)] "--" - ("Customize" :visible (pr-visible-p 'help) + ("Customize" ,pr-:visible (pr-visible-p 'help) ["printing" pr-customize t] ["ps-print" ps-print-customize t] ["lpr" lpr-customize t]) - ("Show Settings" :visible (pr-visible-p 'help) + ("Show Settings" ,pr-:visible (pr-visible-p 'help) ["printing" pr-show-pr-setup t] ["ps-print" pr-show-ps-setup t] ["lpr" pr-show-lpr-setup t]) ["Help" pr-help :active t :included (pr-visible-p 'help)] - )) - - - ((eq ps-print-emacs-type 'xemacs) ; XEmacs - ;; Menu mapping: - ;; unfortunately XEmacs doesn't support :active or :visible - ;; for submenus, only for items. - ;; It uses :included instead of :active or :visible. - ;; Also, XEmacs doesn't support :help tag. - '( - ["Printing Interface" pr-interface] - "--" - ("PostScript Preview" :included (pr-visible-p 'postscript) - ("Directory" :included (not pr-spool-p) - ["1-up" (pr-ps-directory-preview 1 nil nil t) t] - ["2-up" (pr-ps-directory-preview 2 nil nil t) t] - ["4-up" (pr-ps-directory-preview 4 nil nil t) t] - ["Other..." (pr-ps-directory-preview nil nil nil t) - :keys "\\[pr-ps-buffer-preview]"]) - ("Buffer" :included (not pr-spool-p) - ["1-up" (pr-ps-buffer-preview 1 t) t] - ["2-up" (pr-ps-buffer-preview 2 t) t] - ["4-up" (pr-ps-buffer-preview 4 t) t] - ["Other..." (pr-ps-buffer-preview nil t) - :keys "\\[pr-ps-buffer-preview]"]) - ("Region" :included (and (not pr-spool-p) (ps-mark-active-p)) - ["1-up" (pr-ps-region-preview 1 t) t] - ["2-up" (pr-ps-region-preview 2 t) t] - ["4-up" (pr-ps-region-preview 4 t) t] - ["Other..." (pr-ps-region-preview nil t) - :keys "\\[pr-ps-region-preview]"]) - ("Mode" :included (and (not pr-spool-p) (pr-mode-alist-p)) - ["1-up" (pr-ps-mode-preview 1 t) t] - ["2-up" (pr-ps-mode-preview 2 t) t] - ["4-up" (pr-ps-mode-preview 4 t) t] - ["Other..." (pr-ps-mode-preview nil t) - :keys "\\[pr-ps-mode-preview]"]) - ("File" - ["No Preprocessing..." (call-interactively 'pr-ps-file-preview) - :keys "\\[pr-ps-file-preview]"] - "--" - ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist] - "--" - ["1-up..." (pr-ps-file-up-preview 1 t t) pr-ps-utility-alist] - ["2-up..." (pr-ps-file-up-preview 2 t t) pr-ps-utility-alist] - ["4-up..." (pr-ps-file-up-preview 4 t t) pr-ps-utility-alist] - ["Other..." (pr-ps-file-up-preview nil t t) - :keys "\\[pr-ps-file-up-preview]" :active pr-ps-utility-alist] - "--" - ["Landscape" pr-toggle-file-landscape - :style toggle :selected pr-file-landscape - :active pr-ps-utility-alist] - ["Duplex" pr-toggle-file-duplex - :style toggle :selected pr-file-duplex - :active pr-ps-utility-alist] - ["Tumble" pr-toggle-file-tumble - :style toggle :selected pr-file-tumble - :active (and pr-file-duplex pr-ps-utility-alist)]) - ["Despool..." (call-interactively 'pr-despool-preview) - :active pr-spool-p :keys "\\[pr-despool-preview]"]) - ("PostScript Print" :included (pr-visible-p 'postscript) - ("Directory" - ["1-up" (pr-ps-directory-ps-print 1 nil nil t) t] - ["2-up" (pr-ps-directory-ps-print 2 nil nil t) t] - ["4-up" (pr-ps-directory-ps-print 4 nil nil t) t] - ["Other..." (pr-ps-directory-ps-print nil nil nil t) - :keys "\\[pr-ps-buffer-ps-print]"]) - ("Buffer" - ["1-up" (pr-ps-buffer-ps-print 1 t) t] - ["2-up" (pr-ps-buffer-ps-print 2 t) t] - ["4-up" (pr-ps-buffer-ps-print 4 t) t] - ["Other..." (pr-ps-buffer-ps-print nil t) - :keys "\\[pr-ps-buffer-ps-print]"]) - ("Region" :included (ps-mark-active-p) - ["1-up" (pr-ps-region-ps-print 1 t) t] - ["2-up" (pr-ps-region-ps-print 2 t) t] - ["4-up" (pr-ps-region-ps-print 4 t) t] - ["Other..." (pr-ps-region-ps-print nil t) - :keys "\\[pr-ps-region-ps-print]"]) - ("Mode" :included (pr-mode-alist-p) - ["1-up" (pr-ps-mode-ps-print 1 t) t] - ["2-up" (pr-ps-mode-ps-print 2 t) t] - ["4-up" (pr-ps-mode-ps-print 4 t) t] - ["Other..." (pr-ps-mode-ps-print nil t) - :keys "\\[pr-ps-mode-ps-print]"]) - ("File" - ["No Preprocessing..." (call-interactively 'pr-ps-file-ps-print) - :keys "\\[pr-ps-file-ps-print]"] - "--" - ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist] - "--" - ["1-up..." (pr-ps-file-up-ps-print 1 t t) pr-ps-utility-alist] - ["2-up..." (pr-ps-file-up-ps-print 2 t t) pr-ps-utility-alist] - ["4-up..." (pr-ps-file-up-ps-print 4 t t) pr-ps-utility-alist] - ["Other..." (pr-ps-file-up-ps-print nil t t) - :keys "\\[pr-ps-file-up-ps-print]" :active pr-ps-utility-alist] - "--" - ["Landscape" pr-toggle-file-landscape - :style toggle :selected pr-file-landscape - :active pr-ps-utility-alist] - ["Duplex" pr-toggle-file-duplex - :style toggle :selected pr-file-duplex - :active pr-ps-utility-alist] - ["Tumble" pr-toggle-file-tumble - :style toggle :selected pr-file-tumble - :active (and pr-file-duplex pr-ps-utility-alist)]) - ["Despool..." (call-interactively 'pr-despool-ps-print) - :active pr-spool-p :keys "\\[pr-despool-ps-print]"]) - ["PostScript Printers" pr-update-menus - :active pr-ps-printer-alist :included (pr-visible-p 'postscript)] - "--" - ("Printify" :included (pr-visible-p 'text) - ["Directory" pr-printify-directory t] - ["Buffer" pr-printify-buffer t] - ["Region" pr-printify-region (ps-mark-active-p)]) - ("Print" :included (pr-visible-p 'text) - ["Directory" pr-txt-directory t] - ["Buffer" pr-txt-buffer t] - ["Region" pr-txt-region (ps-mark-active-p)] - ["Mode" pr-txt-mode (pr-mode-alist-p)]) - ["Text Printers" pr-update-menus - :active pr-txt-printer-alist :included (pr-visible-p 'text)] - "--" - ["Landscape" pr-toggle-landscape - :style toggle :selected ps-landscape-mode - :included (pr-visible-p 'postscript-options)] - ["Print Header" pr-toggle-header - :style toggle :selected ps-print-header - :included (pr-visible-p 'postscript-options)] - ["Print Header Frame" pr-toggle-header-frame - :style toggle :selected ps-print-header-frame :active ps-print-header - :included (pr-visible-p 'postscript-options)] - ["Line Number" pr-toggle-line - :style toggle :selected ps-line-number - :included (pr-visible-p 'postscript-options)] - ["Zebra Stripes" pr-toggle-zebra - :style toggle :selected ps-zebra-stripes - :included (pr-visible-p 'postscript-options)] - ["Duplex" pr-toggle-duplex - :style toggle :selected ps-spool-duplex - :included (pr-visible-p 'postscript-options)] - ["Tumble" pr-toggle-tumble - :style toggle :selected ps-spool-tumble :active ps-spool-duplex - :included (pr-visible-p 'postscript-options)] - ["Upside-Down" pr-toggle-upside-down - :style toggle :selected ps-print-upside-down - :included (pr-visible-p 'postscript-options)] - ("Print All Pages" :included (pr-visible-p 'postscript-options) - ["All Pages" (pr-even-or-odd-pages nil) - :style radio :selected (eq ps-even-or-odd-pages nil)] - ["Even Pages" (pr-even-or-odd-pages 'even-page) - :style radio :selected (eq ps-even-or-odd-pages 'even-page)] - ["Odd Pages" (pr-even-or-odd-pages 'odd-page) - :style radio :selected (eq ps-even-or-odd-pages 'odd-page)] - ["Even Sheets" (pr-even-or-odd-pages 'even-sheet) - :style radio :selected (eq ps-even-or-odd-pages 'even-sheet)] - ["Odd Sheets" (pr-even-or-odd-pages 'odd-sheet) - :style radio :selected (eq ps-even-or-odd-pages 'odd-sheet)]) - "--" - ["Spool Buffer" pr-toggle-spool - :style toggle :selected pr-spool-p - :included (pr-visible-p 'postscript-process)] - ["Print with faces" pr-toggle-faces - :style toggle :selected pr-faces-p - :included (pr-visible-p 'postscript-process)] - ["Print via Ghostscript" pr-toggle-ghostscript - :style toggle :selected pr-print-using-ghostscript - :included (pr-visible-p 'postscript-process)] - "--" - ["Auto Region" pr-toggle-region - :style toggle :selected pr-auto-region - :included (pr-visible-p 'printing)] - ["Auto Mode" pr-toggle-mode - :style toggle :selected pr-auto-mode - :included (pr-visible-p 'printing)] - ["Menu Lock" pr-toggle-lock - :style toggle :selected pr-menu-lock - :included (pr-visible-p 'printing)] - "--" - ("Customize" :included (pr-visible-p 'help) - ["printing" pr-customize t] - ["ps-print" ps-print-customize t] - ["lpr" lpr-customize t]) - ("Show Settings" :included (pr-visible-p 'help) - ["printing" pr-show-pr-setup t] - ["ps-print" pr-show-ps-setup t] - ["lpr" pr-show-lpr-setup t]) - ["Help" pr-help :active t :included (pr-visible-p 'help)] - )) - )) + ))) (cond @@ -2915,23 +2828,29 @@ See `pr-ps-printer-alist'.") pr-menu-bar (vector 'menu-bar 'file (pr-get-symbol "Print"))))) (t - (easy-menu-change '("file") "Print" pr-menu-spec))) - - ;; Key binding - (global-set-key [print] 'pr-ps-fast-fire) - (global-set-key [M-print] 'pr-ps-mode-using-ghostscript) - (global-set-key [C-print] 'pr-txt-fast-fire)) + (easy-menu-change '("file") "Print" pr-menu-spec)))) ((eq ps-print-emacs-type 'xemacs) ; XEmacs ;; Menu binding (pr-xemacs-global-menubar - (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps")) + (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps")))) - ;; Key binding - (global-set-key 'f22 'pr-ps-fast-fire) - (global-set-key '(meta f22) 'pr-ps-mode-using-ghostscript) - (global-set-key '(control f22) 'pr-txt-fast-fire)))) + + ;; Key binding + (let ((pr-print-key (if (eq ps-print-emacs-type 'emacs) + 'print ; GNU Emacs + 'f22))) ; XEmacs + (global-set-key `[,pr-print-key] 'pr-ps-fast-fire) + ;; Well, M-print and S-print are used because in my keyboard S-print works + ;; and M-print doesn't. But M-print can work in other keyboard. + (global-set-key `[(meta ,pr-print-key)] 'pr-ps-mode-using-ghostscript) + (global-set-key `[(shift ,pr-print-key)] 'pr-ps-mode-using-ghostscript) + ;; Well, C-print and C-M-print are used because in my keyboard C-M-print works + ;; and C-print doesn't. But C-print can work in other keyboard. + (global-set-key `[(control ,pr-print-key)] 'pr-txt-fast-fire) + (global-set-key `[(control meta ,pr-print-key)] 'pr-txt-fast-fire) + )) ;;; You can also use something like: @@ -3407,9 +3326,10 @@ If BUFFER is nil, the current buffer is used for printing. For more information, type \\[pr-interface-help]." (interactive) - (save-excursion - (set-buffer (or buffer (current-buffer))) - (pr-create-interface))) + (pr-save-interactive + (save-excursion + (set-buffer (or buffer (current-buffer))) + (pr-create-interface)))) ;;;###autoload @@ -3430,12 +3350,13 @@ file name. See also documentation for `pr-list-directory'." (interactive (pr-interactive-ps-dir-args (pr-prompt "PS preview dir"))) - (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename - (pr-prompt "PS preview dir")) - (setq filename (pr-ps-file filename)) - (pr-ps-file-list n-up dir file-regexp filename) - (or pr-spool-p - (pr-ps-file-preview filename))) + (pr-save-interactive + (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename + (pr-prompt "PS preview dir")) + (setq filename (pr-ps-file filename)) + (pr-ps-file-list n-up dir file-regexp filename) + (or pr-spool-p + (pr-ps-file-preview filename)))) ;;;###autoload @@ -3456,12 +3377,13 @@ file name. See also documentation for `pr-list-directory'." (interactive (pr-interactive-ps-dir-args (pr-prompt "PS print dir GS"))) - (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename - (pr-prompt "PS print dir GS")) - (let ((file (pr-ps-file filename))) - (pr-ps-file-list n-up dir file-regexp file) - (pr-ps-file-using-ghostscript file) - (or filename (pr-delete-file file)))) + (pr-save-interactive + (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename + (pr-prompt "PS print dir GS")) + (let ((file (pr-ps-file filename))) + (pr-ps-file-list n-up dir file-regexp file) + (pr-ps-file-using-ghostscript file) + (or filename (pr-delete-file file))))) ;;;###autoload @@ -3482,12 +3404,13 @@ file name. See also documentation for `pr-list-directory'." (interactive (pr-interactive-ps-dir-args (pr-prompt "PS print dir"))) - (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename - (pr-prompt "PS print dir")) - (let ((file (pr-ps-file filename))) - (pr-ps-file-list n-up dir file-regexp file) - (pr-ps-file-print file) - (or filename (pr-delete-file file)))) + (pr-save-interactive + (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename + (pr-prompt "PS print dir")) + (let ((file (pr-ps-file filename))) + (pr-ps-file-list n-up dir file-regexp file) + (pr-ps-file-print file) + (or filename (pr-delete-file file))))) ;;;###autoload @@ -3511,11 +3434,12 @@ file name. See also documentation for `pr-list-directory'." (interactive (pr-interactive-ps-dir-args (pr-prompt (pr-prompt-gs "PS print dir")))) - (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename - (pr-prompt (pr-prompt-gs "PS print dir"))) - (if (pr-using-ghostscript-p) - (pr-ps-directory-using-ghostscript n-up dir file-regexp filename) - (pr-ps-directory-print n-up dir file-regexp filename))) + (pr-save-interactive + (pr-set-ps-dir-args 'n-up 'dir 'file-regexp 'filename + (pr-prompt (pr-prompt-gs "PS print dir"))) + (if (pr-using-ghostscript-p) + (pr-ps-directory-using-ghostscript n-up dir file-regexp filename) + (pr-ps-directory-print n-up dir file-regexp filename)))) ;;;###autoload @@ -3531,10 +3455,11 @@ argument FILENAME is treated as follows: if it's nil, save the image in a temporary file. If FILENAME is a string, save the PostScript image in a file with that name. If FILENAME is t, prompts for a file name." (interactive (pr-interactive-n-up-file (pr-prompt "PS preview"))) - (if (pr-auto-mode-p) - (pr-ps-mode-preview n-up filename) - (pr-ps-preview (pr-region-active-symbol) n-up filename - (pr-region-active-string "PS preview")))) + (pr-save-interactive + (if (pr-auto-mode-p) + (pr-ps-mode-preview n-up filename) + (pr-ps-preview (pr-region-active-symbol) n-up filename + (pr-region-active-string "PS preview"))))) ;;;###autoload @@ -3550,10 +3475,11 @@ argument FILENAME is treated as follows: if it's nil, send the image to the printer. If FILENAME is a string, save the PostScript image in a file with that name. If FILENAME is t, prompts for a file name." (interactive (pr-interactive-n-up-file (pr-prompt "PS print GS"))) - (if (pr-auto-mode-p) - (pr-ps-mode-using-ghostscript n-up filename) - (pr-ps-using-ghostscript (pr-region-active-symbol) n-up filename - (pr-region-active-string "PS print GS")))) + (pr-save-interactive + (if (pr-auto-mode-p) + (pr-ps-mode-using-ghostscript n-up filename) + (pr-ps-using-ghostscript (pr-region-active-symbol) n-up filename + (pr-region-active-string "PS print GS"))))) ;;;###autoload @@ -3569,10 +3495,11 @@ argument FILENAME is treated as follows: if it's nil, send the image to the printer. If FILENAME is a string, save the PostScript image in a file with that name. If FILENAME is t, prompts for a file name." (interactive (pr-interactive-n-up-file (pr-prompt "PS print"))) - (if (pr-auto-mode-p) - (pr-ps-mode-print n-up filename) - (pr-ps-print (pr-region-active-symbol) n-up filename - (pr-region-active-string "PS print")))) + (pr-save-interactive + (if (pr-auto-mode-p) + (pr-ps-mode-print n-up filename) + (pr-ps-print (pr-region-active-symbol) n-up filename + (pr-region-active-string "PS print"))))) ;;;###autoload @@ -3591,14 +3518,15 @@ printer. If FILENAME is a string, save the PostScript image in a file with that name. If FILENAME is t, prompts for a file name." (interactive (pr-interactive-n-up-file (pr-prompt (pr-prompt-gs "PS print")))) - (cond ((pr-auto-mode-p) - (pr-ps-mode-ps-print n-up filename)) - ((pr-using-ghostscript-p) - (pr-ps-using-ghostscript (pr-region-active-symbol) n-up filename - (pr-region-active-string "PS print GS"))) - (t - (pr-ps-print (pr-region-active-symbol) n-up filename - (pr-region-active-string "PS print"))))) + (pr-save-interactive + (cond ((pr-auto-mode-p) + (pr-ps-mode-ps-print n-up filename)) + ((pr-using-ghostscript-p) + (pr-ps-using-ghostscript (pr-region-active-symbol) n-up filename + (pr-region-active-string "PS print GS"))) + (t + (pr-ps-print (pr-region-active-symbol) n-up filename + (pr-region-active-string "PS print")))))) ;;;###autoload @@ -3607,10 +3535,11 @@ that name. If FILENAME is t, prompts for a file name." See also `pr-ps-buffer-preview'." (interactive (pr-interactive-n-up-file (pr-prompt-region "PS preview"))) - (if (pr-auto-mode-p) - (let ((pr-auto-region t)) - (pr-ps-mode-preview n-up filename)) - (pr-ps-preview 'region n-up filename "PS preview region"))) + (pr-save-interactive + (if (pr-auto-mode-p) + (let ((pr-auto-region t)) + (pr-ps-mode-preview n-up filename)) + (pr-ps-preview 'region n-up filename "PS preview region")))) ;;;###autoload @@ -3619,10 +3548,11 @@ See also `pr-ps-buffer-preview'." See also `pr-ps-buffer-using-ghostscript'." (interactive (pr-interactive-n-up-file (pr-prompt-region "PS print GS"))) - (if (pr-auto-mode-p) - (let ((pr-auto-region t)) - (pr-ps-mode-using-ghostscript n-up filename)) - (pr-ps-using-ghostscript 'region n-up filename "PS print GS region"))) + (pr-save-interactive + (if (pr-auto-mode-p) + (let ((pr-auto-region t)) + (pr-ps-mode-using-ghostscript n-up filename)) + (pr-ps-using-ghostscript 'region n-up filename "PS print GS region")))) ;;;###autoload @@ -3631,10 +3561,11 @@ See also `pr-ps-buffer-using-ghostscript'." See also `pr-ps-buffer-print'." (interactive (pr-interactive-n-up-file (pr-prompt-region "PS print"))) - (if (pr-auto-mode-p) - (let ((pr-auto-region t)) - (pr-ps-mode-print n-up filename)) - (pr-ps-print 'region n-up filename "PS print region"))) + (pr-save-interactive + (if (pr-auto-mode-p) + (let ((pr-auto-region t)) + (pr-ps-mode-print n-up filename)) + (pr-ps-print 'region n-up filename "PS print region")))) ;;;###autoload @@ -3644,13 +3575,14 @@ See also `pr-ps-buffer-print'." See also `pr-ps-buffer-ps-print'." (interactive (pr-interactive-n-up-file (pr-prompt-region (pr-prompt-gs "PS print")))) - (cond ((pr-auto-mode-p) - (let ((pr-auto-region t)) - (pr-ps-mode-ps-print n-up filename))) - ((pr-using-ghostscript-p) - (pr-ps-using-ghostscript 'region n-up filename "PS print GS region")) - (t - (pr-ps-print 'region n-up filename "PS print region")))) + (pr-save-interactive + (cond ((pr-auto-mode-p) + (let ((pr-auto-region t)) + (pr-ps-mode-ps-print n-up filename))) + ((pr-using-ghostscript-p) + (pr-ps-using-ghostscript 'region n-up filename "PS print GS region")) + (t + (pr-ps-print 'region n-up filename "PS print region"))))) ;;;###autoload @@ -3659,11 +3591,12 @@ See also `pr-ps-buffer-ps-print'." See also `pr-ps-buffer-preview'." (interactive (pr-interactive-n-up-file "PS preview mode")) - (pr-set-n-up-and-filename 'n-up 'filename "PS preview mode") - (let ((file (pr-ps-file filename))) - (and (pr-ps-mode n-up file) - (not pr-spool-p) - (pr-ps-file-preview file)))) + (pr-save-interactive + (pr-set-n-up-and-filename 'n-up 'filename "PS preview mode") + (let ((file (pr-ps-file filename))) + (and (pr-ps-mode n-up file) + (not pr-spool-p) + (pr-ps-file-preview file))))) ;;;###autoload @@ -3672,12 +3605,13 @@ See also `pr-ps-buffer-preview'." See also `pr-ps-buffer-using-ghostscript'." (interactive (pr-interactive-n-up-file "PS print GS mode")) - (pr-set-n-up-and-filename 'n-up 'filename "PS print GS mode") - (let ((file (pr-ps-file filename))) - (when (and (pr-ps-mode n-up file) - (not pr-spool-p)) - (pr-ps-file-using-ghostscript file) - (or filename (pr-delete-file file))))) + (pr-save-interactive + (pr-set-n-up-and-filename 'n-up 'filename "PS print GS mode") + (let ((file (pr-ps-file filename))) + (when (and (pr-ps-mode n-up file) + (not pr-spool-p)) + (pr-ps-file-using-ghostscript file) + (or filename (pr-delete-file file)))))) ;;;###autoload @@ -3686,8 +3620,9 @@ See also `pr-ps-buffer-using-ghostscript'." See also `pr-ps-buffer-print'." (interactive (pr-interactive-n-up-file "PS print mode")) - (pr-set-n-up-and-filename 'n-up 'filename "PS print mode") - (pr-ps-mode n-up filename)) + (pr-save-interactive + (pr-set-n-up-and-filename 'n-up 'filename "PS print mode") + (pr-ps-mode n-up filename))) ;;;###autoload @@ -3696,9 +3631,10 @@ See also `pr-ps-buffer-print'." See also `pr-ps-buffer-ps-print'." (interactive (pr-interactive-n-up-file (pr-prompt-gs "PS print mode"))) - (if (pr-using-ghostscript-p) - (pr-ps-mode-using-ghostscript n-up filename) - (pr-ps-mode-print n-up filename))) + (pr-save-interactive + (if (pr-using-ghostscript-p) + (pr-ps-mode-using-ghostscript n-up filename) + (pr-ps-mode-print n-up filename)))) ;;;###autoload @@ -3715,8 +3651,9 @@ prompts for FILE(name)-REGEXP. See also documentation for `pr-list-directory'." (interactive (pr-interactive-dir-args "Printify dir")) - (pr-set-dir-args 'dir 'file-regexp "Printify dir") - (pr-file-list dir file-regexp 'pr-printify-buffer)) + (pr-save-interactive + (pr-set-dir-args 'dir 'file-regexp "Printify dir") + (pr-file-list dir file-regexp 'pr-printify-buffer))) ;;;###autoload @@ -3751,8 +3688,9 @@ prompts for FILE(name)-REGEXP. See also documentation for `pr-list-directory'." (interactive (pr-interactive-dir-args "Print dir")) - (pr-set-dir-args 'dir 'file-regexp "Print dir") - (pr-file-list dir file-regexp 'pr-txt-buffer)) + (pr-save-interactive + (pr-set-dir-args 'dir 'file-regexp "Print dir") + (pr-file-list dir file-regexp 'pr-txt-buffer))) ;;;###autoload @@ -3800,10 +3738,11 @@ Noninteractively, the argument FILENAME is treated as follows: if it is nil, save the image in a temporary file. If FILENAME is a string, save the PostScript image in a file with that name." (interactive (list (ps-print-preprint current-prefix-arg))) - (let ((file (pr-ps-file filename))) - (when (stringp file) - (pr-despool-print file) - (pr-ps-file-preview file)))) + (pr-save-interactive + (let ((file (pr-ps-file filename))) + (when (stringp file) + (pr-despool-print file) + (pr-ps-file-preview file))))) ;;;###autoload @@ -3818,11 +3757,12 @@ Noninteractively, the argument FILENAME is treated as follows: if it is nil, 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))) - (let ((file (pr-ps-file filename))) - (when (stringp file) - (pr-despool-print file) - (pr-ps-file-using-ghostscript file) - (or filename (pr-delete-file file))))) + (pr-save-interactive + (let ((file (pr-ps-file filename))) + (when (stringp file) + (pr-despool-print file) + (pr-ps-file-using-ghostscript file) + (or filename (pr-delete-file file)))))) ;;;###autoload @@ -3837,11 +3777,13 @@ Noninteractively, the argument FILENAME is treated as follows: if it is nil, 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))) - (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))) + (pr-save-interactive + (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))))) ;;;###autoload @@ -3856,9 +3798,10 @@ Noninteractively, the argument FILENAME is treated as follows: if it is nil, 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))) - (if pr-print-using-ghostscript - (pr-despool-using-ghostscript filename) - (pr-despool-print filename))) + (pr-save-interactive + (if pr-print-using-ghostscript + (pr-despool-using-ghostscript filename) + (pr-despool-print filename)))) ;;;###autoload @@ -3873,10 +3816,11 @@ image in a file with that name." (defun pr-ps-file-up-preview (n-up ifilename &optional ofilename) "Preview PostScript file FILENAME." (interactive (pr-interactive-n-up-inout "PS preview")) - (let ((outfile (pr-ps-utility-args 'n-up 'ifilename 'ofilename - "PS preview "))) - (pr-ps-utility-process n-up ifilename outfile) - (pr-ps-file-preview outfile))) + (pr-save-interactive + (let ((outfile (pr-ps-utility-args 'n-up 'ifilename 'ofilename + "PS preview "))) + (pr-ps-utility-process n-up ifilename outfile) + (pr-ps-file-preview outfile)))) ;;;###autoload @@ -3884,20 +3828,21 @@ image in a file with that name." "Print PostScript file FILENAME using ghostscript." (interactive (list (pr-ps-infile-preprint "Print preview "))) (and (stringp filename) (file-exists-p filename) - (let* ((file (pr-expand-file-name filename)) - (tempfile (pr-dosify-file-name (make-temp-file file)))) - ;; gs use - (pr-call-process pr-gs-command - (format "-sDEVICE=%s" pr-gs-device) - (format "-r%d" pr-gs-resolution) - (pr-switches-string pr-gs-switches "pr-gs-switches") - (format "-sOutputFile=\"%s\"" tempfile) - file - "-c quit") - ;; printing - (pr-ps-file-print tempfile) - ;; deleting - (pr-delete-file tempfile)))) + (pr-save-interactive + (let* ((file (pr-expand-file-name filename)) + (tempfile (pr-dosify-file-name (make-temp-file file)))) + ;; gs use + (pr-call-process pr-gs-command + (format "-sDEVICE=%s" pr-gs-device) + (format "-r%d" pr-gs-resolution) + (pr-switches-string pr-gs-switches "pr-gs-switches") + (format "-sOutputFile=\"%s\"" tempfile) + file + "-c quit") + ;; printing + (pr-ps-file-print tempfile) + ;; deleting + (pr-delete-file tempfile))))) ;;;###autoload @@ -3908,12 +3853,14 @@ image in a file with that name." ;; printing (let ((file (pr-expand-file-name filename))) (if (string= pr-ps-command "") + ;; default action (let ((ps-spool-buffer (get-buffer-create ps-spool-buffer-name))) (save-excursion (set-buffer ps-spool-buffer) (erase-buffer) (insert-file-contents-literally file)) (pr-despool-print)) + ;; use `pr-ps-command' to print (apply 'pr-call-process pr-ps-command (pr-switches-string pr-ps-switches "pr-gs-switches") @@ -3958,22 +3905,24 @@ file name." (if pr-print-using-ghostscript "PS print GS" "PS print"))) - (let ((outfile (pr-ps-utility-args 'n-up 'ifilename 'ofilename - (if pr-print-using-ghostscript - "PS print GS " - "PS print ")))) - (pr-ps-utility-process n-up ifilename outfile) - (unless ofilename - (pr-ps-file-ps-print outfile) - (pr-delete-file outfile)))) + (pr-save-interactive + (let ((outfile (pr-ps-utility-args 'n-up 'ifilename 'ofilename + (if pr-print-using-ghostscript + "PS print GS " + "PS print ")))) + (pr-ps-utility-process n-up ifilename outfile) + (unless ofilename + (pr-ps-file-ps-print outfile) + (pr-delete-file outfile))))) ;;;###autoload (defun pr-toggle-file-duplex () "Toggle duplex for PostScript file." (interactive) - (pr-toggle 'pr-file-duplex "PS file duplex" nil 7 5 nil - '("PostScript Print" "File"))) + (pr-save-interactive + (pr-toggle 'pr-file-duplex "PS file duplex" nil 7 5 nil + '("PostScript Print" "File")))) ;;;###autoload @@ -3985,48 +3934,54 @@ right. If tumble is on, produces a printing suitable for binding at the top or bottom." (interactive) - (pr-toggle 'pr-file-tumble "PS file tumble" nil 8 5 nil - '("PostScript Print" "File"))) + (pr-save-interactive + (pr-toggle 'pr-file-tumble "PS file tumble" nil 8 5 nil + '("PostScript Print" "File")))) ;;;###autoload (defun pr-toggle-file-landscape () "Toggle landscape for PostScript file." (interactive) - (pr-toggle 'pr-file-landscape "PS file landscape" nil 6 5 nil - '("PostScript Print" "File"))) + (pr-save-interactive + (pr-toggle 'pr-file-landscape "PS file landscape" nil 6 5 nil + '("PostScript Print" "File")))) ;;;###autoload (defun pr-toggle-ghostscript () "Toggle printing using ghostscript." (interactive) - (pr-toggle 'pr-print-using-ghostscript "Printing using ghostscript" - 'postscript-process 2 12 'toggle)) + (pr-save-interactive + (pr-toggle 'pr-print-using-ghostscript "Printing using ghostscript" + 'postscript-process 2 12 'toggle))) ;;;###autoload (defun pr-toggle-faces () "Toggle printing with faces." (interactive) - (pr-toggle 'pr-faces-p "Printing with faces" - 'postscript-process 1 12 'toggle)) + (pr-save-interactive + (pr-toggle 'pr-faces-p "Printing with faces" + 'postscript-process 1 12 'toggle))) ;;;###autoload (defun pr-toggle-spool () "Toggle spooling." (interactive) - (pr-toggle 'pr-spool-p "Spooling printing" - 'postscript-process 0 12 'toggle)) + (pr-save-interactive + (pr-toggle 'pr-spool-p "Spooling printing" + 'postscript-process 0 12 'toggle))) ;;;###autoload (defun pr-toggle-duplex () "Toggle duplex." (interactive) - (pr-toggle 'ps-spool-duplex "Printing duplex" - 'postcsript-options 5 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-spool-duplex "Printing duplex" + 'postcsript-options 5 12 'toggle))) ;;;###autoload @@ -4038,80 +3993,90 @@ right. If tumble is on, produces a printing suitable for binding at the top or bottom." (interactive) - (pr-toggle 'ps-spool-tumble "Tumble" - 'postscript-options 6 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-spool-tumble "Tumble" + 'postscript-options 6 12 'toggle))) ;;;###autoload (defun pr-toggle-landscape () "Toggle landscape." (interactive) - (pr-toggle 'ps-landscape-mode "Landscape" - 'postscript-options 0 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-landscape-mode "Landscape" + 'postscript-options 0 12 'toggle))) ;;;###autoload (defun pr-toggle-upside-down () "Toggle upside-down." (interactive) - (pr-toggle 'ps-print-upside-down "Upside-Down" - 'postscript-options 7 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-print-upside-down "Upside-Down" + 'postscript-options 7 12 'toggle))) ;;;###autoload (defun pr-toggle-line () "Toggle line number." (interactive) - (pr-toggle 'ps-line-number "Line number" - 'postscript-options 3 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-line-number "Line number" + 'postscript-options 3 12 'toggle))) ;;;###autoload (defun pr-toggle-zebra () "Toggle zebra stripes." (interactive) - (pr-toggle 'ps-zebra-stripes "Zebra stripe" - 'postscript-options 4 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-zebra-stripes "Zebra stripe" + 'postscript-options 4 12 'toggle))) ;;;###autoload (defun pr-toggle-header () "Toggle printing header." (interactive) - (pr-toggle 'ps-print-header "Print header" - 'postscript-options 1 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-print-header "Print header" + 'postscript-options 1 12 'toggle))) ;;;###autoload (defun pr-toggle-header-frame () "Toggle printing header frame." (interactive) - (pr-toggle 'ps-print-header-frame "Print header frame" - 'postscript-options 2 12 'toggle)) + (pr-save-interactive + (pr-toggle 'ps-print-header-frame "Print header frame" + 'postscript-options 2 12 'toggle))) ;;;###autoload (defun pr-toggle-lock () "Toggle menu lock." (interactive) - (pr-toggle 'pr-menu-lock "Menu lock" - 'printing 2 12 'toggle)) + (pr-save-interactive + (pr-toggle 'pr-menu-lock "Menu lock" + 'printing 2 12 'toggle))) ;;;###autoload (defun pr-toggle-region () "Toggle auto region." (interactive) - (pr-toggle 'pr-auto-region "Auto region" - 'printing 0 12 'toggle)) + (pr-save-interactive + (pr-toggle 'pr-auto-region "Auto region" + 'printing 0 12 'toggle))) ;;;###autoload (defun pr-toggle-mode () "Toggle auto mode." (interactive) - (pr-toggle 'pr-auto-mode "Auto mode" - 'printing 1 12 'toggle)) + (pr-save-interactive + (pr-toggle 'pr-auto-mode "Auto mode" + 'printing 1 12 'toggle))) ;;;###autoload @@ -4139,24 +4104,30 @@ bottom." (defun pr-ps-name () "Interactively select a PostScript printer." (interactive) - (pr-menu-set-ps-title - (pr-complete-alist "PostScript printer" pr-ps-printer-alist pr-ps-name))) + (pr-save-interactive + (pr-menu-set-ps-title + (pr-complete-alist "PostScript printer" + pr-ps-printer-alist pr-ps-name)))) ;;;###autoload (defun pr-txt-name () "Interactively select a text printer." (interactive) - (pr-menu-set-txt-title - (pr-complete-alist "Text printer" pr-txt-printer-alist pr-txt-name))) + (pr-save-interactive + (pr-menu-set-txt-title + (pr-complete-alist "Text printer" + pr-txt-printer-alist pr-txt-name)))) ;;;###autoload (defun pr-ps-utility () "Interactively select a PostScript utility." (interactive) - (pr-menu-set-utility-title - (pr-complete-alist "Postscript utility" pr-ps-utility-alist pr-ps-utility))) + (pr-save-interactive + (pr-menu-set-utility-title + (pr-complete-alist "Postscript utility" + pr-ps-utility-alist pr-ps-utility)))) ;;;###autoload @@ -4247,28 +4218,29 @@ Note that this command always behaves as if `pr-auto-region' and `pr-auto-mode' are both set to t." (interactive (list (pr-interactive-n-up (pr-prompt-gs "PS print fast")) current-prefix-arg)) - (let ((pr-auto-region t) - (pr-auto-mode t) - filename) - (cond ((null select)) - ((listp select) - (pr-ps-name)) - ((and (symbolp select) - (assq select pr-ps-printer-alist)) - (pr-menu-set-ps-title select)) - ((integerp select) - (and (/= select 1) - (pr-ps-name)) - (and (>= select 1) (not pr-spool-p) - (setq filename (pr-ps-outfile-preprint - (if pr-print-using-ghostscript - "Fast GS " - "Fast ")))))) - (pr-ps-buffer-ps-print - (if (integerp n-up) - (min (max n-up 1) 100) - (error "n-up must be an integer greater than zero")) - filename))) + (pr-save-interactive + (let ((pr-auto-region t) + (pr-auto-mode t) + filename) + (cond ((null select)) + ((listp select) + (pr-ps-name)) + ((and (symbolp select) + (assq select pr-ps-printer-alist)) + (pr-menu-set-ps-title select)) + ((integerp select) + (and (/= select 1) + (pr-ps-name)) + (and (>= select 1) (not pr-spool-p) + (setq filename (pr-ps-outfile-preprint + (if pr-print-using-ghostscript + "Fast GS " + "Fast ")))))) + (pr-ps-buffer-ps-print + (if (integerp n-up) + (min (max n-up 1) 100) + (error "n-up must be an integer greater than zero")) + filename)))) ;;;###autoload @@ -4296,15 +4268,16 @@ Noninteractively, the argument SELECT-PRINTER is treated as follows: Note that this command always behaves as if `pr-auto-region' and `pr-auto-mode' are both set to t." (interactive (list current-prefix-arg)) - (cond ((null select-printer)) - ((and (symbolp select-printer) - (assq select-printer pr-txt-printer-alist)) - (pr-menu-set-txt-title select-printer)) - (t - (pr-txt-name))) - (let ((pr-auto-region t) - (pr-auto-mode t)) - (pr-txt-buffer))) + (pr-save-interactive + (cond ((null select-printer)) + ((and (symbolp select-printer) + (assq select-printer pr-txt-printer-alist)) + (pr-menu-set-txt-title select-printer)) + (t + (pr-txt-name))) + (let ((pr-auto-region t) + (pr-auto-mode t)) + (pr-txt-buffer)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -4350,6 +4323,7 @@ Or choose the menu option Printing/Show Settings/printing." nil '(20 . pr-temp-dir) '(20 . pr-ps-temp-file) + '(20 . pr-file-modes) '(20 . pr-delete-temp-file) '(20 . pr-list-directory) nil @@ -4704,7 +4678,7 @@ See `pr-visible-entry-alist'.") ;; GNU Emacs (defun pr-menu-lock (entry index horizontal state path) - (when (and (not (interactive-p)) pr-menu-lock) + (when (and (not pr-interactive-p) pr-menu-lock) (or (and pr-menu-position (eq state pr-menu-state)) (setq pr-menu-position (pr-menu-position entry index horizontal) pr-menu-state state)) @@ -4726,7 +4700,7 @@ See `pr-visible-entry-alist'.") ;; XEmacs (defun pr-menu-lock (entry index horizontal state path) - (when (and (not (interactive-p)) pr-menu-lock) + (when (and (not pr-interactive-p) pr-menu-lock) (or (and pr-menu-position (eq state pr-menu-state)) (setq pr-menu-position (pr-menu-position entry index horizontal) pr-menu-state state)) @@ -4757,10 +4731,11 @@ non-nil, update text printer menu iff `pr-txt-printer-menu-modified' is non-nil, and update PostScript File menus iff `pr-ps-utility-menu-modified' is non-nil." (interactive "P") - (pr-update-var 'pr-ps-name pr-ps-printer-alist) - (pr-update-var 'pr-txt-name pr-txt-printer-alist) - (pr-update-var 'pr-ps-utility pr-ps-utility-alist) - (pr-do-update-menus force)) + (pr-save-interactive + (pr-update-var 'pr-ps-name pr-ps-printer-alist) + (pr-update-var 'pr-txt-name pr-txt-printer-alist) + (pr-update-var 'pr-ps-utility pr-ps-utility-alist) + (pr-do-update-menus force))) (defvar pr-ps-printer-menu-modified t @@ -5280,7 +5255,7 @@ non-nil." (or (symbol-value n-up-sym) (set n-up-sym (pr-interactive-n-up prompt))) (and (eq (symbol-value infile-sym) t) - (set infile-sym (and (not (interactive-p)) + (set infile-sym (and (not pr-interactive-p) (pr-ps-infile-preprint prompt)))) ;; input file (or (symbol-value infile-sym) @@ -5288,7 +5263,7 @@ non-nil." (set infile-sym (pr-dosify-file-name (symbol-value infile-sym))) ;; output file (and (eq (symbol-value outfile-sym) t) - (set outfile-sym (and (not (interactive-p)) + (set outfile-sym (and (not pr-interactive-p) current-prefix-arg (pr-ps-outfile-preprint prompt)))) (and (symbol-value outfile-sym) @@ -5331,23 +5306,24 @@ non-nil." (defun pr-call-process (command &rest args) - (let ((buffer (get-buffer-create "*Printing Command Output*")) - (cmd (pr-command command)) - status) - (setq args (pr-remove-nil-from-list args)) - (save-excursion - (set-buffer buffer) - (goto-char (point-max)) - (insert (format "%s %S\n" cmd args))) - (setq status - (condition-case data - (apply 'call-process cmd nil buffer nil args) - ((quit error) - (error-message-string data)))) - (save-excursion - (set-buffer buffer) - (goto-char (point-max)) - (insert (format "Exit status: %s\n" status))))) + (pr-save-file-modes + (let ((buffer (get-buffer-create "*Printing Command Output*")) + (cmd (pr-command command)) + status) + (setq args (pr-remove-nil-from-list args)) + (save-excursion + (set-buffer buffer) + (goto-char (point-max)) + (insert (format "%s %S\n" cmd args))) + (setq status + (condition-case data + (apply 'call-process cmd nil buffer nil args) + ((quit error) + (error-message-string data)))) + (save-excursion + (set-buffer buffer) + (goto-char (point-max)) + (insert (format "Exit status: %s\n" status)))))) (defun pr-txt-print (from to) @@ -5485,7 +5461,7 @@ non-nil." (defun pr-set-outfilename (filename-sym) (and (not pr-spool-p) (eq (symbol-value filename-sym) t) - (set filename-sym (and (not (interactive-p)) + (set filename-sym (and (not pr-interactive-p) current-prefix-arg (ps-print-preprint current-prefix-arg)))) (and (symbol-value filename-sym) @@ -5580,41 +5556,42 @@ non-nil." (defun pr-text2ps (kind n-up filename &optional from to) - (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-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)) - ))) + ((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) @@ -6154,19 +6131,21 @@ COMMAND.exe, COMMAND.bat and COMMAND.com in this order." (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-file-ps-print 'pr-ps-file-up-ps-print - 'pr-ps-region-ps-print 'pr-ps-mode-ps-print - 'pr-ps-buffer-ps-print)) + (pr-save-interactive + (pr-interface-ps 'pr-despool-ps-print 'pr-ps-directory-ps-print + 'pr-ps-file-ps-print 'pr-ps-file-up-ps-print + 'pr-ps-region-ps-print 'pr-ps-mode-ps-print + 'pr-ps-buffer-ps-print))) (defun pr-interface-preview (&rest ignore) "Preview a PostScript file." (interactive) - (pr-interface-ps 'pr-despool-preview 'pr-ps-directory-preview - 'pr-ps-file-preview 'pr-ps-file-up-preview - 'pr-ps-region-preview 'pr-ps-mode-preview - 'pr-ps-buffer-preview)) + (pr-save-interactive + (pr-interface-ps 'pr-despool-preview 'pr-ps-directory-preview + 'pr-ps-file-preview 'pr-ps-file-up-preview + 'pr-ps-region-preview 'pr-ps-mode-preview + 'pr-ps-buffer-preview))) (defun pr-interface-ps (ps-despool ps-directory ps-file ps-file-up ps-region