/[emacs]/emacs/lisp/printing.el
ViewVC logotype

Diff of /emacs/lisp/printing.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3.2.14 by miles, Fri Nov 12 04:21:11 2004 UTC revision 1.3.2.15 by miles, Wed Dec 8 23:31:41 2004 UTC
# Line 5  Line 5 
5    
6  ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>  ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
7  ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>  ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
8  ;; Time-stamp: <2004/11/11 23:54:13 vinicius>  ;; Time-stamp: <2004/11/17 19:27:57 vinicius>
9  ;; Keywords: wp, print, PostScript  ;; Keywords: wp, print, PostScript
10  ;; Version: 6.8.2  ;; Version: 6.8.3
11  ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/  ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
12    
13  (defconst pr-version "6.8.2"  (defconst pr-version "6.8.3"
14    "printing.el, v 6.8.2 <2004/11/11 vinicius>    "printing.el, v 6.8.3 <2004/11/17 vinicius>
15    
16  Please send all bug fixes and enhancements to  Please send all bug fixes and enhancements to
17          Vinicius Jose Latorre <viniciusjl@ig.com.br>          Vinicius Jose Latorre <viniciusjl@ig.com.br>
# Line 440  Please send all bug fixes and enhancemen Line 440  Please send all bug fixes and enhancemen
440  ;;  ;;
441  ;; Current global keyboard mapping for GNU Emacs is:  ;; Current global keyboard mapping for GNU Emacs is:
442  ;;  ;;
443  ;;    (global-set-key [print]   'pr-ps-fast-fire)  ;;    (global-set-key [print]     'pr-ps-fast-fire)
444  ;;    (global-set-key [M-print] 'pr-ps-mode-using-ghostscript)  ;;    (global-set-key [M-print]   'pr-ps-mode-using-ghostscript)
445  ;;    (global-set-key [C-print] 'pr-txt-fast-fire)  ;;    (global-set-key [S-print]   'pr-ps-mode-using-ghostscript)
446    ;;    (global-set-key [C-print]   'pr-txt-fast-fire)
447    ;;    (global-set-key [C-M-print] 'pr-txt-fast-fire)
448  ;;  ;;
449  ;; And for XEmacs is:  ;; And for XEmacs is:
450  ;;  ;;
451  ;;    (global-set-key 'f22           'pr-ps-fast-fire)  ;;    (global-set-key 'f22                'pr-ps-fast-fire)
452  ;;    (global-set-key '(meta f22)    'pr-ps-mode-using-ghostscript)  ;;    (global-set-key '(meta f22)         'pr-ps-mode-using-ghostscript)
453  ;;    (global-set-key '(control f22) 'pr-txt-fast-fire)  ;;    (global-set-key '(shift f22)        'pr-ps-mode-using-ghostscript)
454    ;;    (global-set-key '(control f22)      'pr-txt-fast-fire)
455    ;;    (global-set-key '(control meta f22) 'pr-txt-fast-fire)
456  ;;  ;;
457  ;; As a suggestion of global keyboard mapping for some `printing' commands:  ;; As a suggestion of global keyboard mapping for some `printing' commands:
458  ;;  ;;
# Line 484  Please send all bug fixes and enhancemen Line 488  Please send all bug fixes and enhancemen
488  ;; `pr-temp-dir'                Specify a directory for temporary files during  ;; `pr-temp-dir'                Specify a directory for temporary files during
489  ;;                              printing.  ;;                              printing.
490  ;;  ;;
491  ;; `pr-ps-temp-file'            Specify PostScript temporary file name.  ;; `pr-ps-temp-file'            Specify PostScript temporary file name prefix.
492    ;;
493    ;; `pr-file-modes'              Specify the file permission bits for newly
494    ;;                              created files.
495  ;;  ;;
496  ;; `pr-gv-command'              Specify path and name of the gsview/gv  ;; `pr-gv-command'              Specify path and name of the gsview/gv
497  ;;                              utility.  ;;                              utility.
# Line 943  Please send all bug fixes and enhancemen Line 950  Please send all bug fixes and enhancemen
950  ;; Acknowledgments  ;; Acknowledgments
951  ;; ---------------  ;; ---------------
952  ;;  ;;
953    ;; Thanks to Stefan Monnier <monnier@iro.umontreal.ca> for GNU Emacs and XEmacs
954    ;; printing menu (in `pr-menu-spec') merging suggestion.
955    ;;
956  ;; Thanks to Lennart Borgman <lennart.borgman.073@student.lu.se> for gsprint  ;; Thanks to Lennart Borgman <lennart.borgman.073@student.lu.se> for gsprint
957  ;; suggestion (see tip 5 in section Tips).  ;; suggestion (see tip 5 in section Tips).
958  ;;  ;;
# Line 993  Please send all bug fixes and enhancemen Line 1003  Please send all bug fixes and enhancemen
1003       (error "`printing' requires `ps-print' package version 6.6.4 or later"))       (error "`printing' requires `ps-print' package version 6.6.4 or later"))
1004    
1005    
1006  (eval-and-compile  (defconst pr-cygwin-system
1007    (defconst pr-cygwin-system    (and ps-windows-system (getenv "OSTYPE")
1008      (and ps-windows-system (getenv "OSTYPE")         (string-match "cygwin" (getenv "OSTYPE"))))
          (string-match "cygwin" (getenv "OSTYPE")))))  
1009    
1010    
1011  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1012  ;; To avoid compilation gripes  ;; To avoid compilation gripes
1013    
1014    
1015  (eval-and-compile  (or (fboundp 'easy-menu-intern)         ; hacked from easymenu.el
1016        (defsubst easy-menu-intern (s)
1017          (if (stringp s) (intern s) s)))
1018    
1019    
1020    
1021    (or (fboundp 'subst-char-in-string)  (or (fboundp 'subst-char-in-string)     ; hacked from subr.el
1022        (defun subst-char-in-string (fromchar tochar string &optional inplace)      (defun subst-char-in-string (fromchar tochar string &optional inplace)
1023          "Replace FROMCHAR with TOCHAR in STRING each time it occurs.        "Replace FROMCHAR with TOCHAR in STRING each time it occurs.
1024  Unless optional argument INPLACE is non-nil, return a new string."  Unless optional argument INPLACE is non-nil, return a new string."
1025          (let ((i (length string))        (let ((i (length string))
1026                (newstr (if inplace string (copy-sequence string))))              (newstr (if inplace string (copy-sequence string))))
1027            (while (> (setq i (1- i)) 0)          (while (> (setq i (1- i)) 0)
1028              (if (eq (aref newstr i) fromchar)            (if (eq (aref newstr i) fromchar)
1029                  (aset newstr i tochar)))                (aset newstr i tochar)))
1030            newstr)))          newstr)))
1031    
1032    
1033    (or (fboundp 'make-temp-file)           ; hacked from subr.el
1034        (defun make-temp-file (prefix &optional dir-flag suffix)
1035          "Create a temporary file.
1036    The returned file name (created by appending some random characters at the end
1037    of PREFIX, and expanding against `temporary-file-directory' if necessary),
1038    is guaranteed to point to a newly created empty file.
1039    You can then use `write-region' to write new data into the file.
1040    
1041    If DIR-FLAG is non-nil, create a new empty directory instead of a file.
1042    
1043    If SUFFIX is non-nil, add that at the end of the file name."
1044          (let ((umask (default-file-modes))
1045                file)
1046            (unwind-protect
1047                (progn
1048                  ;; Create temp files with strict access rights.  It's easy to
1049                  ;; loosen them later, whereas it's impossible to close the
1050                  ;; time-window of loose permissions otherwise.
1051                  (set-default-file-modes ?\700)
1052                  (while (condition-case ()
1053                             (progn
1054                               (setq file
1055                                     (make-temp-name
1056                                      (expand-file-name prefix temporary-file-directory)))
1057                               (if suffix
1058                                   (setq file (concat file suffix)))
1059                               (if dir-flag
1060                                   (make-directory file)
1061                                 (write-region "" nil file nil 'silent nil 'excl))
1062                               nil)
1063                           (file-already-exists t))
1064                    ;; the file was somehow created by someone else between
1065                    ;; `make-temp-name' and `write-region', let's try again.
1066                    nil)
1067                  file)
1068              ;; Reset the umask.
1069              (set-default-file-modes umask)))))
1070    
   ;; GNU Emacs  
   (defalias 'pr-e-frame-char-height    'frame-char-height)  
   (defalias 'pr-e-frame-char-width     'frame-char-width)  
   (defalias 'pr-e-mouse-pixel-position 'mouse-pixel-position)  
   ;; XEmacs  
   (defalias 'pr-x-add-submenu             'add-submenu)  
   (defalias 'pr-x-event-function          'event-function)  
   (defalias 'pr-x-event-object            'event-object)  
   (defalias 'pr-x-find-menu-item          'find-menu-item)  
   (defalias 'pr-x-font-height             'font-height)  
   (defalias 'pr-x-font-width              'font-width)  
   (defalias 'pr-x-get-popup-menu-response 'get-popup-menu-response)  
   (defalias 'pr-x-make-event              'make-event)  
   (defalias 'pr-x-misc-user-event-p       'misc-user-event-p)  
   (defalias 'pr-x-relabel-menu-item       'relabel-menu-item)  
   (defalias 'pr-x-event-x-pixel           'event-x-pixel)  
   (defalias 'pr-x-event-y-pixel           'event-y-pixel)  
1071    
1072    (cond  ;; GNU Emacs
1073     ((eq ps-print-emacs-type 'emacs)     ; GNU Emacs  (defalias 'pr-e-frame-char-height    'frame-char-height)
1074      (defvar deactivate-mark nil)  (defalias 'pr-e-frame-char-width     'frame-char-width)
1075      (defalias 'pr-f-set-keymap-parents 'set-keymap-parent)  (defalias 'pr-e-mouse-pixel-position 'mouse-pixel-position)
1076      (defalias 'pr-f-set-keymap-name    'ignore)  ;; XEmacs
1077      (defalias 'pr-f-read-string        'read-string)  (defalias 'pr-x-add-submenu             'add-submenu)
1078      (defun pr-keep-region-active ()  (defalias 'pr-x-event-function          'event-function)
1079        (setq deactivate-mark nil)))  (defalias 'pr-x-event-object            'event-object)
1080    (defalias 'pr-x-find-menu-item          'find-menu-item)
1081     ((eq ps-print-emacs-type 'xemacs)    ; XEmacs  (defalias 'pr-x-font-height             'font-height)
1082      (defvar current-menubar     nil)  (defalias 'pr-x-font-width              'font-width)
1083      (defvar current-mouse-event nil)  (defalias 'pr-x-get-popup-menu-response 'get-popup-menu-response)
1084      (defvar zmacs-region-stays  nil)  (defalias 'pr-x-make-event              'make-event)
1085      (defalias 'pr-f-set-keymap-parents 'set-keymap-parents)  (defalias 'pr-x-misc-user-event-p       'misc-user-event-p)
1086      (defalias 'pr-f-set-keymap-name    'set-keymap-name)  (defalias 'pr-x-relabel-menu-item       'relabel-menu-item)
1087      (defun pr-f-read-string (prompt initial history default)  (defalias 'pr-x-event-x-pixel           'event-x-pixel)
1088        (let ((str (read-string prompt initial)))  (defalias 'pr-x-event-y-pixel           'event-y-pixel)
1089          (if (and str (not (string= str "")))  
1090              str  (cond
1091            default)))   ((featurep 'xemacs)                    ; XEmacs
1092      (defun pr-keep-region-active ()    (defvar current-menubar     nil)
1093        (setq zmacs-region-stays t)))))    (defvar current-mouse-event nil)
1094      (defvar zmacs-region-stays  nil)
1095      (defalias 'pr-f-set-keymap-parents 'set-keymap-parents)
1096      (defalias 'pr-f-set-keymap-name    'set-keymap-name)
1097      (defun pr-f-read-string (prompt initial history default)
1098        (let ((str (read-string prompt initial)))
1099          (if (and str (not (string= str "")))
1100              str
1101            default)))
1102      (defun pr-keep-region-active ()
1103        (setq zmacs-region-stays t)))
1104    
1105     (t                                     ; GNU Emacs
1106      (defvar deactivate-mark nil)
1107      (defalias 'pr-f-set-keymap-parents 'set-keymap-parent)
1108      (defalias 'pr-f-set-keymap-name    'ignore)
1109      (defalias 'pr-f-read-string        'read-string)
1110      (defun pr-keep-region-active ()
1111        (setq deactivate-mark nil))))
1112    
1113    
1114  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# Line 1119  Valid values are: Line 1172  Valid values are:
1172    :type '(choice :tag "Path style"    :type '(choice :tag "Path style"
1173                   (const :tag "Windows 9x/NT Style (\\)" :value windows)                   (const :tag "Windows 9x/NT Style (\\)" :value windows)
1174                   (const :tag "Unix Style (/)" :value unix))                   (const :tag "Unix Style (/)" :value unix))
1175      :version "20"
1176    :group 'printing)    :group 'printing)
1177    
1178    
# Line 1230  Examples: Line 1284  Examples:
1284                                  :tag "Directory"                                  :tag "Directory"
1285                                  (string :value "")                                  (string :value "")
1286                                  (symbol :value symbol)))))                                  (symbol :value symbol)))))
1287      :version "20"
1288    :group 'printing)    :group 'printing)
1289    
1290    
# Line 1244  modified by other means (for example, a Line 1299  modified by other means (for example, a
1299  function (see it for documentation) to update text printer menu."  function (see it for documentation) to update text printer menu."
1300    :type 'symbol    :type 'symbol
1301    :set 'pr-txt-name-custom-set    :set 'pr-txt-name-custom-set
1302      :version "20"
1303    :group 'printing)    :group 'printing)
1304    
1305    
# Line 1356  Examples: Line 1412  Examples:
1412                          (const :tag "None" nil)                          (const :tag "None" nil)
1413                          string)))                          string)))
1414    :set 'pr-alist-custom-set    :set 'pr-alist-custom-set
1415      :version "20"
1416    :group 'printing)    :group 'printing)
1417    
1418    
# Line 1370  modified by other means (for example, a Line 1427  modified by other means (for example, a
1427  function (see it for documentation) to update PostScript printer menu."  function (see it for documentation) to update PostScript printer menu."
1428    :type 'symbol    :type 'symbol
1429    :set 'pr-ps-name-custom-set    :set 'pr-ps-name-custom-set
1430      :version "20"
1431    :group 'printing)    :group 'printing)
1432    
1433    
# Line 1564  Examples: Line 1622  Examples:
1622               (sexp :tag "Value")))               (sexp :tag "Value")))
1623             ))             ))
1624    :set 'pr-alist-custom-set    :set 'pr-alist-custom-set
1625      :version "20"
1626    :group 'printing)    :group 'printing)
1627    
1628    
# Line 1578  Examples: Line 1637  Examples:
1637                  ((memq system-type '(vax-vms axp-vms)) "SYS$SCRATCH:")                  ((memq system-type '(vax-vms axp-vms)) "SYS$SCRATCH:")
1638                  (t "/tmp")                  (t "/tmp")
1639                  )))))                  )))))
1640    "*Specify a directory for temporary files during printing."    "*Specify a directory for temporary files during printing.
1641    
1642    See also `pr-ps-temp-file' and `pr-file-modes'."
1643    :type '(directory :tag "Temporary Directory")    :type '(directory :tag "Temporary Directory")
1644      :version "20"
1645    :group 'printing)    :group 'printing)
1646    
1647    
1648  (defcustom pr-ps-temp-file "prspool.ps"  (defcustom pr-ps-temp-file "prspool-"
1649    "*Specify PostScript temporary file name."    "*Specify PostScript temporary file name prefix.
1650    
1651    See also `pr-temp-dir' and `pr-file-modes'."
1652    :type '(file :tag "PostScript Temporary File Name")    :type '(file :tag "PostScript Temporary File Name")
1653      :version "21"
1654      :group 'printing)
1655    
1656    
1657    ;; It uses 0600 as default instead of (default-file-modes).
1658    ;; So, by default, only the session owner have permission to deal with files
1659    ;; generated by `printing'.
1660    (defcustom pr-file-modes ?\600
1661      "*Specify the file permission bits for newly created files.
1662    
1663    It should be an integer; only the low 9 bits are used.
1664    
1665    See also `pr-temp-dir' and `pr-ps-temp-file'."
1666      :type '(integer :tag "File Permission Bits")
1667      :version "21.3"
1668    :group 'printing)    :group 'printing)
1669    
1670    
# Line 1597  Examples: Line 1676  Examples:
1676    
1677  See also `pr-path-alist'."  See also `pr-path-alist'."
1678    :type '(string :tag "Ghostview Utility")    :type '(string :tag "Ghostview Utility")
1679      :version "20"
1680    :group 'printing)    :group 'printing)
1681    
1682    
# Line 1608  See also `pr-path-alist'." Line 1688  See also `pr-path-alist'."
1688    
1689  See also `pr-path-alist'."  See also `pr-path-alist'."
1690    :type '(string :tag "Ghostscript Utility")    :type '(string :tag "Ghostscript Utility")
1691      :version "20"
1692    :group 'printing)    :group 'printing)
1693    
1694    
# Line 1638  To see ghostscript documentation for mor Line 1719  To see ghostscript documentation for mor
1719       located in the same directory as gswin32.exe.       located in the same directory as gswin32.exe.
1720     - for brief documentation, type: gswin32.exe -h"     - for brief documentation, type: gswin32.exe -h"
1721    :type '(repeat (string :tag "Ghostscript Switch"))    :type '(repeat (string :tag "Ghostscript Switch"))
1722      :version "20"
1723    :group 'printing)    :group 'printing)
1724    
1725    
# Line 1654  A note on the gs switches: Line 1736  A note on the gs switches:
1736  See `pr-gs-switches' for documentation.  See `pr-gs-switches' for documentation.
1737  See also `pr-ps-printer-alist'."  See also `pr-ps-printer-alist'."
1738    :type '(string :tag "Ghostscript Device")    :type '(string :tag "Ghostscript Device")
1739      :version "20"
1740    :group 'printing)    :group 'printing)
1741    
1742    
# Line 1667  A note on the gs switches: Line 1750  A note on the gs switches:
1750  See `pr-gs-switches' for documentation.  See `pr-gs-switches' for documentation.
1751  See also `pr-ps-printer-alist'."  See also `pr-ps-printer-alist'."
1752    :type '(integer :tag "Ghostscript Resolution")    :type '(integer :tag "Ghostscript Resolution")
1753      :version "20"
1754    :group 'printing)    :group 'printing)
1755    
1756    
# Line 1679  ghostscript to print a PostScript file. Line 1763  ghostscript to print a PostScript file.
1763  In GNU or Unix system, if ghostscript is set as a PostScript filter, this  In GNU or Unix system, if ghostscript is set as a PostScript filter, this
1764  variable should be nil."  variable should be nil."
1765    :type 'boolean    :type 'boolean
1766      :version "20"
1767    :group 'printing)    :group 'printing)
1768    
1769    
1770  (defcustom pr-faces-p nil  (defcustom pr-faces-p nil
1771    "*Non-nil means print with face attributes."    "*Non-nil means print with face attributes."
1772    :type 'boolean    :type 'boolean
1773      :version "20"
1774    :group 'printing)    :group 'printing)
1775    
1776    
1777  (defcustom pr-spool-p nil  (defcustom pr-spool-p nil
1778    "*Non-nil means spool printing in a buffer."    "*Non-nil means spool printing in a buffer."
1779    :type 'boolean    :type 'boolean
1780      :version "20"
1781    :group 'printing)    :group 'printing)
1782    
1783    
1784  (defcustom pr-file-landscape nil  (defcustom pr-file-landscape nil
1785    "*Non-nil means print PostScript file in landscape orientation."    "*Non-nil means print PostScript file in landscape orientation."
1786    :type 'boolean    :type 'boolean
1787      :version "20"
1788    :group 'printing)    :group 'printing)
1789    
1790    
1791  (defcustom pr-file-duplex nil  (defcustom pr-file-duplex nil
1792    "*Non-nil means print PostScript file in duplex mode."    "*Non-nil means print PostScript file in duplex mode."
1793    :type 'boolean    :type 'boolean
1794      :version "20"
1795    :group 'printing)    :group 'printing)
1796    
1797    
# Line 1714  right. Line 1803  right.
1803  If tumble is on, produces a printing suitable for binding at the top or  If tumble is on, produces a printing suitable for binding at the top or
1804  bottom."  bottom."
1805    :type 'boolean    :type 'boolean
1806      :version "20"
1807    :group 'printing)    :group 'printing)
1808    
1809    
# Line 1726  When this variable is non-nil, the `*-bu Line 1816  When this variable is non-nil, the `*-bu
1816  `*-region*' commands, that is, `*-buffer*' commands will print only the region  `*-region*' commands, that is, `*-buffer*' commands will print only the region
1817  marked instead of all buffer."  marked instead of all buffer."
1818    :type 'boolean    :type 'boolean
1819      :version "20"
1820    :group 'printing)    :group 'printing)
1821    
1822    
# Line 1737  and `*-region*' commands will behave lik Line 1828  and `*-region*' commands will behave lik
1828  `*-buffer*' commands will print the current buffer and `*-region*' commands  `*-buffer*' commands will print the current buffer and `*-region*' commands
1829  will print the current region."  will print the current region."
1830    :type 'boolean    :type 'boolean
1831      :version "20"
1832    :group 'printing)    :group 'printing)
1833    
1834    
# Line 1937  DEFAULT                It's a way to set default value Line 2029  DEFAULT                It's a way to set default value
2029                (variable :tag "Other"))                (variable :tag "Other"))
2030               (sexp :tag "Value")))               (sexp :tag "Value")))
2031             ))             ))
2032      :version "20"
2033    :group 'printing)    :group 'printing)
2034    
2035    
# Line 1954  NOTE: Don't forget to download and insta Line 2047  NOTE: Don't forget to download and insta
2047        `pr-ps-utility-alist'."        `pr-ps-utility-alist'."
2048    :type '(symbol :tag "PS File Utility")    :type '(symbol :tag "PS File Utility")
2049    :set 'pr-ps-utility-custom-set    :set 'pr-ps-utility-custom-set
2050      :version "20"
2051    :group 'printing)    :group 'printing)
2052    
2053    
# Line 2138  Examples: Line 2232  Examples:
2232                    (sexp :tag "Value")))                    (sexp :tag "Value")))
2233                  ))                  ))
2234    :set 'pr-alist-custom-set    :set 'pr-alist-custom-set
2235      :version "20"
2236    :group 'printing)    :group 'printing)
2237    
2238    
# Line 2146  Examples: Line 2241  Examples:
2241    
2242  See also `pr-menu-char-height' and `pr-menu-char-width'."  See also `pr-menu-char-height' and `pr-menu-char-width'."
2243    :type 'boolean    :type 'boolean
2244      :version "20"
2245    :group 'printing)    :group 'printing)
2246    
2247    
2248  (defcustom pr-menu-char-height  (defcustom pr-menu-char-height
2249    (cond ((eq ps-print-emacs-type 'emacs) ; GNU Emacs    (cond ((featurep 'xemacs)             ; XEmacs
2250           (pr-e-frame-char-height))           (pr-x-font-height (face-font 'default)))
2251          ((eq ps-print-emacs-type 'xemacs) ; XEmacs          (t                              ; GNU Emacs
2252           (pr-x-font-height (face-font 'default))))           (pr-e-frame-char-height)))
2253    "*Specify menu char height in pixels.    "*Specify menu char height in pixels.
2254    
2255  This variable is used to guess which vertical position should be locked the  This variable is used to guess which vertical position should be locked the
# Line 2161  menu, so don't forget to adjust it if me Line 2257  menu, so don't forget to adjust it if me
2257    
2258  See also `pr-menu-lock' and `pr-menu-char-width'."  See also `pr-menu-lock' and `pr-menu-char-width'."
2259    :type 'integer    :type 'integer
2260      :version "20"
2261    :group 'printing)    :group 'printing)
2262    
2263    
2264  (defcustom pr-menu-char-width  (defcustom pr-menu-char-width
2265    (cond ((eq ps-print-emacs-type 'emacs) ; GNU Emacs    (cond ((featurep 'xemacs)             ; XEmacs
2266           (pr-e-frame-char-width))           (pr-x-font-width (face-font 'default)))
2267          ((eq ps-print-emacs-type 'xemacs) ; XEmacs          (t                              ; GNU Emacs
2268           (pr-x-font-width (face-font 'default))))           (pr-e-frame-char-width)))
2269    "*Specify menu char width in pixels.    "*Specify menu char width in pixels.
2270    
2271  This variable is used to guess which horizontal position should be locked the  This variable is used to guess which horizontal position should be locked the
# Line 2176  menu, so don't forget to adjust it if me Line 2273  menu, so don't forget to adjust it if me
2273    
2274  See also `pr-menu-lock' and `pr-menu-char-height'."  See also `pr-menu-lock' and `pr-menu-char-height'."
2275    :type 'integer    :type 'integer
2276      :version "20"
2277    :group 'printing)    :group 'printing)
2278    
2279    
# Line 2292  SETTING                It's a cons like: Line 2390  SETTING                It's a cons like:
2390                (variable :tag "Other"))                (variable :tag "Other"))
2391               (sexp :tag "Value")))               (sexp :tag "Value")))
2392             ))             ))
2393      :version "20"
2394    :group 'printing)    :group 'printing)
2395    
2396    
# Line 2345  Any other value is ignored." Line 2444  Any other value is ignored."
2444                           (const postscript-process)                           (const postscript-process)
2445                           (const printing)                           (const printing)
2446                           (const help)))                           (const help)))
2447      :version "20"
2448    :group 'printing)    :group 'printing)
2449    
2450    
# Line 2356  happens when printing: Line 2456  happens when printing:
2456    
2457     Error: could not open \"c:\\temp\\prspool.ps\" for reading."     Error: could not open \"c:\\temp\\prspool.ps\" for reading."
2458    :type 'boolean    :type 'boolean
2459      :version "20"
2460    :group 'printing)    :group 'printing)
2461    
2462    
# Line 2369  It's used by `pr-ps-directory-preview', Line 2470  It's used by `pr-ps-directory-preview',
2470  `pr-ps-directory-print', `pr-ps-directory-ps-print', `pr-printify-directory'  `pr-ps-directory-print', `pr-ps-directory-ps-print', `pr-printify-directory'
2471  and `pr-txt-directory'."  and `pr-txt-directory'."
2472    :type 'boolean    :type 'boolean
2473      :version "20"
2474    :group 'printing)    :group 'printing)
2475    
2476    
# Line 2377  and `pr-txt-directory'." Line 2479  and `pr-txt-directory'."
2479    
2480  It's used by `pr-interface'."  It's used by `pr-interface'."
2481    :type 'string    :type 'string
2482      :version "20"
2483    :group 'printing)    :group 'printing)
2484    
2485    
# Line 2390  NOTE: Case is important for matching, th Line 2493  NOTE: Case is important for matching, th
2493    
2494  It's used by `pr-interface'."  It's used by `pr-interface'."
2495    :type '(repeat (regexp :tag "Buffer Name Regexp"))    :type '(repeat (regexp :tag "Buffer Name Regexp"))
2496      :version "20"
2497    :group 'printing)    :group 'printing)
2498    
2499    
# Line 2398  It's used by `pr-interface'." Line 2502  It's used by `pr-interface'."
2502    
2503  It's used by `pr-interface'."  It's used by `pr-interface'."
2504    :type 'boolean    :type 'boolean
2505      :version "20"
2506    :group 'printing)    :group 'printing)
2507    
2508    
# Line 2445  See `pr-ps-printer-alist'.") Line 2550  See `pr-ps-printer-alist'.")
2550    
2551    
2552  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2553    ;; Macros
2554    
2555    
2556    (defmacro pr-save-file-modes (&rest body)
2557      "Set temporally file modes to `pr-file-modes'."
2558      `(let ((pr--default-file-modes (default-file-modes))) ; save default
2559         (set-default-file-modes pr-file-modes)
2560         ,@body
2561         (set-default-file-modes pr--default-file-modes))) ; restore default
2562    
2563    
2564    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2565  ;; Keys & Menus  ;; Keys & Menus
2566    
2567    
# Line 2473  See `pr-ps-printer-alist'.") Line 2590  See `pr-ps-printer-alist'.")
2590    (and pr-print-using-ghostscript (not pr-spool-p)))    (and pr-print-using-ghostscript (not pr-spool-p)))
2591    
2592    
2593  (eval-and-compile  (defun pr-get-symbol (name)
2594    (defun pr-get-symbol (name)    (easy-menu-intern name))
     (easy-menu-intern name))  
2595    
2596    (cond  (cond
2597     ((eq ps-print-emacs-type 'emacs)     ; GNU Emacs   ((featurep 'xemacs)                    ; XEmacs
2598      (defun pr-region-active-p ()    (defvar zmacs-region-stays nil)       ; to avoid compilation gripes
2599        (and pr-auto-region transient-mark-mode mark-active)))    (defun pr-region-active-p ()
2600        (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p))))
2601     ((eq ps-print-emacs-type 'xemacs)    ; XEmacs  
2602      (defvar zmacs-region-stays nil)     ; to avoid compilation gripes   (t                                     ; GNU Emacs
2603      (defun pr-region-active-p ()    (defun pr-region-active-p ()
2604        (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p)))))      (and pr-auto-region transient-mark-mode mark-active))))
2605    
2606    
2607    (defconst pr-menu-spec  (defconst pr-menu-spec
2608      (cond    ;; Menu mapping:
2609       ((eq ps-print-emacs-type 'emacs)   ; GNU Emacs    ;;   unfortunately XEmacs doesn't support :active for submenus,
2610        '(    ;;   only for items.
2611          ["Printing Interface" pr-interface    ;;   So, it uses :included instead of :active.
2612           :help "Use buffer interface instead of menu interface"]    ;;   Also, XEmacs doesn't support :help tag.
2613          "--"    (let ((pr-:active  (if (featurep 'xemacs)
2614          ("PostScript Preview" :visible (pr-visible-p 'postscript)                           :included      ; XEmacs
2615           :help "Preview PostScript instead of sending to printer"                         :active))        ; GNU Emacs
2616           ("Directory" :active (not pr-spool-p)          (pr-:help    (if (featurep 'xemacs)
2617            ["1-up"     (pr-ps-directory-preview 1   nil nil t) t]                           'ignore                                ; XEmacs
2618            ["2-up"     (pr-ps-directory-preview 2   nil nil t) t]                         #'(lambda (text) (list :help text)))))   ; GNU Emacs
2619            ["4-up"     (pr-ps-directory-preview 4   nil nil t) t]      `(
2620            ["Other..." (pr-ps-directory-preview nil nil nil t)        ["Printing Interface" pr-interface
2621             :keys "\\[pr-ps-buffer-preview]"])         ,@(funcall
2622           ("Buffer" :active (not pr-spool-p)            pr-:help "Use buffer interface instead of menu interface")]
2623            ["1-up"     (pr-ps-buffer-preview 1   t) t]        "--"
2624            ["2-up"     (pr-ps-buffer-preview 2   t) t]        ("PostScript Preview" :included (pr-visible-p 'postscript)
2625            ["4-up"     (pr-ps-buffer-preview 4   t) t]         ,@(funcall
2626            ["Other..." (pr-ps-buffer-preview nil t)            pr-:help "Preview PostScript instead of sending to printer")
2627             :keys "\\[pr-ps-buffer-preview]"])         ("Directory" ,pr-:active (not pr-spool-p)
2628           ("Region" :active (and (not pr-spool-p) (ps-mark-active-p))          ["1-up"     (pr-ps-directory-preview 1   nil nil t) t]
2629            ["1-up"     (pr-ps-region-preview 1   t) t]          ["2-up"     (pr-ps-directory-preview 2   nil nil t) t]
2630            ["2-up"     (pr-ps-region-preview 2   t) t]          ["4-up"     (pr-ps-directory-preview 4   nil nil t) t]
2631            ["4-up"     (pr-ps-region-preview 4   t) t]          ["Other..." (pr-ps-directory-preview nil nil nil t)
2632            ["Other..." (pr-ps-region-preview nil t)           :keys "\\[pr-ps-buffer-preview]"])
2633             :keys "\\[pr-ps-region-preview]"])         ("Buffer" ,pr-:active (not pr-spool-p)
2634           ("Mode" :active (and (not pr-spool-p) (pr-mode-alist-p))          ["1-up"     (pr-ps-buffer-preview 1   t) t]
2635            ["1-up"     (pr-ps-mode-preview 1   t) t]          ["2-up"     (pr-ps-buffer-preview 2   t) t]
2636            ["2-up"     (pr-ps-mode-preview 2   t) t]          ["4-up"     (pr-ps-buffer-preview 4   t) t]
2637            ["4-up"     (pr-ps-mode-preview 4   t) t]          ["Other..." (pr-ps-buffer-preview nil t)
2638            ["Other..." (pr-ps-mode-preview nil t)           :keys "\\[pr-ps-buffer-preview]"])
2639             :keys "\\[pr-ps-mode-preview]"])         ("Region" ,pr-:active (and (not pr-spool-p) (ps-mark-active-p))
2640           ("File"          ["1-up"     (pr-ps-region-preview 1   t) t]
2641            ["No Preprocessing..." (call-interactively 'pr-ps-file-preview)          ["2-up"     (pr-ps-region-preview 2   t) t]
2642             :keys "\\[pr-ps-file-preview]"          ["4-up"     (pr-ps-region-preview 4   t) t]
2643             :help "Preview PostScript file"]          ["Other..." (pr-ps-region-preview nil t)
2644            "--"           :keys "\\[pr-ps-region-preview]"])
2645            ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist         ("Mode" ,pr-:active (and (not pr-spool-p) (pr-mode-alist-p))
2646             :help "Select PostScript utility"]          ["1-up"     (pr-ps-mode-preview 1   t) t]
2647            "--"          ["2-up"     (pr-ps-mode-preview 2   t) t]
2648            ["1-up..."   (pr-ps-file-up-preview 1   t t) pr-ps-utility-alist]          ["4-up"     (pr-ps-mode-preview 4   t) t]
2649            ["2-up..."   (pr-ps-file-up-preview 2   t t) pr-ps-utility-alist]          ["Other..." (pr-ps-mode-preview nil t)
2650            ["4-up..."   (pr-ps-file-up-preview 4   t t) pr-ps-utility-alist]           :keys "\\[pr-ps-mode-preview]"])
2651            ["Other..."  (pr-ps-file-up-preview nil t t)         ("File"
2652             :keys "\\[pr-ps-file-up-preview]" :active pr-ps-utility-alist]          ["No Preprocessing..." (call-interactively 'pr-ps-file-preview)
2653            "--"           :keys "\\[pr-ps-file-preview]"
2654            ["Landscape" pr-toggle-file-landscape           ,@(funcall
2655             :style toggle :selected pr-file-landscape              pr-:help "Preview PostScript file")]
            :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"  
            :active pr-ps-utility-alist]  
           ["Tumble"    pr-toggle-file-tumble  
            :style toggle :selected pr-file-tumble  
            :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)"  
          ("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" :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)  
           ["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]"  
            :help "Send PostScript file to printer"]  
           "--"  
           ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist  
            :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]  
           ["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  
            :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"  
            :active pr-ps-utility-alist]  
           ["Tumble"    pr-toggle-file-tumble  
            :style toggle :selected pr-file-tumble  
            :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)"])  
         ["PostScript Printers" pr-update-menus  
          :active pr-ps-printer-alist :included (pr-visible-p 'postscript)  
          :help "Select PostScript printer"]  
         "--"  
         ("Printify" :visible (pr-visible-p 'text)  
          :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"  
          ["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"]  
2656          "--"          "--"
2657          ["Landscape"               pr-toggle-landscape          ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist
2658           :style toggle :selected ps-landscape-mode           ,@(funcall
2659           :included (pr-visible-p 'postscript-options)]              pr-:help "Select PostScript utility")]
         ["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" :visible (pr-visible-p 'postscript-options)  
          :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)  
           :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)])  
2660          "--"          "--"
2661          ["Spool Buffer"            pr-toggle-spool          ["1-up..."   (pr-ps-file-up-preview 1   t t) pr-ps-utility-alist]
2662           :style toggle :selected pr-spool-p          ["2-up..."   (pr-ps-file-up-preview 2   t t) pr-ps-utility-alist]
2663           :included (pr-visible-p 'postscript-process)          ["4-up..."   (pr-ps-file-up-preview 4   t t) pr-ps-utility-alist]
2664           :help "Toggle PostScript spooling"]          ["Other..."  (pr-ps-file-up-preview nil t t)
2665          ["Print with faces"        pr-toggle-faces           :keys "\\[pr-ps-file-up-preview]" :active pr-ps-utility-alist]
          :style toggle :selected pr-faces-p  
          :included (pr-visible-p 'postscript-process)  
          :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"]  
2666          "--"          "--"
2667          ["Auto Region" pr-toggle-region          ["Landscape" pr-toggle-file-landscape-menu
2668           :style toggle :selected pr-auto-region           :style toggle :selected pr-file-landscape
2669           :included (pr-visible-p 'printing)]           ,@(funcall
2670          ["Auto Mode"   pr-toggle-mode              pr-:help "Toggle landscape for PostScript file")
2671           :style toggle :selected pr-auto-mode           :active pr-ps-utility-alist]
2672           :included (pr-visible-p 'printing)]          ["Duplex"    pr-toggle-file-duplex-menu
2673          ["Menu Lock"   pr-toggle-lock           :style toggle :selected pr-file-duplex
2674           :style toggle :selected pr-menu-lock           ,@(funcall
2675           :included (pr-visible-p 'printing)]              pr-:help "Toggle duplex for PostScript file")
2676             :active pr-ps-utility-alist]
2677            ["Tumble"    pr-toggle-file-tumble-menu
2678             :style toggle :selected pr-file-tumble
2679             ,@(funcall
2680                pr-:help "Toggle tumble for PostScript file")
2681             :active (and pr-file-duplex pr-ps-utility-alist)])
2682           ["Despool..." (call-interactively 'pr-despool-preview)
2683            :active pr-spool-p :keys "\\[pr-despool-preview]"
2684            ,@(funcall
2685               pr-:help "Despool PostScript buffer to printer or file (C-u)")])
2686          ("PostScript Print" :included (pr-visible-p 'postscript)
2687           ,@(funcall
2688              pr-:help "Send PostScript to printer or file (C-u)")
2689           ("Directory"
2690            ["1-up"     (pr-ps-directory-ps-print 1   nil nil t) t]
2691            ["2-up"     (pr-ps-directory-ps-print 2   nil nil t) t]
2692            ["4-up"     (pr-ps-directory-ps-print 4   nil nil t) t]
2693            ["Other..." (pr-ps-directory-ps-print nil nil nil t)
2694             :keys "\\[pr-ps-buffer-ps-print]"])
2695           ("Buffer"
2696            ["1-up"     (pr-ps-buffer-ps-print 1   t) t]
2697            ["2-up"     (pr-ps-buffer-ps-print 2   t) t]
2698            ["4-up"     (pr-ps-buffer-ps-print 4   t) t]
2699            ["Other..." (pr-ps-buffer-ps-print nil t)
2700             :keys "\\[pr-ps-buffer-ps-print]"])
2701           ("Region" ,pr-:active (ps-mark-active-p)
2702            ["1-up"     (pr-ps-region-ps-print 1   t) t]
2703            ["2-up"     (pr-ps-region-ps-print 2   t) t]
2704            ["4-up"     (pr-ps-region-ps-print 4   t) t]
2705            ["Other..." (pr-ps-region-ps-print nil t)
2706             :keys "\\[pr-ps-region-ps-print]"])
2707           ("Mode" ,pr-:active (pr-mode-alist-p)
2708            ["1-up"     (pr-ps-mode-ps-print 1   t) t]
2709            ["2-up"     (pr-ps-mode-ps-print 2   t) t]
2710            ["4-up"     (pr-ps-mode-ps-print 4   t) t]
2711            ["Other..." (pr-ps-mode-ps-print nil t)
2712             :keys "\\[pr-ps-mode-ps-print]"])
2713           ("File"
2714            ["No Preprocessing..." (call-interactively 'pr-ps-file-ps-print)
2715             :keys "\\[pr-ps-file-ps-print]"
2716             ,@(funcall
2717                pr-:help "Send PostScript file to printer")]
2718          "--"          "--"
2719          ("Customize" :visible (pr-visible-p 'help)          ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist
2720           ["printing" pr-customize       t]           ,@(funcall
2721           ["ps-print" ps-print-customize t]              pr-:help "Select PostScript utility")]
          ["lpr"      lpr-customize      t])  
         ("Show Settings" :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]  
2722          "--"          "--"
2723          ("PostScript Preview" :included (pr-visible-p 'postscript)          ["1-up..."   (pr-ps-file-up-ps-print 1   t t) pr-ps-utility-alist]
2724           ("Directory" :included (not pr-spool-p)          ["2-up..."   (pr-ps-file-up-ps-print 2   t t) pr-ps-utility-alist]
2725            ["1-up"     (pr-ps-directory-preview 1   nil nil t) t]          ["4-up..."   (pr-ps-file-up-ps-print 4   t t) pr-ps-utility-alist]
2726            ["2-up"     (pr-ps-directory-preview 2   nil nil t) t]          ["Other..."  (pr-ps-file-up-ps-print nil t t)
2727            ["4-up"     (pr-ps-directory-preview 4   nil nil t) t]           :keys "\\[pr-ps-file-up-ps-print]" :active pr-ps-utility-alist]
           ["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)]  
2728          "--"          "--"
2729          ("Printify" :included (pr-visible-p 'text)          ["Landscape" pr-toggle-file-landscape-menu
2730           ["Directory" pr-printify-directory t]           :style toggle :selected pr-file-landscape
2731           ["Buffer"    pr-printify-buffer    t]           ,@(funcall
2732           ["Region"    pr-printify-region    (ps-mark-active-p)])              pr-:help "Toggle landscape for PostScript file")
2733          ("Print" :included (pr-visible-p 'text)           :active pr-ps-utility-alist]
2734           ["Directory" pr-txt-directory t]          ["Duplex"    pr-toggle-file-duplex-menu
2735           ["Buffer"    pr-txt-buffer    t]           :style toggle :selected pr-file-duplex
2736           ["Region"    pr-txt-region    (ps-mark-active-p)]           ,@(funcall
2737           ["Mode"      pr-txt-mode      (pr-mode-alist-p)])              pr-:help "Toggle duplex for PostScript file")
2738          ["Text Printers" pr-update-menus           :active pr-ps-utility-alist]
2739           :active pr-txt-printer-alist :included (pr-visible-p 'text)]          ["Tumble"    pr-toggle-file-tumble-menu
2740          "--"           :style toggle :selected pr-file-tumble
2741          ["Landscape"               pr-toggle-landscape           ,@(funcall
2742           :style toggle :selected ps-landscape-mode              pr-:help "Toggle tumble for PostScript file")
2743           :included (pr-visible-p 'postscript-options)]           :active (and pr-file-duplex pr-ps-utility-alist)])
2744          ["Print Header"            pr-toggle-header         ["Despool..." (call-interactively 'pr-despool-ps-print)
2745           :style toggle :selected ps-print-header          :active pr-spool-p :keys "\\[pr-despool-ps-print]"
2746           :included (pr-visible-p 'postscript-options)]          ,@(funcall
2747          ["Print Header Frame"      pr-toggle-header-frame             pr-:help "Despool PostScript buffer to printer or file (C-u)")])
2748           :style toggle :selected ps-print-header-frame :active ps-print-header        ["PostScript Printers" pr-update-menus
2749           :included (pr-visible-p 'postscript-options)]         :active pr-ps-printer-alist :included (pr-visible-p 'postscript)
2750          ["Line Number"             pr-toggle-line         ,@(funcall
2751           :style toggle :selected ps-line-number            pr-:help "Select PostScript printer")]
2752           :included (pr-visible-p 'postscript-options)]        "--"
2753          ["Zebra Stripes"           pr-toggle-zebra        ("Printify" :included (pr-visible-p 'text)
2754           :style toggle :selected ps-zebra-stripes         ,@(funcall
2755           :included (pr-visible-p 'postscript-options)]            pr-:help
2756          ["Duplex"                  pr-toggle-duplex            "Replace non-printing chars with printable representations.")
2757           :style toggle :selected ps-spool-duplex         ["Directory" pr-printify-directory t]
2758           :included (pr-visible-p 'postscript-options)]         ["Buffer"    pr-printify-buffer    t]
2759          ["Tumble"                  pr-toggle-tumble         ["Region"    pr-printify-region    (ps-mark-active-p)])
2760           :style toggle :selected ps-spool-tumble :active ps-spool-duplex        ("Print" :included (pr-visible-p 'text)
2761           :included (pr-visible-p 'postscript-options)]         ,@(funcall
2762          ["Upside-Down"             pr-toggle-upside-down            pr-:help "Send text to printer")
2763           :style toggle :selected ps-print-upside-down         ["Directory" pr-txt-directory t]
2764           :included (pr-visible-p 'postscript-options)]         ["Buffer"    pr-txt-buffer    t]
2765          ("Print All Pages" :included (pr-visible-p 'postscript-options)         ["Region"    pr-txt-region    (ps-mark-active-p)]
2766           ["All Pages"   (pr-even-or-odd-pages nil)         ["Mode"      pr-txt-mode      (pr-mode-alist-p)])
2767            :style radio :selected (eq ps-even-or-odd-pages nil)]        ["Text Printers" pr-update-menus
2768           ["Even Pages"  (pr-even-or-odd-pages 'even-page)         :active pr-txt-printer-alist :included (pr-visible-p 'text)
2769            :style radio :selected (eq ps-even-or-odd-pages 'even-page)]         ,@(funcall
2770           ["Odd Pages"   (pr-even-or-odd-pages 'odd-page)            pr-:help "Select text printer")]
2771            :style radio :selected (eq ps-even-or-odd-pages 'odd-page)]        "--"
2772           ["Even Sheets" (pr-even-or-odd-pages 'even-sheet)        ["Landscape"               pr-toggle-landscape-menu
2773            :style radio :selected (eq ps-even-or-odd-pages 'even-sheet)]         :style toggle :selected ps-landscape-mode
2774           ["Odd Sheets"  (pr-even-or-odd-pages 'odd-sheet)         :included (pr-visible-p 'postscript-options)]
2775            :style radio :selected (eq ps-even-or-odd-pages 'odd-sheet)])        ["Print Header"            pr-toggle-header-menu
2776          "--"         :style toggle :selected ps-print-header
2777          ["Spool Buffer"            pr-toggle-spool         :included (pr-visible-p 'postscript-options)]
2778           :style toggle :selected pr-spool-p        ["Print Header Frame"      pr-toggle-header-frame-menu
2779           :included (pr-visible-p 'postscript-process)]         :style toggle :selected ps-print-header-frame :active ps-print-header
2780          ["Print with faces"        pr-toggle-faces         :included (pr-visible-p 'postscript-options)]
2781           :style toggle :selected pr-faces-p        ["Line Number"             pr-toggle-line-menu
2782           :included (pr-visible-p 'postscript-process)]         :style toggle :selected ps-line-number
2783          ["Print via Ghostscript" pr-toggle-ghostscript         :included (pr-visible-p 'postscript-options)]
2784           :style toggle :selected pr-print-using-ghostscript        ["Zebra Stripes"           pr-toggle-zebra-menu
2785           :included (pr-visible-p 'postscript-process)]         :style toggle :selected ps-zebra-stripes
2786          "--"         :included (pr-visible-p 'postscript-options)]
2787          ["Auto Region" pr-toggle-region        ["Duplex"                  pr-toggle-duplex-menu
2788           :style toggle :selected pr-auto-region         :style toggle :selected ps-spool-duplex
2789           :included (pr-visible-p 'printing)]         :included (pr-visible-p 'postscript-options)]
2790          ["Auto Mode"   pr-toggle-mode        ["Tumble"                  pr-toggle-tumble-menu
2791           :style toggle :selected pr-auto-mode         :style toggle :selected ps-spool-tumble :active ps-spool-duplex
2792           :included (pr-visible-p 'printing)]         :included (pr-visible-p 'postscript-options)]
2793          ["Menu Lock"   pr-toggle-lock        ["Upside-Down"             pr-toggle-upside-down-menu
2794           :style toggle :selected pr-menu-lock         :style toggle :selected ps-print-upside-down
2795           :included (pr-visible-p 'printing)]         :included (pr-visible-p 'postscript-options)]
2796          "--"        ("Print All Pages" :included (pr-visible-p 'postscript-options)
2797          ("Customize" :included (pr-visible-p 'help)         ,@(funcall
2798           ["printing" pr-customize       t]            pr-:help "Select odd/even pages/sheets to print")
2799           ["ps-print" ps-print-customize t]         ["All Pages"   (pr-even-or-odd-pages nil)
2800           ["lpr"      lpr-customize      t])          :style radio :selected (eq ps-even-or-odd-pages nil)]
2801          ("Show Settings" :included (pr-visible-p 'help)         ["Even Pages"  (pr-even-or-odd-pages 'even-page)
2802           ["printing" pr-show-pr-setup  t]          :style radio :selected (eq ps-even-or-odd-pages 'even-page)]
2803           ["ps-print" pr-show-ps-setup  t]         ["Odd Pages"   (pr-even-or-odd-pages 'odd-page)
2804           ["lpr"      pr-show-lpr-setup t])          :style radio :selected (eq ps-even-or-odd-pages 'odd-page)]
2805          ["Help" pr-help :active t :included (pr-visible-p 'help)]         ["Even Sheets" (pr-even-or-odd-pages 'even-sheet)
2806          ))          :style radio :selected (eq ps-even-or-odd-pages 'even-sheet)]
2807       ))         ["Odd Sheets"  (pr-even-or-odd-pages 'odd-sheet)
2808            :style radio :selected (eq ps-even-or-odd-pages 'odd-sheet)])
2809          "--"
2810          ["Spool Buffer"            pr-toggle-spool-menu
2811           :style toggle :selected pr-spool-p
2812           :included (pr-visible-p 'postscript-process)
2813           ,@(funcall
2814              pr-:help "Toggle PostScript spooling")]
2815          ["Print with faces"        pr-toggle-faces-menu
2816           :style toggle :selected pr-faces-p
2817           :included (pr-visible-p 'postscript-process)
2818           ,@(funcall
2819              pr-:help "Toggle PostScript printing with faces")]
2820          ["Print via Ghostscript" pr-toggle-ghostscript-menu
2821           :style toggle :selected pr-print-using-ghostscript
2822           :included (pr-visible-p 'postscript-process)
2823           ,@(funcall
2824              pr-:help "Toggle PostScript generation using ghostscript")]
2825          "--"
2826          ["Auto Region" pr-toggle-region-menu
2827           :style toggle :selected pr-auto-region
2828           :included (pr-visible-p 'printing)]
2829          ["Auto Mode"   pr-toggle-mode-menu
2830           :style toggle :selected pr-auto-mode
2831           :included (pr-visible-p 'printing)]
2832          ["Menu Lock"   pr-toggle-lock-menu
2833           :style toggle :selected pr-menu-lock
2834           :included (pr-visible-p 'printing)]
2835          "--"
2836          ("Customize" :included (pr-visible-p 'help)
2837           ["printing" pr-customize       t]
2838           ["ps-print" ps-print-customize t]
2839           ["lpr"      lpr-customize      t])
2840          ("Show Settings" :included (pr-visible-p 'help)
2841           ["printing" pr-show-pr-setup  t]
2842           ["ps-print" pr-show-ps-setup  t]
2843           ["lpr"      pr-show-lpr-setup t])
2844          ["Help" pr-help :active t :included (pr-visible-p 'help)]
2845          )))
2846    
2847    
2848    (cond
2849     ((featurep 'xemacs)                    ; XEmacs
2850      ;; Menu binding
2851      (pr-xemacs-global-menubar
2852       (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps")))
2853    
2854    
2855     (t                                     ; GNU Emacs
2856      ;; Menu binding
2857      (require 'easymenu)
2858      ;; Replace existing "print" item by "Printing" item.
2859      ;; If you're changing this file, you'll load it a second,
2860      ;; third... time, but "print" item exists only in the first load.
2861      (defvar pr-menu-print-item "print")
2862    (cond    (cond
2863     ((eq ps-print-emacs-type 'emacs)     ; GNU Emacs     ;; Emacs 20
2864      ;; Menu binding     ((string< emacs-version "21.")
2865      (require 'easymenu)      (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)
2866      ;; Replace existing "print" item by "Printing" item.      (when pr-menu-print-item
2867      ;; If you're changing this file, you'll load it a second,        (easy-menu-remove-item nil '("tools") pr-menu-print-item)
2868      ;; third... time, but "print" item exists only in the first load.        (setq pr-menu-print-item nil
2869      (defvar pr-menu-print-item "print")              pr-menu-bar (vector 'menu-bar 'tools
2870      (cond                                  (pr-get-symbol "Printing")))))
2871       ;; Emacs 20     ;; Emacs 21
2872       ((string< emacs-version "21.")     (pr-menu-print-item
2873        (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)      (easy-menu-change '("file") "Print" pr-menu-spec "print-buffer")
2874        (when pr-menu-print-item      (let ((items '("print-buffer"          "print-region"
2875          (easy-menu-remove-item nil '("tools") pr-menu-print-item)                     "ps-print-buffer-faces" "ps-print-region-faces"
2876          (setq pr-menu-print-item nil                     "ps-print-buffer"       "ps-print-region")))
2877                pr-menu-bar (vector 'menu-bar 'tools        (while items
2878                                    (pr-get-symbol "Printing")))))          (easy-menu-remove-item nil '("file") (car items))
2879       ;; Emacs 21          (setq items (cdr items)))
2880       (pr-menu-print-item        (setq pr-menu-print-item nil
2881        (easy-menu-change '("file") "Print" pr-menu-spec "print-buffer")              pr-menu-bar (vector 'menu-bar 'file
2882        (let ((items '("print-buffer"          "print-region"                                  (pr-get-symbol "Print")))))
2883                       "ps-print-buffer-faces" "ps-print-region-faces"     (t
2884                       "ps-print-buffer"       "ps-print-region")))      (easy-menu-change '("file") "Print" pr-menu-spec)))))
         (while items  
           (easy-menu-remove-item nil '("file") (car items))  
           (setq items (cdr items)))  
         (setq pr-menu-print-item nil  
               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))  
   
2885    
    ((eq ps-print-emacs-type 'xemacs)    ; XEmacs  
     ;; Menu binding  
     (pr-xemacs-global-menubar  
      (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps"))  
2886    
2887      ;; Key binding  ;; Key binding
2888      (global-set-key 'f22           'pr-ps-fast-fire)  (let ((pr-print-key (if (featurep 'xemacs)
2889      (global-set-key '(meta f22)    'pr-ps-mode-using-ghostscript)                          'f22            ; XEmacs
2890      (global-set-key '(control f22) 'pr-txt-fast-fire))))                        'print)))         ; GNU Emacs
2891      (global-set-key `[,pr-print-key]                'pr-ps-fast-fire)
2892      ;; Well, M-print and S-print are used because in my keyboard S-print works
2893      ;; and M-print doesn't.  But M-print can work in other keyboard.
2894      (global-set-key `[(meta ,pr-print-key)]         'pr-ps-mode-using-ghostscript)
2895      (global-set-key `[(shift ,pr-print-key)]        'pr-ps-mode-using-ghostscript)
2896      ;; Well, C-print and C-M-print are used because in my keyboard C-M-print works
2897      ;; and C-print doesn't.  But C-print can work in other keyboard.
2898      (global-set-key `[(control ,pr-print-key)]      'pr-txt-fast-fire)
2899      (global-set-key `[(control meta ,pr-print-key)] 'pr-txt-fast-fire))
2900    
2901    
2902  ;;; You can also use something like:  ;;; You can also use something like:
# Line 3837  Noninteractively, the argument FILENAME Line 3802  Noninteractively, the argument FILENAME
3802  send the image to the printer.  If FILENAME is a string, save the PostScript  send the image to the printer.  If FILENAME is a string, save the PostScript
3803  image in a file with that name."  image in a file with that name."
3804    (interactive (list (ps-print-preprint current-prefix-arg)))    (interactive (list (ps-print-preprint current-prefix-arg)))
3805    (let ((ps-lpr-command         (pr-command pr-ps-command))    (pr-save-file-modes
3806          (ps-lpr-switches        pr-ps-switches)     (let ((ps-lpr-command         (pr-command pr-ps-command))
3807          (ps-printer-name-option pr-ps-printer-switch)           (ps-lpr-switches        pr-ps-switches)
3808          (ps-printer-name        pr-ps-printer))           (ps-printer-name-option pr-ps-printer-switch)
3809      (ps-despool filename)))           (ps-printer-name        pr-ps-printer))
3810         (ps-despool filename))))
3811    
3812    
3813  ;;;###autoload  ;;;###autoload
# Line 3908  image in a file with that name." Line 3874  image in a file with that name."
3874         ;; printing         ;; printing
3875         (let ((file (pr-expand-file-name filename)))         (let ((file (pr-expand-file-name filename)))
3876           (if (string= pr-ps-command "")           (if (string= pr-ps-command "")
3877                 ;; default action
3878               (let ((ps-spool-buffer (get-buffer-create ps-spool-buffer-name)))               (let ((ps-spool-buffer (get-buffer-create ps-spool-buffer-name)))
3879                 (save-excursion                 (save-excursion
3880                   (set-buffer ps-spool-buffer)                   (set-buffer ps-spool-buffer)
3881                   (erase-buffer)                   (erase-buffer)
3882                   (insert-file-contents-literally file))                   (insert-file-contents-literally file))
3883                 (pr-despool-print))                 (pr-despool-print))
3884               ;; use `pr-ps-command' to print
3885             (apply 'pr-call-process             (apply 'pr-call-process
3886                    pr-ps-command                    pr-ps-command
3887                    (pr-switches-string pr-ps-switches "pr-gs-switches")                    (pr-switches-string pr-ps-switches "pr-ps-switches")
3888                    (if (string-match "cp" pr-ps-command)                    (if (string-match "cp" pr-ps-command)
3889                        ;; for "cp" (cmd in out)                        ;; for "cp" (cmd in out)
3890                        (list file                        (list file
# Line 3972  file name." Line 3940  file name."
3940  (defun pr-toggle-file-duplex ()  (defun pr-toggle-file-duplex ()
3941    "Toggle duplex for PostScript file."    "Toggle duplex for PostScript file."
3942    (interactive)    (interactive)
3943    (pr-toggle 'pr-file-duplex "PS file duplex" nil 7 5 nil    (pr-toggle-file-duplex-menu t))
              '("PostScript Print" "File")))  
3944    
3945    
3946  ;;;###autoload  ;;;###autoload
# Line 3985  right. Line 3952  right.
3952  If tumble is on, produces a printing suitable for binding at the top or  If tumble is on, produces a printing suitable for binding at the top or
3953  bottom."  bottom."
3954    (interactive)    (interactive)
3955    (pr-toggle 'pr-file-tumble "PS file tumble" nil 8 5 nil    (pr-toggle-file-tumble-menu t))
              '("PostScript Print" "File")))  
3956    
3957    
3958  ;;;###autoload  ;;;###autoload
3959  (defun pr-toggle-file-landscape ()  (defun pr-toggle-file-landscape ()
3960    "Toggle landscape for PostScript file."    "Toggle landscape for PostScript file."
3961    (interactive)    (interactive)
3962    (pr-toggle 'pr-file-landscape "PS file landscape" nil 6 5 nil    (pr-toggle-file-landscape-menu t))
              '("PostScript Print" "File")))  
3963    
3964    
3965  ;;;###autoload  ;;;###autoload
3966  (defun pr-toggle-ghostscript ()  (defun pr-toggle-ghostscript ()
3967    "Toggle printing using ghostscript."    "Toggle printing using ghostscript."
3968    (interactive)    (interactive)
3969    (pr-toggle 'pr-print-using-ghostscript "Printing using ghostscript"    (pr-toggle-ghostscript-menu t))
              'postscript-process 2 12 'toggle))  
3970    
3971    
3972  ;;;###autoload  ;;;###autoload
3973  (defun pr-toggle-faces ()  (defun pr-toggle-faces ()
3974    "Toggle printing with faces."    "Toggle printing with faces."
3975    (interactive)    (interactive)
3976    (pr-toggle 'pr-faces-p "Printing with faces"    (pr-toggle-faces-menu t))
              'postscript-process 1 12 'toggle))  
3977    
3978    
3979  ;;;###autoload  ;;;###autoload
3980  (defun pr-toggle-spool ()  (defun pr-toggle-spool ()
3981    "Toggle spooling."    "Toggle spooling."
3982    (interactive)    (interactive)
3983    (pr-toggle 'pr-spool-p "Spooling printing"    (pr-toggle-spool-menu t))
              'postscript-process 0 12 'toggle))  
3984    
3985    
3986  ;;;###autoload  ;;;###autoload
3987  (defun pr-toggle-duplex ()  (defun pr-toggle-duplex ()
3988    "Toggle duplex."    "Toggle duplex."
3989    (interactive)    (interactive)
3990    (pr-toggle 'ps-spool-duplex "Printing duplex"    (pr-toggle-duplex-menu t))
              'postcsript-options 5 12 'toggle))  
3991    
3992    
3993  ;;;###autoload  ;;;###autoload
# Line 4038  right. Line 3999  right.
3999  If tumble is on, produces a printing suitable for binding at the top or  If tumble is on, produces a printing suitable for binding at the top or
4000  bottom."  bottom."
4001    (interactive)    (interactive)
4002    (pr-toggle 'ps-spool-tumble "Tumble"    (pr-toggle-tumble-menu t))
              'postscript-options 6 12 'toggle))  
4003    
4004    
4005  ;;;###autoload  ;;;###autoload
4006  (defun pr-toggle-landscape ()  (defun pr-toggle-landscape ()
4007    "Toggle landscape."    "Toggle landscape."
4008    (interactive)    (interactive)
4009    (pr-toggle 'ps-landscape-mode "Landscape"    (pr-toggle-landscape-menu t))
              'postscript-options 0 12 'toggle))  
4010    
4011    
4012  ;;;###autoload  ;;;###autoload
4013  (defun pr-toggle-upside-down ()  (defun pr-toggle-upside-down ()
4014    "Toggle upside-down."    "Toggle upside-down."
4015    (interactive)    (interactive)
4016    (pr-toggle 'ps-print-upside-down "Upside-Down"    (pr-toggle-upside-down-menu t))
              'postscript-options 7 12 'toggle))  
4017    
4018    
4019  ;;;###autoload  ;;;###autoload
4020  (defun pr-toggle-line ()  (defun pr-toggle-line ()
4021    "Toggle line number."    "Toggle line number."
4022    (interactive)    (interactive)
4023    (pr-toggle 'ps-line-number "Line number"    (pr-toggle-line-menu t))
              'postscript-options 3 12 'toggle))  
4024    
4025    
4026  ;;;###autoload  ;;;###autoload
4027  (defun pr-toggle-zebra ()  (defun pr-toggle-zebra ()
4028    "Toggle zebra stripes."    "Toggle zebra stripes."
4029    (interactive)    (interactive)
4030    (pr-toggle 'ps-zebra-stripes "Zebra stripe"    (pr-toggle-zebra-menu t))
              'postscript-options 4 12 'toggle))  
4031    
4032    
4033  ;;;###autoload  ;;;###autoload
4034  (defun pr-toggle-header ()  (defun pr-toggle-header ()
4035    "Toggle printing header."    "Toggle printing header."
4036    (interactive)    (interactive)
4037    (pr-toggle 'ps-print-header "Print header"    (pr-toggle-header-menu t))
              'postscript-options 1 12 'toggle))  
4038    
4039    
4040  ;;;###autoload  ;;;###autoload
4041  (defun pr-toggle-header-frame ()  (defun pr-toggle-header-frame ()
4042    "Toggle printing header frame."    "Toggle printing header frame."
4043    (interactive)    (interactive)
4044    (pr-toggle 'ps-print-header-frame "Print header frame"    (pr-toggle-header-frame-menu t))
              'postscript-options 2 12 'toggle))  
4045    
4046    
4047  ;;;###autoload  ;;;###autoload
4048  (defun pr-toggle-lock ()  (defun pr-toggle-lock ()
4049    "Toggle menu lock."    "Toggle menu lock."
4050    (interactive)    (interactive)
4051    (pr-toggle 'pr-menu-lock "Menu lock"    (pr-toggle-lock-menu t))
              'printing 2 12 'toggle))  
4052    
4053    
4054  ;;;###autoload  ;;;###autoload
4055  (defun pr-toggle-region ()  (defun pr-toggle-region ()
4056    "Toggle auto region."    "Toggle auto region."
4057    (interactive)    (interactive)
4058    (pr-toggle 'pr-auto-region "Auto region"    (pr-toggle-region-menu t))
              'printing 0 12 'toggle))  
4059    
4060    
4061  ;;;###autoload  ;;;###autoload
4062  (defun pr-toggle-mode ()  (defun pr-toggle-mode ()
4063    "Toggle auto mode."    "Toggle auto mode."
4064    (interactive)    (interactive)
4065    (pr-toggle 'pr-auto-mode "Auto mode"    (pr-toggle-mode-menu t))
              'printing 1 12 'toggle))  
4066    
4067    
4068  ;;;###autoload  ;;;###autoload
# Line 4140  bottom." Line 4091  bottom."
4091    "Interactively select a PostScript printer."    "Interactively select a PostScript printer."
4092    (interactive)    (interactive)
4093    (pr-menu-set-ps-title    (pr-menu-set-ps-title
4094     (pr-complete-alist "PostScript printer" pr-ps-printer-alist pr-ps-name)))     (pr-complete-alist "PostScript printer"
4095                          pr-ps-printer-alist pr-ps-name)))
4096    
4097    
4098  ;;;###autoload  ;;;###autoload
# Line 4148  bottom." Line 4100  bottom."
4100    "Interactively select a text printer."    "Interactively select a text printer."
4101    (interactive)    (interactive)
4102    (pr-menu-set-txt-title    (pr-menu-set-txt-title
4103     (pr-complete-alist "Text printer" pr-txt-printer-alist pr-txt-name)))     (pr-complete-alist "Text printer"
4104                          pr-txt-printer-alist pr-txt-name)))
4105    
4106    
4107  ;;;###autoload  ;;;###autoload
# Line 4156  bottom." Line 4109  bottom."
4109    "Interactively select a PostScript utility."    "Interactively select a PostScript utility."
4110    (interactive)    (interactive)
4111    (pr-menu-set-utility-title    (pr-menu-set-utility-title
4112     (pr-complete-alist "Postscript utility" pr-ps-utility-alist pr-ps-utility)))     (pr-complete-alist "Postscript utility"
4113                          pr-ps-utility-alist pr-ps-utility)))
4114    
4115    
4116  ;;;###autoload  ;;;###autoload
# Line 4350  Or choose the menu option Printing/Show Line 4304  Or choose the menu option Printing/Show
4304        nil        nil
4305        '(20 . pr-temp-dir)        '(20 . pr-temp-dir)
4306        '(20 . pr-ps-temp-file)        '(20 . pr-ps-temp-file)
4307          '(20 . pr-file-modes)
4308        '(20 . pr-delete-temp-file)        '(20 . pr-delete-temp-file)
4309        '(20 . pr-list-directory)        '(20 . pr-list-directory)
4310        nil        nil
# Line 4652  See `pr-visible-entry-alist'.") Line 4607  See `pr-visible-entry-alist'.")
4607  (defvar pr-menu-state nil)  (defvar pr-menu-state nil)
4608    
4609    
4610  (eval-and-compile  (cond
4611    (cond   ((featurep 'xemacs)
4612     ((eq ps-print-emacs-type 'xemacs)    ;; XEmacs
4613      ;; XEmacs    (defvar current-mouse-event nil)      ; to avoid compilation gripes
4614      (defvar current-mouse-event nil)    ; to avoid compilation gripes    (defun pr-menu-position (entry index horizontal)
4615      (defun pr-menu-position (entry index horizontal)      (pr-x-make-event
4616        (pr-x-make-event       'button-release
4617         'button-release       (list 'button 1
4618         (list 'button 1             'x (- (pr-x-event-x-pixel current-mouse-event) ; X
4619               'x (- (pr-x-event-x-pixel current-mouse-event) ; X                   (* horizontal pr-menu-char-width))
4620                     (* horizontal pr-menu-char-width))             'y (- (pr-x-event-y-pixel current-mouse-event) ; Y
4621               'y (- (pr-x-event-y-pixel current-mouse-event) ; Y                   (* (pr-menu-index entry index) pr-menu-char-height)))))
4622                     (* (pr-menu-index entry index) pr-menu-char-height)))))    )
4623      )   (ps-windows-system
4624     (ps-windows-system    ;; GNU Emacs for Windows 9x/NT
4625      ;; GNU Emacs for Windows 9x/NT    (defun pr-menu-position (entry index horizontal)
4626      (defun pr-menu-position (entry index horizontal)      (let ((pos (cdr (pr-e-mouse-pixel-position))))
4627        (let ((pos (cdr (pr-e-mouse-pixel-position))))        (list
4628          (list         (list (or (car pos) 0)           ; X
4629           (list (or (car pos) 0)         ; X               (- (or (cdr pos) 0)        ; Y
4630                 (- (or (cdr pos) 0)      ; Y                  (* (pr-menu-index entry index) pr-menu-char-height)))
4631                    (* (pr-menu-index entry index) pr-menu-char-height)))         (selected-frame))))              ; frame
4632           (selected-frame))))            ; frame    )
4633      )   (t
4634     (t    ;; GNU Emacs
4635      ;; GNU Emacs    (defun pr-menu-position (entry index horizontal)
4636      (defun pr-menu-position (entry index horizontal)      (let ((pos (cdr (pr-e-mouse-pixel-position))))
4637        (let ((pos (cdr (pr-e-mouse-pixel-position))))        (list
4638          (list         (list (- (or (car pos) 0)        ; X
4639           (list (- (or (car pos) 0)      ; X                  (* horizontal pr-menu-char-width))
4640                    (* horizontal pr-menu-char-width))               (- (or (cdr pos) 0)        ; Y
4641                 (- (or (cdr pos) 0)      ; Y                  (* (pr-menu-index entry index) pr-menu-char-height)))
4642                    (* (pr-menu-index entry index) pr-menu-char-height)))         (selected-frame))))              ; frame
4643           (selected-frame))))            ; frame    ))
     ))  
4644    
4645    (cond  (cond
4646     ((eq ps-print-emacs-type 'emacs)   ((featurep 'xemacs)
4647      ;; GNU Emacs    ;; XEmacs
4648      (defun pr-menu-lookup (path)    (defvar current-menubar nil)          ; to avoid compilation gripes
4649        (let ((ipath pr-menu-bar))    (defun pr-menu-lookup (path)
4650          (lookup-key global-map      (car (pr-x-find-menu-item current-menubar (cons "Printing" path))))
4651                      (if path  
4652                          (vconcat ipath    ;; XEmacs
4653                                   (mapcar 'pr-get-symbol    (defun pr-menu-lock (entry index horizontal state path)
4654                                           (if (listp path)      (when pr-menu-lock
4655                                               path        (or (and pr-menu-position (eq state pr-menu-state))
4656                                             (list path))))            (setq pr-menu-position (pr-menu-position entry index horizontal)
4657                        ipath))))                  pr-menu-state    state))
4658          (let* ((menu   (pr-menu-lookup path))
4659      ;; GNU Emacs               (result (pr-x-get-popup-menu-response menu pr-menu-position)))
4660      (defun pr-menu-lock (entry index horizontal state path)          (and (pr-x-misc-user-event-p result)
4661        (when (and (not (interactive-p)) pr-menu-lock)               (funcall (pr-x-event-function result)
4662          (or (and pr-menu-position (eq state pr-menu-state))                        (pr-x-event-object result))))
4663              (setq pr-menu-position (pr-menu-position entry index horizontal)        (setq pr-menu-position nil))))
4664                    pr-menu-state    state))  
4665          (let* ((menu   (pr-menu-lookup path))  
4666                 (result (x-popup-menu pr-menu-position menu)))   (t
4667            (and result    ;; GNU Emacs
4668                 (let ((command (lookup-key menu (vconcat result))))    (defun pr-menu-lookup (path)
4669                   (if (fboundp command)      (lookup-key global-map
4670                       (funcall command)                  (if path
4671                     (eval command)))))                      (vconcat pr-menu-bar
4672          (setq pr-menu-position nil))))                               (mapcar 'pr-get-symbol
4673                                         (if (listp path)
4674                                             path
4675     ((eq ps-print-emacs-type 'xemacs)                                         (list path))))
4676      ;; XEmacs                    pr-menu-bar)))
4677      (defvar current-menubar nil)        ; to avoid compilation gripes  
4678      (defun pr-menu-lookup (path)    ;; GNU Emacs
4679        (car (pr-x-find-menu-item current-menubar (cons "Printing" path))))    (defun pr-menu-lock (entry index horizontal state path)
4680        (when pr-menu-lock
4681      ;; XEmacs        (or (and pr-menu-position (eq state pr-menu-state))
4682      (defun pr-menu-lock (entry index horizontal state path)            (setq pr-menu-position (pr-menu-position entry index horizontal)
4683        (when (and (not (interactive-p)) pr-menu-lock)                  pr-menu-state    state))
4684          (or (and pr-menu-position (eq state pr-menu-state))        (let* ((menu   (pr-menu-lookup path))
4685              (setq pr-menu-position (pr-menu-position entry index horizontal)               (result (x-popup-menu pr-menu-position menu)))
4686                    pr-menu-state    state))          (and result
4687          (let* ((menu   (pr-menu-lookup path))               (let ((command (lookup-key menu (vconcat result))))
4688                 (result (pr-x-get-popup-menu-response menu pr-menu-position)))                 (if (fboundp command)
4689            (and (pr-x-misc-user-event-p result)                     (funcall command)
4690                 (funcall (pr-x-event-function result)                   (eval command)))))
4691                          (pr-x-event-object result))))        (setq pr-menu-position nil)))))
         (setq pr-menu-position nil))))))  
4692    
4693    
4694  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# Line 4792  non-nil." Line 4745  non-nil."
4745           alist)))           alist)))
4746    
4747    
4748  (eval-and-compile  (cond
4749    (cond   ((featurep 'xemacs)
4750     ((eq ps-print-emacs-type 'emacs)    ;; XEmacs
4751      ;; GNU Emacs    (defalias 'pr-update-mode-line 'set-menubar-dirty-flag)
4752      (defalias 'pr-update-mode-line 'force-mode-line-update)  
4753      ;; XEmacs
4754      ;; GNU Emacs    (defvar pr-ps-name-old     "PostScript Printers")
4755      (defun pr-do-update-menus (&optional force)    (defvar pr-txt-name-old    "Text Printers")
4756        (pr-menu-alist pr-ps-printer-alist    (defvar pr-ps-utility-old  "PostScript Utility")
4757                       'pr-ps-name    (defvar pr-even-or-odd-old "Print All Pages")
4758                       'pr-menu-set-ps-title  
4759                       "PostScript Printers"    ;; XEmacs
4760                       'pr-ps-printer-menu-modified    (defun pr-do-update-menus (&optional force)
4761                       force      (pr-menu-alist pr-ps-printer-alist
4762                       "PostScript Printers"                     'pr-ps-name
4763                       'postscript 2)                     'pr-menu-set-ps-title
4764        (pr-menu-alist pr-txt-printer-alist                     '("Printing")
4765                       'pr-txt-name                     'pr-ps-printer-menu-modified
4766                       'pr-menu-set-txt-title                     force
4767                       "Text Printers"                     pr-ps-name-old
4768                       'pr-txt-printer-menu-modified                     'postscript 2)
4769                       force      (pr-menu-alist pr-txt-printer-alist
4770                       "Text Printers"                     'pr-txt-name
4771                       'text 2)                     'pr-menu-set-txt-title
4772        (let ((save-var pr-ps-utility-menu-modified))                     '("Printing")
4773          (pr-menu-alist pr-ps-utility-alist                     'pr-txt-printer-menu-modified
4774                         'pr-ps-utility                     force
4775                         'pr-menu-set-utility-title                     pr-txt-name-old
4776                         '("PostScript Print"   "File" "PostScript Utility")                     'text 2)
4777                         'save-var      (let ((save-var pr-ps-utility-menu-modified))
                        force  
                        "PostScript Utility"  
                        nil 1))  
4778        (pr-menu-alist pr-ps-utility-alist        (pr-menu-alist pr-ps-utility-alist
4779                       'pr-ps-utility                       'pr-ps-utility
4780                       'pr-menu-set-utility-title                       'pr-menu-set-utility-title
4781                       '("PostScript Preview" "File" "PostScript Utility")                       '("Printing" "PostScript Print"   "File")
4782                       'pr-ps-utility-menu-modified                       'save-var
4783                       force                       force
4784                       "PostScript Utility"                       pr-ps-utility-old
4785                       nil 1)                       nil 1))
4786        (pr-even-or-odd-pages ps-even-or-odd-pages force))      (pr-menu-alist pr-ps-utility-alist
4787                       'pr-ps-utility
4788                       'pr-menu-set-utility-title
4789                       '("Printing" "PostScript Preview" "File")
4790                       'pr-ps-utility-menu-modified
4791                       force
4792                       pr-ps-utility-old
4793                       nil 1)
4794        (pr-even-or-odd-pages ps-even-or-odd-pages force))
4795    
4796      ;; GNU Emacs    ;; XEmacs
4797      (defvar pr-temp-menu nil)    (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
4798                                  entry index)
4799        (when (and alist (or force (symbol-value modified-sym)))
4800          (pr-xemacs-global-menubar
4801           (pr-x-add-submenu menu-path
4802                             (pr-menu-create name alist var-sym
4803                                             fun entry index)))
4804          (funcall fun (symbol-value var-sym))
4805          (set modified-sym nil)))
4806    
4807      ;; GNU Emacs    ;; XEmacs
4808      (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name    (defun pr-relabel-menu-item (newname var-sym)
4809                                  entry index)      (pr-xemacs-global-menubar
4810        (when (and alist (or force (symbol-value modified-sym)))       (pr-x-relabel-menu-item
4811          (easy-menu-define pr-temp-menu nil ""        (list "Printing" (symbol-value var-sym))
4812            (pr-menu-create name alist var-sym fun entry index))        newname)
4813          (let ((item (pr-menu-get-item menu-path)))       (set var-sym newname)))
4814            (and item  
4815                 (let* ((binding     (nthcdr 3 item))    ;; XEmacs
4816                        (key-binding (cdr binding)))    (defun pr-menu-set-ps-title (value &optional item entry index)
4817                   (setcar binding pr-temp-menu)      (pr-relabel-menu-item (format "PostScript Printer: %s" value)
4818                   (and key-binding (listp (car key-binding))                            'pr-ps-name-old)
4819                        (setcdr binding (cdr key-binding))) ; skip KEY-BINDING      (pr-ps-set-printer value)
4820                   (funcall fun (symbol-value var-sym) item))))      (and index
4821          (set modified-sym nil)))           (pr-menu-lock entry index 12 'toggle nil)))
4822    
4823      ;; GNU Emacs    ;; XEmacs
4824      (defun pr-menu-set-ps-title (value &optional item entry index)    (defun pr-menu-set-txt-title (value &optional item entry index)
4825        (pr-menu-set-item-name (or item      (pr-relabel-menu-item (format "Text Printer: %s" value)
4826                                   (pr-menu-get-item "PostScript Printers"))                            'pr-txt-name-old)
4827                               (format "PostScript Printer: %s" value))      (pr-txt-set-printer value)
4828        (pr-ps-set-printer value)      (and index
4829        (and index           (pr-menu-lock entry index 12 'toggle nil)))
4830             (pr-menu-lock entry index 12 'toggle nil)))  
4831      ;; XEmacs
4832      ;; GNU Emacs    (defun pr-menu-set-utility-title (value &optional item entry index)
4833      (defun pr-menu-set-txt-title (value &optional item entry index)      (pr-xemacs-global-menubar
4834        (pr-menu-set-item-name (or item       (let ((newname (format "%s" value)))
4835                                   (pr-menu-get-item "Text Printers"))         (pr-x-relabel-menu-item
4836                               (format "Text Printer: %s" value))          (list "Printing" "PostScript Print" "File" pr-ps-utility-old)
4837        (pr-txt-set-printer value)          newname)
4838        (and index         (pr-x-relabel-menu-item
4839             (pr-menu-lock entry index 12 'toggle nil)))          (list "Printing" "PostScript Preview" "File" pr-ps-utility-old)
4840            newname)
4841      ;; GNU Emacs         (setq pr-ps-utility-old newname)))
4842      (defun pr-menu-set-utility-title (value &optional item entry index)      (pr-ps-set-utility value)
4843        (let ((name (symbol-name value)))      (and index
4844          (if item           (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
4845              (pr-menu-set-item-name item name)  
4846            (pr-menu-set-item-name    ;; XEmacs
4847             (pr-menu-get-item    (defun pr-even-or-odd-pages (value &optional no-lock)
4848              '("PostScript Print"   "File" "PostScript Utility"))      (pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))
4849             name)                            'pr-even-or-odd-old)
4850            (pr-menu-set-item-name      (setq ps-even-or-odd-pages value)
4851             (pr-menu-get-item      (or no-lock
4852              '("PostScript Preview" "File" "PostScript Utility"))          (pr-menu-lock 'postscript-options 8 12 'toggle nil))))
4853             name)))  
4854        (pr-ps-set-utility value)  
4855        (and index   (t
4856             (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))    ;; GNU Emacs
4857      (defalias 'pr-update-mode-line 'force-mode-line-update)
4858      ;; GNU Emacs  
4859      (defun pr-even-or-odd-pages (value &optional no-lock)    ;; GNU Emacs
4860        (pr-menu-set-item-name (pr-menu-get-item "Print All Pages")    (defun pr-do-update-menus (&optional force)
4861                               (cdr (assq value pr-even-or-odd-alist)))      (pr-menu-alist pr-ps-printer-alist
4862        (setq ps-even-or-odd-pages value)                     'pr-ps-name
4863        (or no-lock                     'pr-menu-set-ps-title
4864            (pr-menu-lock 'postscript-options 8 12 'toggle nil))))                     "PostScript Printers"
4865                       'pr-ps-printer-menu-modified
4866                       force
4867     ((eq ps-print-emacs-type 'xemacs)                     "PostScript Printers"
4868      ;; XEmacs                     'postscript 2)
4869      (defalias 'pr-update-mode-line 'set-menubar-dirty-flag)      (pr-menu-alist pr-txt-printer-alist
4870                       'pr-txt-name
4871      ;; XEmacs                     'pr-menu-set-txt-title
4872      (defvar pr-ps-name-old     "PostScript Printers")                     "Text Printers"
4873      (defvar pr-txt-name-old    "Text Printers")                     'pr-txt-printer-menu-modified
4874      (defvar pr-ps-utility-old  "PostScript Utility")                     force
4875      (defvar pr-even-or-odd-old "Print All Pages")                     "Text Printers"
4876                       'text 2)
4877      ;; XEmacs      (let ((save-var pr-ps-utility-menu-modified))
     (defun pr-do-update-menus (&optional force)  
       (pr-menu-alist pr-ps-printer-alist  
                      'pr-ps-name  
                      'pr-menu-set-ps-title  
                      '("Printing")  
                      'pr-ps-printer-menu-modified  
                      force  
                      pr-ps-name-old  
                      'postscript 2)  
       (pr-menu-alist pr-txt-printer-alist  
                      'pr-txt-name  
                      'pr-menu-set-txt-title  
                      '("Printing")  
                      'pr-txt-printer-menu-modified  
                      force  
                      pr-txt-name-old  
                      'text 2)  
       (let ((save-var pr-ps-utility-menu-modified))  
         (pr-menu-alist pr-ps-utility-alist  
                        'pr-ps-utility  
                        'pr-menu-set-utility-title  
                        '("Printing" "PostScript Print"   "File")  
                        'save-var  
                        force  
                        pr-ps-utility-old  
                        nil 1))  
4878        (pr-menu-alist pr-ps-utility-alist        (pr-menu-alist pr-ps-utility-alist
4879                       'pr-ps-utility                       'pr-ps-utility
4880                       'pr-menu-set-utility-title                       'pr-menu-set-utility-title
4881                       '("Printing" "PostScript Preview" "File")                       '("PostScript Print"   "File" "PostScript Utility")
4882                       'pr-ps-utility-menu-modified                       'save-var
4883                       force                       force
4884                       pr-ps-utility-old                       "PostScript Utility"
4885                       nil 1)                       nil 1))
4886        (pr-even-or-odd-pages ps-even-or-odd-pages force))      (pr-menu-alist pr-ps-utility-alist
4887                       'pr-ps-utility
4888                       'pr-menu-set-utility-title
4889                       '("PostScript Preview" "File" "PostScript Utility")
4890                       'pr-ps-utility-menu-modified
4891                       force
4892                       "PostScript Utility"
4893                       nil 1)
4894        (pr-even-or-odd-pages ps-even-or-odd-pages force))
4895    
4896      ;; XEmacs    ;; GNU Emacs
4897      (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name    (defun pr-menu-get-item (name-list)
4898                                  entry index)      ;; NAME-LIST is a string or a list of strings.
4899        (when (and alist (or force (symbol-value modified-sym)))      (or (listp name-list)
4900          (pr-xemacs-global-menubar          (setq name-list (list name-list)))
4901           (pr-x-add-submenu menu-path      (and name-list
4902                             (pr-menu-create name alist var-sym           (let* ((reversed (reverse name-list))
4903                                             fun entry index)))                  (name (pr-get-symbol (car reversed)))
4904          (funcall fun (symbol-value var-sym))                  (path (nreverse (cdr reversed)))
4905          (set modified-sym nil)))                  (menu (lookup-key
4906                           global-map
4907      ;; XEmacs                         (vconcat pr-menu-bar
4908      (defun pr-menu-set-ps-title (value &optional item entry index)                                  (mapcar 'pr-get-symbol path)))))
4909        (pr-relabel-menu-item (format "PostScript Printer: %s" value)             (assq name (nthcdr 2 menu)))))
                             'pr-ps-name-old)  
       (pr-ps-set-printer value)  
       (and index  
            (pr-menu-lock entry index 12 'toggle nil)))  
   
     ;; XEmacs  
     (defun pr-menu-set-txt-title (value &optional item entry index)  
       (pr-relabel-menu-item (format "Text Printer: %s" value)  
                             'pr-txt-name-old)  
       (pr-txt-set-printer value)  
       (and index  
            (pr-menu-lock entry index 12 'toggle nil)))  
4910    
4911      ;; XEmacs    ;; GNU Emacs
4912      (defun pr-menu-set-utility-title (value &optional item entry index)    (defvar pr-temp-menu nil)
       (pr-xemacs-global-menubar  
        (let ((newname (format "%s" value)))  
          (pr-x-relabel-menu-item  
           (list "Printing" "PostScript Print" "File" pr-ps-utility-old)  
           newname)  
          (pr-x-relabel-menu-item  
           (list "Printing" "PostScript Preview" "File" pr-ps-utility-old)  
           newname)  
          (setq pr-ps-utility-old newname)))  
       (pr-ps-set-utility value)  
       (and index  
            (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))  
   
     ;; XEmacs  
     (defun pr-even-or-odd-pages (value &optional no-lock)  
       (pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))  
                             'pr-even-or-odd-old)  
       (setq ps-even-or-odd-pages value)  
       (or no-lock  
           (pr-menu-lock 'postscript-options 8 12 'toggle nil))))))  
4913    
4914  ;; XEmacs    ;; GNU Emacs
4915  (defun pr-relabel-menu-item (newname var-sym)    (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
4916    (pr-xemacs-global-menubar                                entry index)
4917     (pr-x-relabel-menu-item      (when (and alist (or force (symbol-value modified-sym)))
4918      (list "Printing" (symbol-value var-sym))        (easy-menu-define pr-temp-menu nil ""
4919      newname)          (pr-menu-create name alist var-sym fun entry index))
4920     (set var-sym newname)))        (let ((item (pr-menu-get-item menu-path)))
4921            (and item
4922                 (let* ((binding     (nthcdr 3 item))
4923                        (key-binding (cdr binding)))
4924                   (setcar binding pr-temp-menu)
4925                   (and key-binding (listp (car key-binding))
4926                        (setcdr binding (cdr key-binding))) ; skip KEY-BINDING
4927                   (funcall fun (symbol-value var-sym) item))))
4928          (set modified-sym nil)))
4929    
4930  ;; GNU Emacs    ;; GNU Emacs
4931  (defun pr-menu-set-item-name (item name)    (defun pr-menu-set-item-name (item name)
4932    (and item      (and item
4933         (setcar (nthcdr 2 item) name)))  ; ITEM-NAME           (setcar (nthcdr 2 item) name))) ; ITEM-NAME
4934    
4935  ;; GNU Emacs    ;; GNU Emacs
4936  (defun pr-menu-get-item (name-list)    (defun pr-menu-set-ps-title (value &optional item entry index)
4937    ;; NAME-LIST is a string or a list of strings.      (pr-menu-set-item-name (or item
4938    (let ((ipath pr-menu-bar)                                 (pr-menu-get-item "PostScript Printers"))
4939          (len   (and (listp name-list) (length name-list))))                             (format "PostScript Printer: %s" value))
4940      (and len (= len 1)      (pr-ps-set-printer value)
4941           (setq name-list (car name-list)))      (and index
4942      (cond           (pr-menu-lock entry index 12 'toggle nil)))
4943       ((null name-list)  
4944        ;; nil    ;; GNU Emacs
4945        nil)    (defun pr-menu-set-txt-title (value &optional item entry index)
4946       ((listp name-list)      (pr-menu-set-item-name (or item
4947        ;; list and (length list) > 1                                 (pr-menu-get-item "Text Printers"))
4948        (let* ((copy (copy-sequence name-list))                             (format "Text Printer: %s" value))
4949               (name (pr-get-symbol (nth (1- len) copy)))      (pr-txt-set-printer value)
4950               (path (progn      (and index
4951                       (setcdr (nthcdr (- len 2) copy) nil)           (pr-menu-lock entry index 12 'toggle nil)))
4952                       copy))  
4953               (menu (lookup-key    ;; GNU Emacs
4954                      global-map    (defun pr-menu-set-utility-title (value &optional item entry index)
4955                      (if path      (let ((name (symbol-name value)))
4956                          (vconcat ipath        (if item
4957                                   (mapcar 'pr-get-symbol path))            (pr-menu-set-item-name item name)
4958                        ipath))))          (pr-menu-set-item-name
4959          (assq name (nthcdr 2 menu))))           (pr-menu-get-item
4960       (t            '("PostScript Print"   "File" "PostScript Utility"))
4961        ;; string           name)
4962        (let ((name (pr-get-symbol name-list))          (pr-menu-set-item-name
4963              (menu (lookup-key global-map ipath)))           (pr-menu-get-item
4964          (assq name (nthcdr 2 menu)))))))            '("PostScript Preview" "File" "PostScript Utility"))
4965             name)))
4966        (pr-ps-set-utility value)
4967        (and index
4968             (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
4969    
4970      ;; GNU Emacs
4971      (defun pr-even-or-odd-pages (value &optional no-lock)
4972        (pr-menu-set-item-name (pr-menu-get-item "Print All Pages")
4973                               (cdr (assq value pr-even-or-odd-alist)))
4974        (setq ps-even-or-odd-pages value)
4975        (or no-lock
4976            (pr-menu-lock 'postscript-options 8 12 'toggle nil)))))
4977    
4978    
4979  (defun pr-ps-set-utility (value)  (defun pr-ps-set-utility (value)
# Line 5169  non-nil." Line 5105  non-nil."
5105  ;; Internal Functions (II)  ;; Internal Functions (II)
5106    
5107    
5108    (defun pr-toggle (var-sym mess entry index horizontal state
5109                              &optional path no-menu)
5110      (set var-sym (not (symbol-value var-sym)))
5111      (message "%s is %s" mess (if (symbol-value var-sym) "on" "off"))
5112      (or no-menu
5113          (pr-menu-lock entry index horizontal state path)))
5114    
5115    
5116    (defun pr-toggle-file-duplex-menu (&optional no-menu)
5117      (interactive)
5118      (pr-toggle 'pr-file-duplex "PS file duplex" nil 7 5 nil
5119                 '("PostScript Print" "File") no-menu))
5120    
5121    
5122    (defun pr-toggle-file-tumble-menu (&optional no-menu)
5123      (interactive)
5124      (pr-toggle 'pr-file-tumble "PS file tumble" nil 8 5 nil
5125                 '("PostScript Print" "File") no-menu))
5126    
5127    
5128    (defun pr-toggle-file-landscape-menu (&optional no-menu)
5129      (interactive)
5130      (pr-toggle 'pr-file-landscape "PS file landscape" nil 6 5 nil
5131                 '("PostScript Print" "File") no-menu))
5132    
5133    
5134    (defun pr-toggle-ghostscript-menu (&optional no-menu)
5135      (interactive)
5136      (pr-toggle 'pr-print-using-ghostscript "Printing using ghostscript"
5137                 'postscript-process 2 12 'toggle nil no-menu))
5138    
5139    
5140    (defun pr-toggle-faces-menu (&optional no-menu)
5141      (interactive)
5142      (pr-toggle 'pr-faces-p "Printing with faces"
5143                 'postscript-process 1 12 'toggle nil no-menu))
5144    
5145    
5146    (defun pr-toggle-spool-menu (&optional no-menu)
5147      (interactive)
5148      (pr-toggle 'pr-spool-p "Spooling printing"
5149                 'postscript-process 0 12 'toggle nil no-menu))
5150    
5151    
5152    (defun pr-toggle-duplex-menu (&optional no-menu)
5153      (interactive)
5154      (pr-toggle 'ps-spool-duplex "Printing duplex"
5155                 'postscript-options 5 12 'toggle nil no-menu))
5156    
5157    
5158    (defun pr-toggle-tumble-menu (&optional no-menu)
5159      (interactive)
5160      (pr-toggle 'ps-spool-tumble "Tumble"
5161                 'postscript-options 6 12 'toggle nil no-menu))
5162    
5163    
5164    (defun pr-toggle-landscape-menu (&optional no-menu)
5165      (interactive)
5166      (pr-toggle 'ps-landscape-mode "Landscape"
5167                 'postscript-options 0 12 'toggle nil no-menu))
5168    
5169    
5170    (defun pr-toggle-upside-down-menu (&optional no-menu)
5171      (interactive)
5172      (pr-toggle 'ps-print-upside-down "Upside-Down"
5173                 'postscript-options 7 12 'toggle nil no-menu))
5174    
5175    
5176    (defun pr-toggle-line-menu (&optional no-menu)
5177      (interactive)
5178      (pr-toggle 'ps-line-number "Line number"
5179                 'postscript-options 3 12 'toggle nil no-menu))
5180    
5181    
5182    (defun pr-toggle-zebra-menu (&optional no-menu)
5183      (interactive)
5184      (pr-toggle 'ps-zebra-stripes "Zebra stripe"
5185                 'postscript-options 4 12 'toggle nil no-menu))
5186    
5187    
5188    (defun pr-toggle-header-menu (&optional no-menu)
5189      (interactive)
5190      (pr-toggle 'ps-print-header "Print header"
5191                 'postscript-options 1 12 'toggle nil no-menu))
5192    
5193    
5194    (defun pr-toggle-header-frame-menu (&optional no-menu)
5195      (interactive)
5196      (pr-toggle 'ps-print-header-frame "Print header frame"
5197                 'postscript-options 2 12 'toggle nil no-menu))
5198    
5199    
5200    (defun pr-toggle-lock-menu (&optional no-menu)
5201      (interactive)
5202      (pr-toggle 'pr-menu-lock "Menu lock"
5203                 'printing 2 12 'toggle nil no-menu))
5204    
5205    
5206    (defun pr-toggle-region-menu (&optional no-menu)
5207      (interactive)
5208      (pr-toggle 'pr-auto-region "Auto region"
5209                 'printing 0 12 'toggle nil no-menu))
5210    
5211    
5212    (defun pr-toggle-mode-menu (&optional no-menu)
5213      (interactive)
5214      (pr-toggle 'pr-auto-mode "Auto mode"
5215                 'printing 1 12 'toggle nil no-menu))
5216    
5217    
5218  (defun pr-prompt (str)  (defun pr-prompt (str)
5219    (if (pr-auto-mode-p)    (if (pr-auto-mode-p)
5220        (concat str " mode")        (concat str " mode")
# Line 5269  non-nil." Line 5315  non-nil."
5315      (pr-expand-file-name res)))      (pr-expand-file-name res)))
5316    
5317    
 (defun pr-toggle (var-sym mess entry index horizontal state &optional path)  
   (set var-sym (not (symbol-value var-sym)))  
   (message "%s is %s" mess (if (symbol-value var-sym) "on" "off"))  
   (pr-menu-lock entry index horizontal state path))  
   
   
5318  (defun pr-ps-utility-args (n-up-sym infile-sym outfile-sym prompt)  (defun pr-ps-utility-args (n-up-sym infile-sym outfile-sym prompt)
5319      ;; check arguments for PostScript file processing.
5320    ;; n-up    ;; n-up
5321    (or (symbol-value n-up-sym)    (or (symbol-value n-up-sym)
5322        (set n-up-sym (pr-interactive-n-up prompt)))        (set n-up-sym (pr-interactive-n-up prompt)))
   (and (eq (symbol-value infile-sym) t)  
        (set infile-sym (and (not (interactive-p))  
                             (pr-ps-infile-preprint prompt))))  
5323    ;; input file    ;; input file
5324      (and (eq (symbol-value infile-sym) t)
5325           (set infile-sym (pr-ps-infile-preprint prompt)))
5326    (or (symbol-value infile-sym)    (or (symbol-value infile-sym)
5327        (error "%s: input PostScript file name is missing" prompt))        (error "%s: input PostScript file name is missing" prompt))
5328    (set infile-sym (pr-dosify-file-name (symbol-value infile-sym)))    (set infile-sym (pr-dosify-file-name (symbol-value infile-sym)))
5329    ;; output file    ;; output file
5330    (and (eq (symbol-value outfile-sym) t)    (and (eq (symbol-value outfile-sym) t)
5331         (set outfile-sym (and (not (interactive-p))         (set outfile-sym (and current-prefix-arg
                              current-prefix-arg  
5332                               (pr-ps-outfile-preprint prompt))))                               (pr-ps-outfile-preprint prompt))))
5333    (and (symbol-value outfile-sym)    (and (symbol-value outfile-sym)
5334         (set outfile-sym (pr-dosify-file-name (symbol-value outfile-sym))))         (set outfile-sym (pr-dosify-file-name (symbol-value outfile-sym))))
# Line 5297  non-nil." Line 5336  non-nil."
5336    
5337    
5338  (defun pr-ps-utility-process (n-up infile outfile)  (defun pr-ps-utility-process (n-up infile outfile)
5339      ;; activate utility to process a PostScript file.
5340    (let (item)    (let (item)
5341      (and (stringp infile) (file-exists-p infile)      (and (stringp infile) (file-exists-p infile)
5342           (setq item (cdr (assq pr-ps-utility pr-ps-utility-alist)))           (setq item (cdr (assq pr-ps-utility pr-ps-utility-alist)))
# Line 5335  non-nil." Line 5375  non-nil."
5375          (cmd    (pr-command command))          (cmd    (pr-command command))
5376          status)          status)
5377      (setq args (pr-remove-nil-from-list args))      (setq args (pr-remove-nil-from-list args))
5378        ;; *Printing Command Output* == show command & args
5379      (save-excursion      (save-excursion
5380        (set-buffer buffer)        (set-buffer buffer)
5381        (goto-char (point-max))        (goto-char (point-max))
5382        (insert (format "%s %S\n" cmd args)))        (insert (format "%s %S\n" cmd args)))
5383      (setq status      ;; *Printing Command Output* == show any return message from command
5384            (condition-case data      (pr-save-file-modes
5385                (apply 'call-process cmd nil buffer nil args)       (setq status
5386              ((quit error)             (condition-case data
5387               (error-message-string data))))                 (apply 'call-process cmd nil buffer nil args)
5388                 ((quit error)
5389                  (error-message-string data)))))
5390        ;; *Printing Command Output* == show exit status
5391      (save-excursion      (save-excursion
5392        (set-buffer buffer)        (set-buffer buffer)
5393        (goto-char (point-max))        (goto-char (point-max))
5394        (insert (format "Exit status: %s\n" status)))))        (insert (format "Exit status: %s\n\n" status)))
5395        ;; message if error status
5396        (if (or (stringp status)
5397                (and (integerp status) (/= status 0)))
5398            (message
5399             "Printing error status: %s (see *Printing Command Output* buffer)"
5400             status))))
5401    
5402    
5403  (defun pr-txt-print (from to)  (defun pr-txt-print (from to)
# Line 5358  non-nil." Line 5408  non-nil."
5408    
5409    
5410  (defun pr-switches-string (switches mess)  (defun pr-switches-string (switches mess)
5411    (mapconcat 'identity (pr-switches switches mess) " "))    ;; If SWITCHES is nil, return nil.
5412      ;; Otherwise, return the list of string in a string.
5413      (and switches
5414           (mapconcat 'identity (pr-switches switches mess) " ")))
5415    
5416    
5417  (defun pr-switches (switches mess)  (defun pr-switches (switches mess)
# Line 5395  non-nil." Line 5448  non-nil."
5448    
5449  (defun pr-ps-file (&optional filename)  (defun pr-ps-file (&optional filename)
5450    (pr-dosify-file-name (or filename    (pr-dosify-file-name (or filename
5451                             (convert-standard-filename                             (make-temp-file
5452                              (expand-file-name pr-ps-temp-file pr-temp-dir)))))                              (convert-standard-filename
5453                                 (expand-file-name pr-ps-temp-file pr-temp-dir))
5454                                nil ".ps"))))
5455    
5456    
5457  (defun pr-interactive-n-up (mess)  (defun pr-interactive-n-up (mess)
# Line 5485  non-nil." Line 5540  non-nil."
5540  (defun pr-set-outfilename (filename-sym)  (defun pr-set-outfilename (filename-sym)
5541    (and (not pr-spool-p)    (and (not pr-spool-p)
5542         (eq (symbol-value filename-sym) t)         (eq (symbol-value filename-sym) t)
5543         (set filename-sym (and (not (interactive-p))         (set filename-sym (and current-prefix-arg
                               current-prefix-arg  
5544                                (ps-print-preprint current-prefix-arg))))                                (ps-print-preprint current-prefix-arg))))
5545    (and (symbol-value filename-sym)    (and (symbol-value filename-sym)
5546         (set filename-sym (pr-dosify-file-name (symbol-value filename-sym)))))         (set filename-sym (pr-dosify-file-name (symbol-value filename-sym)))))
# Line 5580  non-nil." Line 5634  non-nil."
5634    
5635    
5636  (defun pr-text2ps (kind n-up filename &optional from to)  (defun pr-text2ps (kind n-up filename &optional from to)
5637    (let ((ps-n-up-printing n-up)    (pr-save-file-modes
5638          (ps-spool-config (and (eq ps-spool-config 'setpagedevice)     (let ((ps-n-up-printing n-up)
5639                                'setpagedevice)))           (ps-spool-config (and (eq ps-spool-config 'setpagedevice)
5640      (pr-delete-file-if-exists filename)                                 'setpagedevice)))
5641      (cond (pr-faces-p       (pr-delete-file-if-exists filename)
5642             (cond (pr-spool-p       (cond (pr-faces-p
5643                    ;; pr-faces-p and pr-spool-p              (cond (pr-spool-p
5644                    ;; here FILENAME arg is ignored                     ;; pr-faces-p and pr-spool-p
5645                    (cond ((eq kind 'buffer)                     ;; here FILENAME arg is ignored
5646                           (ps-spool-buffer-with-faces))                     (cond ((eq kind 'buffer)
5647                          ((eq kind 'region)                            (ps-spool-buffer-with-faces))
5648                           (ps-spool-region-with-faces (or from (point))                           ((eq kind 'region)
5649                                                       (or to (mark))))                            (ps-spool-region-with-faces (or from (point))
5650                          ))                                                        (or to (mark))))
5651                             ))
5652                    ;; pr-faces-p and not pr-spool-p                    ;; pr-faces-p and not pr-spool-p
5653                   ((eq kind 'buffer)                    ((eq kind 'buffer)
5654                    (ps-print-buffer-with-faces filename))                     (ps-print-buffer-with-faces filename))
5655                   ((eq kind 'region)                    ((eq kind 'region)
5656                    (ps-print-region-with-faces (or from (point))                     (ps-print-region-with-faces (or from (point))
5657                                                (or to (mark)) filename))                                                 (or to (mark)) filename))
5658                   ))                    ))
5659            (pr-spool-p             (pr-spool-p
5660             ;; not pr-faces-p and pr-spool-p              ;; not pr-faces-p and pr-spool-p
5661             ;; here FILENAME arg is ignored              ;; here FILENAME arg is ignored
5662             (cond ((eq kind 'buffer)              (cond ((eq kind 'buffer)
5663                    (ps-spool-buffer))                     (ps-spool-buffer))
5664                   ((eq kind 'region)                    ((eq kind 'region)
5665                    (ps-spool-region (or from (point)) (or to (mark))))                     (ps-spool-region (or from (point)) (or to (mark))))
5666                   ))                    ))
5667            ;; not pr-faces-p and not pr-spool-p             ;; not pr-faces-p and not pr-spool-p
5668            ((eq kind 'buffer)             ((eq kind 'buffer)
5669             (ps-print-buffer filename))              (ps-print-buffer filename))
5670            ((eq kind 'region)             ((eq kind 'region)
5671             (ps-print-region (or from (point)) (or to (mark)) filename))              (ps-print-region (or from (point)) (or to (mark)) filename))
5672            )))             ))))
5673    
5674    
5675  (defun pr-command (command)  (defun pr-command (command)
# Line 5721  COMMAND.exe, COMMAND.bat and COMMAND.com Line 5776  COMMAND.exe, COMMAND.bat and COMMAND.com
5776  (defvar pr-interface-map nil  (defvar pr-interface-map nil
5777    "Keymap for pr-interface.")    "Keymap for pr-interface.")
5778    
5779  (if pr-interface-map  (unless pr-interface-map
     nil  
5780    (setq pr-interface-map (make-sparse-keymap))    (setq pr-interface-map (make-sparse-keymap))
5781    (cond ((eq ps-print-emacs-type 'xemacs) ; XEmacs    (cond ((featurep 'xemacs)             ; XEmacs
5782           (pr-f-set-keymap-parents pr-interface-map (list widget-keymap))           (pr-f-set-keymap-parents pr-interface-map (list widget-keymap))
5783           (pr-f-set-keymap-name pr-interface-map 'pr-interface-map))           (pr-f-set-keymap-name pr-interface-map 'pr-interface-map))
5784          ((eq ps-print-emacs-type 'emacs) ; GNU Emacs          (t                              ; GNU Emacs
5785           (pr-f-set-keymap-parents pr-interface-map widget-keymap)))           (pr-f-set-keymap-parents pr-interface-map widget-keymap)))
5786    (define-key pr-interface-map "q" 'pr-interface-quit)    (define-key pr-interface-map "q" 'pr-interface-quit)
5787    (define-key pr-interface-map "?" 'pr-interface-help))    (define-key pr-interface-map "?" 'pr-interface-help))

Legend:
Removed from v.1.3.2.14  
changed lines
  Added in v.1.3.2.15

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26