X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/93afd0f1d463bec0fc8d3127c1d34ccaa4dbe99b..4b57301e7e3d5bd4701ce705a5dc7dddb37cb1e1:/lisp/printing.el diff --git a/lisp/printing.el b/lisp/printing.el index 515ac97c91..ef38490c93 100644 --- a/lisp/printing.el +++ b/lisp/printing.el @@ -1,16 +1,16 @@ ;;; printing.el --- printing utilities -;; Copyright (C) 2000, 2001, 2003, 2004, 2005, -;; 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. ;; Author: Vinicius Jose Latorre ;; Maintainer: Vinicius Jose Latorre ;; Keywords: wp, print, PostScript -;; Version: 6.8.4 +;; Version: 6.9.3 ;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre -(defconst pr-version "6.8.4" - "printing.el, v 6.8.4 <2005/06/11 vinicius> +(defconst pr-version "6.9.3" + "printing.el, v 6.9.3 <2007/12/09 vinicius> Please send all bug fixes and enhancements to Vinicius Jose Latorre @@ -20,7 +20,7 @@ Please send all bug fixes and enhancements to ;; GNU Emacs is free software; you can redistribute it and/or modify it under ;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later +;; Software Foundation; either version 3, or (at your option) any later ;; version. ;; GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY @@ -67,7 +67,7 @@ Please send all bug fixes and enhancements to ;; interface to ps-print package and it also provides some extra stuff. ;; ;; To download the latest ps-print package see -;; `http://www.emacswiki.org/cgi-bin/emacs/download/ps-print.tar.gz'. +;; `http://www.emacswiki.org/cgi-bin/wiki/PsPrintPackage'. ;; Please, see README file for ps-print installation instructions. ;; ;; `printing' was inspired on: @@ -958,7 +958,7 @@ Please send all bug fixes and enhancements to ;; * For `printing' package: ;; ;; printing `http://www.emacswiki.org/cgi-bin/emacs/download/printing.el' -;; ps-print `http://www.emacswiki.org/cgi-bin/emacs/download/ps-print.tar.gz' +;; ps-print `http://www.emacswiki.org/cgi-bin/wiki/PsPrintPackage' ;; ;; * For GNU or Unix system: ;; @@ -1093,46 +1093,544 @@ If SUFFIX is non-nil, add that at the end of the file name." (set-default-file-modes umask))))) -;; 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) +(eval-when-compile + ;; User Interface --- declared here to avoid compiler warnings + (defvar pr-path-style) + (defvar pr-auto-region) + (defvar pr-menu-char-height) + (defvar pr-menu-char-width) + (defvar pr-menu-lock) + (defvar pr-ps-printer-alist) + (defvar pr-txt-printer-alist) + (defvar pr-ps-utility-alist) + + + ;; Internal fun alias to avoid compilation gripes + (defalias 'pr-menu-lookup 'ignore) + (defalias 'pr-menu-lock 'ignore) + (defalias 'pr-menu-alist 'ignore) + (defalias 'pr-even-or-odd-pages 'ignore) + (defalias 'pr-menu-get-item 'ignore) + (defalias 'pr-menu-set-item-name 'ignore) + (defalias 'pr-menu-set-utility-title 'ignore) + (defalias 'pr-menu-set-ps-title 'ignore) + (defalias 'pr-menu-set-txt-title 'ignore) + (defalias 'pr-region-active-p 'ignore) + (defalias 'pr-do-update-menus 'ignore) + (defalias 'pr-update-mode-line 'ignore) + (defalias 'pr-read-string 'ignore) + (defalias 'pr-set-keymap-parents 'ignore) + (defalias 'pr-keep-region-active 'ignore)) + + +;; Internal Vars --- defined here to avoid compiler warnings +(defvar pr-menu-print-item "print" + "Non-nil means that menu binding was not done. + +Used by `pr-menu-bind' and `pr-update-menus'.") + +(defvar pr-ps-printer-menu-modified t + "Non-nil means `pr-ps-printer-alist' was modified and we need to update menu.") + +(defvar pr-txt-printer-menu-modified t + "Non-nil means `pr-txt-printer-alist' was modified and we need to update menu.") + +(defvar pr-ps-utility-menu-modified t + "Non-nil means `pr-ps-utility-alist' was modified and we need to update menu.") + +(defconst pr-even-or-odd-alist + '((nil . "Print All Pages") + (even-page . "Print Even Pages") + (odd-page . "Print Odd Pages") + (even-sheet . "Print Even Sheets") + (odd-sheet . "Print Odd Sheets"))) + + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; XEmacs Definitions + (cond ((featurep 'xemacs) ; XEmacs - (defvar current-menubar nil) - (defvar current-mouse-event nil) - (defvar zmacs-region-stays nil) - (defalias 'pr-f-set-keymap-parents 'set-keymap-parents) - (defalias 'pr-f-set-keymap-name 'set-keymap-name) - (defun pr-f-read-string (prompt initial history default) + ;; XEmacs + (defalias 'pr-set-keymap-parents 'set-keymap-parents) + (defalias 'pr-set-keymap-name 'set-keymap-name) + + ;; XEmacs + (defun pr-read-string (prompt initial history default) (let ((str (read-string prompt initial))) (if (and str (not (string= str ""))) str default))) + + ;; XEmacs + (defvar zmacs-region-stays nil) + + ;; XEmacs (defun pr-keep-region-active () - (setq zmacs-region-stays t))) + (setq zmacs-region-stays t)) + + ;; XEmacs + (defun pr-region-active-p () + (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p))) + + ;; XEmacs + (defun pr-menu-char-height () + (font-height (face-font 'default))) + + ;; XEmacs + (defun pr-menu-char-width () + (font-width (face-font 'default))) + + ;; XEmacs + (defmacro pr-xemacs-global-menubar (&rest body) + `(save-excursion + (let ((temp (get-buffer-create (make-temp-name " *Temp")))) + ;; be sure to access global menubar + (set-buffer temp) + ,@body + (kill-buffer temp)))) + + ;; XEmacs + (defun pr-global-menubar (pr-menu-spec) + ;; Menu binding + (pr-xemacs-global-menubar + (add-submenu nil (cons "Printing" pr-menu-spec) "Apps")) + (setq pr-menu-print-item nil)) + + ;; XEmacs + (defvar current-mouse-event nil) + (defun pr-menu-position (entry index horizontal) + (make-event + 'button-release + (list 'button 1 + 'x (- (event-x-pixel current-mouse-event) ; X + (* horizontal pr-menu-char-width)) + 'y (- (event-y-pixel current-mouse-event) ; Y + (* (pr-menu-index entry index) pr-menu-char-height))))) + + (defvar pr-menu-position nil) + (defvar pr-menu-state nil) + + ;; XEmacs + (defvar current-menubar nil) ; to avoid compilation gripes + (defun pr-menu-lookup (path) + (car (find-menu-item current-menubar (cons "Printing" path)))) + + ;; XEmacs + (defun pr-menu-lock (entry index horizontal state path) + (when pr-menu-lock + (or (and pr-menu-position (eq state pr-menu-state)) + (setq pr-menu-position (pr-menu-position entry index horizontal) + pr-menu-state state)) + (let* ((menu (pr-menu-lookup path)) + (result (get-popup-menu-response menu pr-menu-position))) + (and (misc-user-event-p result) + (funcall (event-function result) + (event-object result)))) + (setq pr-menu-position nil))) + + ;; XEmacs + (defalias 'pr-update-mode-line 'set-menubar-dirty-flag) + + ;; XEmacs + (defvar pr-ps-name-old "PostScript Printers") + (defvar pr-txt-name-old "Text Printers") + (defvar pr-ps-utility-old "PostScript Utility") + (defvar pr-even-or-odd-old "Print All Pages") + + ;; XEmacs + (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)) + (pr-menu-alist pr-ps-utility-alist + 'pr-ps-utility + 'pr-menu-set-utility-title + '("Printing" "PostScript Preview" "File") + 'pr-ps-utility-menu-modified + force + pr-ps-utility-old + nil 1) + (pr-even-or-odd-pages ps-even-or-odd-pages force)) + + ;; XEmacs + (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name + entry index) + (when (and alist (or force (symbol-value modified-sym))) + (pr-xemacs-global-menubar + (add-submenu menu-path + (pr-menu-create name alist var-sym + fun entry index))) + (funcall fun (symbol-value var-sym)) + (set modified-sym nil))) + + ;; XEmacs + (defun pr-relabel-menu-item (newname var-sym) + (pr-xemacs-global-menubar + (relabel-menu-item + (list "Printing" (symbol-value var-sym)) + newname) + (set var-sym newname))) + ;; XEmacs + (defun pr-menu-set-ps-title (value &optional item entry index) + (pr-relabel-menu-item (format "PostScript Printer: %s" value) + '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))) + + ;; XEmacs + (defun pr-menu-set-utility-title (value &optional item entry index) + (pr-xemacs-global-menubar + (let ((newname (format "%s" value))) + (relabel-menu-item + (list "Printing" "PostScript Print" "File" pr-ps-utility-old) + newname) + (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))) + + ) + (t ; GNU Emacs + ;; Do nothing + )) ; end cond featurep + + + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; GNU Emacs Definitions + + +(cond + ((featurep 'xemacs) ; XEmacs + ;; Do nothing + ) (t ; GNU Emacs - (defvar deactivate-mark nil) - (defalias 'pr-f-set-keymap-parents 'set-keymap-parent) - (defalias 'pr-f-set-keymap-name 'ignore) - (defalias 'pr-f-read-string 'read-string) + ;; GNU Emacs + (defalias 'pr-set-keymap-parents 'set-keymap-parent) + (defalias 'pr-set-keymap-name 'ignore) + (defalias 'pr-read-string 'read-string) + + ;; GNU Emacs + (defvar deactivate-mark) + + ;; GNU Emacs (defun pr-keep-region-active () - (setq deactivate-mark nil)))) + (setq deactivate-mark nil)) + + ;; GNU Emacs + (defun pr-region-active-p () + (and pr-auto-region transient-mark-mode mark-active)) + + ;; GNU Emacs + (defun pr-menu-char-height () + (frame-char-height)) + + ;; GNU Emacs + (defun pr-menu-char-width () + (frame-char-width)) + + (defvar pr-menu-bar nil + "Specify Printing menu-bar entry.") + + ;; GNU Emacs + ;; Menu binding + ;; Replace existing "print" item by "Printing" item. + ;; If you're changing this file, you'll load it a second, + ;; third... time, but "print" item exists only in the first load. + (eval-when-compile + (require 'easymenu)) ; to avoid compilation gripes + + (eval-and-compile + (cond + ;; GNU Emacs 20 + ((< emacs-major-version 21) + (defun pr-global-menubar (pr-menu-spec) + (require 'easymenu) + (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item) + (when pr-menu-print-item + (easy-menu-remove-item nil '("tools") pr-menu-print-item) + (setq pr-menu-print-item nil + pr-menu-bar (vector 'menu-bar 'tools + (pr-get-symbol "Printing"))))) + ) + ;; GNU Emacs 21 & 22 + (t + (defun pr-global-menubar (pr-menu-spec) + (require 'easymenu) + (let ((menu-file (if (= emacs-major-version 21) + '("menu-bar" "files") ; GNU Emacs 21 + '("menu-bar" "file")))) ; GNU Emacs 22 or higher + (cond + (pr-menu-print-item + (easy-menu-add-item global-map menu-file + (easy-menu-create-menu "Print" pr-menu-spec) + "print-buffer") + (dolist (item '("print-buffer" "print-region" + "ps-print-buffer-faces" "ps-print-region-faces" + "ps-print-buffer" "ps-print-region")) + (easy-menu-remove-item global-map menu-file item)) + (setq pr-menu-print-item nil + pr-menu-bar (vector 'menu-bar + (pr-get-symbol (nth 1 menu-file)) + (pr-get-symbol "Print")))) + (t + (easy-menu-add-item global-map menu-file + (easy-menu-create-menu "Print" pr-menu-spec))) + ))) + ))) + + (eval-and-compile + (cond + (ps-windows-system + ;; GNU Emacs for Windows 9x/NT + (defun pr-menu-position (entry index horizontal) + (let ((pos (cdr (mouse-pixel-position)))) + (list + (list (or (car pos) 0) ; X + (- (or (cdr pos) 0) ; Y + (* (pr-menu-index entry index) pr-menu-char-height))) + (selected-frame)))) ; frame + ) + (t + ;; GNU Emacs + (defun pr-menu-position (entry index horizontal) + (let ((pos (cdr (mouse-pixel-position)))) + (list + (list (- (or (car pos) 0) ; X + (* horizontal pr-menu-char-width)) + (- (or (cdr pos) 0) ; Y + (* (pr-menu-index entry index) pr-menu-char-height))) + (selected-frame)))) ; frame + ))) + + (defvar pr-menu-position nil) + (defvar pr-menu-state nil) + + ;; GNU Emacs + (defun pr-menu-lookup (path) + (lookup-key global-map + (if path + (vconcat pr-menu-bar + (mapcar 'pr-get-symbol + (if (listp path) + path + (list path)))) + pr-menu-bar))) + + ;; GNU Emacs + (defun pr-menu-lock (entry index horizontal state path) + (when pr-menu-lock + (or (and pr-menu-position (eq state pr-menu-state)) + (setq pr-menu-position (pr-menu-position entry index horizontal) + pr-menu-state state)) + (let* ((menu (pr-menu-lookup path)) + (result (x-popup-menu pr-menu-position menu))) + (and result + (let ((command (lookup-key menu (vconcat result)))) + (if (fboundp command) + (funcall command) + (eval command))))) + (setq pr-menu-position nil))) + + ;; GNU Emacs + (defalias 'pr-update-mode-line 'force-mode-line-update) + + ;; GNU Emacs + (defun pr-do-update-menus (&optional force) + (pr-menu-alist pr-ps-printer-alist + 'pr-ps-name + 'pr-menu-set-ps-title + "PostScript Printers" + 'pr-ps-printer-menu-modified + force + "PostScript Printers" + 'postscript 2) + (pr-menu-alist pr-txt-printer-alist + 'pr-txt-name + 'pr-menu-set-txt-title + "Text Printers" + 'pr-txt-printer-menu-modified + force + "Text Printers" + '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 + '("PostScript Print" "File" "PostScript Utility") + 'save-var + force + "PostScript Utility" + nil 1)) + (pr-menu-alist pr-ps-utility-alist + 'pr-ps-utility + 'pr-menu-set-utility-title + '("PostScript Preview" "File" "PostScript Utility") + 'pr-ps-utility-menu-modified + force + "PostScript Utility" + nil 1) + (pr-even-or-odd-pages ps-even-or-odd-pages force)) + + ;; GNU Emacs + (defun pr-menu-get-item (name-list) + ;; NAME-LIST is a string or a list of strings. + (or (listp name-list) + (setq name-list (list name-list))) + (and name-list + (let* ((reversed (reverse name-list)) + (name (pr-get-symbol (car reversed))) + (path (nreverse (cdr reversed))) + (menu (lookup-key + global-map + (vconcat pr-menu-bar + (mapcar 'pr-get-symbol path))))) + (assq name (nthcdr 2 menu))))) + + ;; GNU Emacs + (defvar pr-temp-menu nil) + + ;; GNU Emacs + (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name + entry index) + (when (and alist (or force (symbol-value modified-sym))) + (easy-menu-define pr-temp-menu nil "" + (pr-menu-create name alist var-sym fun entry index)) + (let ((item (pr-menu-get-item menu-path))) + (and item + (let* ((binding (nthcdr 3 item)) + (key-binding (cdr binding))) + (setcar binding pr-temp-menu) + (and key-binding (listp (car key-binding)) + (setcdr binding (cdr key-binding))) ; skip KEY-BINDING + (funcall fun (symbol-value var-sym) item)))) + (set modified-sym nil))) + + ;; GNU Emacs + (defun pr-menu-set-item-name (item name) + (and item + (setcar (nthcdr 2 item) name))) ; ITEM-NAME + + ;; GNU Emacs + (defun pr-menu-set-ps-title (value &optional item entry index) + (pr-menu-set-item-name (or item + (pr-menu-get-item "PostScript Printers")) + (format "PostScript Printer: %s" value)) + (pr-ps-set-printer value) + (and index + (pr-menu-lock entry index 12 'toggle nil))) + + ;; GNU Emacs + (defun pr-menu-set-txt-title (value &optional item entry index) + (pr-menu-set-item-name (or item + (pr-menu-get-item "Text Printers")) + (format "Text Printer: %s" value)) + (pr-txt-set-printer value) + (and index + (pr-menu-lock entry index 12 'toggle nil))) + + ;; GNU Emacs + (defun pr-menu-set-utility-title (value &optional item entry index) + (let ((name (symbol-name value))) + (if item + (pr-menu-set-item-name item name) + (pr-menu-set-item-name + (pr-menu-get-item + '("PostScript Print" "File" "PostScript Utility")) + name) + (pr-menu-set-item-name + (pr-menu-get-item + '("PostScript Preview" "File" "PostScript Utility")) + name))) + (pr-ps-set-utility value) + (and index + (pr-menu-lock entry index 5 nil '("PostScript Print" "File")))) + + ;; GNU Emacs + (defun pr-even-or-odd-pages (value &optional no-lock) + (pr-menu-set-item-name (pr-menu-get-item "Print All Pages") + (cdr (assq value pr-even-or-odd-alist))) + (setq ps-even-or-odd-pages value) + (or no-lock + (pr-menu-lock 'postscript-options 8 12 'toggle nil))) + + )) ; end cond featurep + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Internal Functions (I) + + +(defun pr-dosify-file-name (path) + "Replace unix-style directory separator character with dos/windows one." + (interactive "sPath: ") + (if (eq pr-path-style 'windows) + (subst-char-in-string ?/ ?\\ path) + path)) + + +(defun pr-unixify-file-name (path) + "Replace dos/windows-style directory separator character with unix one." + (interactive "sPath: ") + (if (eq pr-path-style 'windows) + (subst-char-in-string ?\\ ?/ path) + path)) + + +(defun pr-standard-file-name (path) + "Ensure the proper directory separator depending on the OS. +That is, if Emacs is running on DOS/Windows, ensure dos/windows-style directory +separator; otherwise, ensure unix-style directory separator." + (if (or pr-cygwin-system ps-windows-system) + (subst-char-in-string ?/ ?\\ path) + (subst-char-in-string ?\\ ?/ path))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1168,7 +1666,7 @@ If SUFFIX is non-nil, add that at the end of the file name." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; User Interface (I) +;; User Interface (defgroup printing nil @@ -1176,7 +1674,7 @@ If SUFFIX is non-nil, add that at the end of the file name." :tag "Printing Utilities" :link '(emacs-library-link :tag "Source Lisp File" "printing.el") :prefix "pr-" - :version "20" + :version "22.1" :group 'wp :group 'postscript) @@ -1196,43 +1694,9 @@ Valid values are: :type '(choice :tag "Path style" (const :tag "Windows 9x/NT Style (\\)" :value windows) (const :tag "Unix Style (/)" :value unix)) - :version "20" :group 'printing) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Internal Functions (I) - - -(defun pr-dosify-file-name (path) - "Replace unix-style directory separator character with dos/windows one." - (interactive "sPath: ") - (if (eq pr-path-style 'windows) - (subst-char-in-string ?/ ?\\ path) - path)) - - -(defun pr-unixify-file-name (path) - "Replace dos/windows-style directory separator character with unix one." - (interactive "sPath: ") - (if (eq pr-path-style 'windows) - (subst-char-in-string ?\\ ?/ path) - path)) - - -(defun pr-standard-file-name (path) - "Ensure the proper directory separator depending on the OS. -That is, if Emacs is running on DOS/Windows, ensure dos/windows-style directory -separator; otherwise, ensure unix-style directory separator." - (if (or pr-cygwin-system ps-windows-system) - (subst-char-in-string ?/ ?\\ path) - (subst-char-in-string ?\\ ?/ path))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; User Interface (II) - - (defcustom pr-path-alist '((unix PATH) (cygwin PATH) @@ -1308,7 +1772,6 @@ Examples: :tag "Directory" (string :value "") (symbol :value symbol))))) - :version "20" :group 'printing) @@ -1323,7 +1786,6 @@ modified by other means (for example, a lisp function), use `pr-update-menus' function (see it for documentation) to update text printer menu." :type 'symbol :set 'pr-txt-name-custom-set - :version "20" :group 'printing) @@ -1456,7 +1918,6 @@ Useful links: (const :tag "None" nil) string))) :set 'pr-alist-custom-set - :version "20" :group 'printing) @@ -1471,7 +1932,6 @@ modified by other means (for example, a lisp function), use `pr-update-menus' function (see it for documentation) to update PostScript printer menu." :type 'symbol :set 'pr-ps-name-custom-set - :version "20" :group 'printing) @@ -1592,7 +2052,7 @@ DEFAULT It's a way to set default values when this entry is selected. (VARIABLE . VALUE) - That associates VARIABLE with VALUE. when this entry is + Which associates VARIABLE with VALUE. When this entry is selected, it's executed the following command: (set VARIABLE (eval VALUE)) @@ -1744,7 +2204,6 @@ Useful links: (sexp :tag "Value"))) )) :set 'pr-alist-custom-set - :version "20" :group 'printing) @@ -1763,7 +2222,6 @@ Useful links: See also `pr-ps-temp-file' and `pr-file-modes'." :type '(directory :tag "Temporary Directory") - :version "20" :group 'printing) @@ -1772,7 +2230,6 @@ See also `pr-ps-temp-file' and `pr-file-modes'." See also `pr-temp-dir' and `pr-file-modes'." :type '(file :tag "PostScript Temporary File Name") - :version "21" :group 'printing) @@ -1786,7 +2243,6 @@ It should be an integer; only the low 9 bits are used. See also `pr-temp-dir' and `pr-ps-temp-file'." :type '(integer :tag "File Permission Bits") - :version "21.3" :group 'printing) @@ -1828,7 +2284,6 @@ Useful links: `http://www.cs.wisc.edu/~ghost/macos/index.htm' " :type '(string :tag "Ghostview Utility") - :version "20" :group 'printing) @@ -1855,7 +2310,6 @@ Useful links: `http://www.cs.wisc.edu/~ghost/doc/printer.htm' " :type '(string :tag "Ghostscript Utility") - :version "20" :group 'printing) @@ -1898,7 +2352,6 @@ Useful links: `http://www.cs.wisc.edu/~ghost/doc/printer.htm' " :type '(repeat (string :tag "Ghostscript Switch")) - :version "20" :group 'printing) @@ -1915,7 +2368,6 @@ A note on the gs switches: See `pr-gs-switches' for documentation. See also `pr-ps-printer-alist'." :type '(string :tag "Ghostscript Device") - :version "20" :group 'printing) @@ -1929,7 +2381,6 @@ A note on the gs switches: See `pr-gs-switches' for documentation. See also `pr-ps-printer-alist'." :type '(integer :tag "Ghostscript Resolution") - :version "20" :group 'printing) @@ -1942,35 +2393,30 @@ ghostscript to print a PostScript file. In GNU or Unix system, if ghostscript is set as a PostScript filter, this variable should be nil." :type 'boolean - :version "20" :group 'printing) (defcustom pr-faces-p nil "*Non-nil means print with face attributes." :type 'boolean - :version "20" :group 'printing) (defcustom pr-spool-p nil "*Non-nil means spool printing in a buffer." :type 'boolean - :version "20" :group 'printing) (defcustom pr-file-landscape nil "*Non-nil means print PostScript file in landscape orientation." :type 'boolean - :version "20" :group 'printing) (defcustom pr-file-duplex nil "*Non-nil means print PostScript file in duplex mode." :type 'boolean - :version "20" :group 'printing) @@ -1982,7 +2428,6 @@ right. If tumble is on, produces a printing suitable for binding at the top or bottom." :type 'boolean - :version "20" :group 'printing) @@ -1995,7 +2440,6 @@ When this variable is non-nil, the `*-buffer*' commands will behave like `*-region*' commands, that is, `*-buffer*' commands will print only the region marked instead of all buffer." :type 'boolean - :version "20" :group 'printing) @@ -2007,7 +2451,6 @@ and `*-region*' commands will behave like `*-mode*' commands; otherwise, `*-buffer*' commands will print the current buffer and `*-region*' commands will print the current region." :type 'boolean - :version "20" :group 'printing) @@ -2147,7 +2590,7 @@ DEFAULT It's a way to set default values when this entry is selected. (VARIABLE-SYM . VALUE) - That associates VARIABLE-SYM with VALUE. when this entry is + Which associates VARIABLE-SYM with VALUE. When this entry is selected, it's executed the following command: (set (make-local-variable VARIABLE-SYM) (eval VALUE)) @@ -2208,7 +2651,6 @@ DEFAULT It's a way to set default values when this entry is selected. (variable :tag "Other")) (sexp :tag "Value"))) )) - :version "20" :group 'printing) @@ -2226,7 +2668,6 @@ NOTE: Don't forget to download and install the utilities declared on `pr-ps-utility-alist'." :type '(symbol :tag "PS File Utility") :set 'pr-ps-utility-custom-set - :version "20" :group 'printing) @@ -2327,7 +2768,7 @@ DEFAULT It's a way to set default values when this entry is selected. (VARIABLE . VALUE) - That associates VARIABLE with VALUE. when this entry is + Which associates VARIABLE with VALUE. When this entry is selected, it's executed the following command: (set VARIABLE (eval VALUE)) @@ -2439,7 +2880,6 @@ Useful links: (sexp :tag "Value"))) )) :set 'pr-alist-custom-set - :version "20" :group 'printing) @@ -2448,15 +2888,10 @@ Useful links: See also `pr-menu-char-height' and `pr-menu-char-width'." :type 'boolean - :version "20" :group 'printing) -(defcustom pr-menu-char-height - (cond ((featurep 'xemacs) ; XEmacs - (pr-x-font-height (face-font 'default))) - (t ; GNU Emacs - (pr-e-frame-char-height))) +(defcustom pr-menu-char-height (pr-menu-char-height) "*Specify menu char height in pixels. This variable is used to guess which vertical position should be locked the @@ -2464,15 +2899,10 @@ menu, so don't forget to adjust it if menu position is not ok. See also `pr-menu-lock' and `pr-menu-char-width'." :type 'integer - :version "20" :group 'printing) -(defcustom pr-menu-char-width - (cond ((featurep 'xemacs) ; XEmacs - (pr-x-font-width (face-font 'default))) - (t ; GNU Emacs - (pr-e-frame-char-width))) +(defcustom pr-menu-char-width (pr-menu-char-width) "*Specify menu char width in pixels. This variable is used to guess which horizontal position should be locked the @@ -2480,7 +2910,6 @@ menu, so don't forget to adjust it if menu position is not ok. See also `pr-menu-lock' and `pr-menu-char-height'." :type 'integer - :version "20" :group 'printing) @@ -2544,7 +2973,7 @@ SETTING It's a cons like: (VARIABLE . VALUE) - That associates VARIABLE with VALUE. when this entry is + Which associates VARIABLE with VALUE. When this entry is selected, it's executed the following command: * If LOCAL is non-nil: @@ -2597,7 +3026,6 @@ SETTING It's a cons like: (variable :tag "Other")) (sexp :tag "Value"))) )) - :version "20" :group 'printing) @@ -2651,7 +3079,6 @@ Any other value is ignored." (const postscript-process) (const printing) (const help))) - :version "20" :group 'printing) @@ -2663,7 +3090,6 @@ happens when printing: Error: could not open \"c:\\temp\\prspool.ps\" for reading." :type 'boolean - :version "20" :group 'printing) @@ -2677,7 +3103,6 @@ It's used by `pr-ps-directory-preview', `pr-ps-directory-using-ghostscript', `pr-ps-directory-print', `pr-ps-directory-ps-print', `pr-printify-directory' and `pr-txt-directory'." :type 'boolean - :version "20" :group 'printing) @@ -2686,7 +3111,6 @@ and `pr-txt-directory'." It's used by `pr-interface'." :type 'string - :version "20" :group 'printing) @@ -2700,7 +3124,6 @@ NOTE: Case is important for matching, that is, `case-fold-search' is always It's used by `pr-interface'." :type '(repeat (regexp :tag "Buffer Name Regexp")) - :version "20" :group 'printing) @@ -2709,7 +3132,6 @@ It's used by `pr-interface'." It's used by `pr-interface'." :type 'boolean - :version "20" :group 'printing) @@ -2752,10 +3174,6 @@ See `pr-ps-printer-alist'.") See `pr-ps-printer-alist'.") -(defvar pr-menu-bar nil - "Specify Printing menu-bar entry.") - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Macros @@ -2772,15 +3190,6 @@ See `pr-ps-printer-alist'.") ;; Keys & Menus -(defmacro pr-xemacs-global-menubar (&rest body) - `(save-excursion - (let ((temp (get-buffer-create (make-temp-name " *Temp")))) - ;; be sure to access global menubar - (set-buffer temp) - ,@body - (kill-buffer temp)))) - - (defsubst pr-visible-p (key) (memq key pr-visible-entry-list)) @@ -2802,16 +3211,6 @@ See `pr-ps-printer-alist'.") 'easy-menu-intern (lambda (s) (if (stringp s) (intern s) s)))) -(cond - ((featurep 'xemacs) ; XEmacs - (defvar zmacs-region-stays nil) ; to avoid compilation gripes - (defun pr-region-active-p () - (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p)))) - - (t ; GNU Emacs - (defun pr-region-active-p () - (and pr-auto-region transient-mark-mode mark-active)))) - (defconst pr-menu-spec ;; Menu mapping: @@ -3054,12 +3453,6 @@ See `pr-ps-printer-alist'.") ))) -(defvar pr-menu-print-item "print" - "Non-nil means that menu binding was not done. - -Used by `pr-menu-bind' and `pr-update-menus'.") - - (defun pr-menu-bind () "Install `printing' menu in the menubar. @@ -3070,51 +3463,7 @@ menu. Calls `pr-update-menus' to adjust menus." (interactive) - (cond - ((featurep 'xemacs) ; XEmacs - ;; Menu binding - (pr-xemacs-global-menubar - (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps")) - (setq pr-menu-print-item nil)) - - - (t ; GNU Emacs - ;; Menu binding - (require 'easymenu) - ;; Replace existing "print" item by "Printing" item. - ;; If you're changing this file, you'll load it a second, - ;; third... time, but "print" item exists only in the first load. - (cond - ;; Emacs 20 - ((< emacs-major-version 21) - (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item) - (when pr-menu-print-item - (easy-menu-remove-item nil '("tools") pr-menu-print-item) - (setq pr-menu-print-item nil - pr-menu-bar (vector 'menu-bar 'tools - (pr-get-symbol "Printing"))))) - ;; Emacs 21 & 22 - (t - (let ((menu-file (if (= emacs-major-version 21) - '("menu-bar" "files") ; Emacs 21 - '("menu-bar" "file")))) ; Emacs 22 or higher - (cond - (pr-menu-print-item - (easy-menu-add-item global-map menu-file - (easy-menu-create-menu "Print" pr-menu-spec) - "print-buffer") - (dolist (item '("print-buffer" "print-region" - "ps-print-buffer-faces" "ps-print-region-faces" - "ps-print-buffer" "ps-print-region")) - (easy-menu-remove-item global-map menu-file item)) - (setq pr-menu-print-item nil - pr-menu-bar (vector 'menu-bar - (pr-get-symbol (nth 1 menu-file)) - (pr-get-symbol "Print")))) - (t - (easy-menu-add-item global-map menu-file - (easy-menu-create-menu "Print" pr-menu-spec))) - )))))) + (pr-global-menubar pr-menu-spec) (pr-update-menus t)) @@ -4402,7 +4751,7 @@ Interactively, you have the following situations: C-u 2 M-x pr-ps-fast-fire RET The command prompts the user for a N-UP value, then for a current PostScript printer and, finally, for a file name. Then change the active - printer to that choosen by user and saves the PostScript image in + printer to that chosen by user and saves the PostScript image in that file instead of sending it to the printer. @@ -4421,7 +4770,7 @@ zero and the argument SELECT is treated as follows: If it's an integer greater or equal to 2, the command prompts the user for a current PostScript printer and for a file name. Then change the active - printer to that choosen by user and saves the PostScript image in that file + printer to that chosen by user and saves the PostScript image in that file instead of sending it to the printer. If it's a symbol which it's defined in `pr-ps-printer-alist', it's the new @@ -4821,112 +5170,24 @@ See `pr-visible-entry-alist'.") (defun pr-menu-index (entry index) (let ((base-list (cond ((eq entry 'text) - '(postscript)) - ((eq entry 'postscript-options) - '(postscript text)) - ((eq entry 'postscript-process) - '(postscript text postscript-options)) - ((eq entry 'printing) - '(postscript text postscript-options postscript-process)) - (t - nil) - )) - key) - (while base-list - (setq key (car base-list) - base-list (cdr base-list)) - (and (pr-visible-p key) - (setq index (+ index - (cdr (assq key pr-menu-entry-alist))))))) - (+ index 2)) - - -(defvar pr-menu-position nil) -(defvar pr-menu-state nil) - - -(cond - ((featurep 'xemacs) - ;; XEmacs - (defvar current-mouse-event nil) ; to avoid compilation gripes - (defun pr-menu-position (entry index horizontal) - (pr-x-make-event - 'button-release - (list 'button 1 - 'x (- (pr-x-event-x-pixel current-mouse-event) ; X - (* horizontal pr-menu-char-width)) - 'y (- (pr-x-event-y-pixel current-mouse-event) ; Y - (* (pr-menu-index entry index) pr-menu-char-height))))) - ) - (ps-windows-system - ;; GNU Emacs for Windows 9x/NT - (defun pr-menu-position (entry index horizontal) - (let ((pos (cdr (pr-e-mouse-pixel-position)))) - (list - (list (or (car pos) 0) ; X - (- (or (cdr pos) 0) ; Y - (* (pr-menu-index entry index) pr-menu-char-height))) - (selected-frame)))) ; frame - ) - (t - ;; GNU Emacs - (defun pr-menu-position (entry index horizontal) - (let ((pos (cdr (pr-e-mouse-pixel-position)))) - (list - (list (- (or (car pos) 0) ; X - (* horizontal pr-menu-char-width)) - (- (or (cdr pos) 0) ; Y - (* (pr-menu-index entry index) pr-menu-char-height))) - (selected-frame)))) ; frame - )) - -(cond - ((featurep 'xemacs) - ;; XEmacs - (defvar current-menubar nil) ; to avoid compilation gripes - (defun pr-menu-lookup (path) - (car (pr-x-find-menu-item current-menubar (cons "Printing" path)))) - - ;; XEmacs - (defun pr-menu-lock (entry index horizontal state path) - (when pr-menu-lock - (or (and pr-menu-position (eq state pr-menu-state)) - (setq pr-menu-position (pr-menu-position entry index horizontal) - pr-menu-state state)) - (let* ((menu (pr-menu-lookup path)) - (result (pr-x-get-popup-menu-response menu pr-menu-position))) - (and (pr-x-misc-user-event-p result) - (funcall (pr-x-event-function result) - (pr-x-event-object result)))) - (setq pr-menu-position nil)))) - - - (t - ;; GNU Emacs - (defun pr-menu-lookup (path) - (lookup-key global-map - (if path - (vconcat pr-menu-bar - (mapcar 'pr-get-symbol - (if (listp path) - path - (list path)))) - pr-menu-bar))) - - ;; GNU Emacs - (defun pr-menu-lock (entry index horizontal state path) - (when pr-menu-lock - (or (and pr-menu-position (eq state pr-menu-state)) - (setq pr-menu-position (pr-menu-position entry index horizontal) - pr-menu-state state)) - (let* ((menu (pr-menu-lookup path)) - (result (x-popup-menu pr-menu-position menu))) - (and result - (let ((command (lookup-key menu (vconcat result)))) - (if (fboundp command) - (funcall command) - (eval command))))) - (setq pr-menu-position nil))))) + '(postscript)) + ((eq entry 'postscript-options) + '(postscript text)) + ((eq entry 'postscript-process) + '(postscript text postscript-options)) + ((eq entry 'printing) + '(postscript text postscript-options postscript-process)) + (t + nil) + )) + key) + (while base-list + (setq key (car base-list) + base-list (cdr base-list)) + (and (pr-visible-p key) + (setq index (+ index + (cdr (assq key pr-menu-entry-alist))))))) + (+ index 2)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -4943,9 +5204,9 @@ See `pr-visible-entry-alist'.") If FORCE is non-nil, update menus doesn't matter if `pr-ps-printer-alist', `pr-txt-printer-alist' or `pr-ps-utility-alist' were modified or not; -otherwise, update PostScript printer menu iff `pr-ps-printer-menu-modified' is -non-nil, update text printer menu iff `pr-txt-printer-menu-modified' is -non-nil, and update PostScript File menus iff `pr-ps-utility-menu-modified' is +otherwise, update PostScript printer menu if `pr-ps-printer-menu-modified' is +non-nil, update text printer menu if `pr-txt-printer-menu-modified' is +non-nil, and update PostScript File menus if `pr-ps-utility-menu-modified' is non-nil. If menu binding was not done, calls `pr-menu-bind'." @@ -4962,22 +5223,6 @@ If menu binding was not done, calls `pr-menu-bind'." (pr-do-update-menus force))) -(defvar pr-ps-printer-menu-modified t - "Non-nil means `pr-ps-printer-alist' was modified and we need to update menu.") -(defvar pr-txt-printer-menu-modified t - "Non-nil means `pr-txt-printer-alist' was modified and we need to update menu.") -(defvar pr-ps-utility-menu-modified t - "Non-nil means `pr-ps-utility-alist' was modified and we need to update menu.") - - -(defconst pr-even-or-odd-alist - '((nil . "Print All Pages") - (even-page . "Print Even Pages") - (odd-page . "Print Odd Pages") - (even-sheet . "Print Even Sheets") - (odd-sheet . "Print Odd Sheets"))) - - (defun pr-menu-create (name alist var-sym fun entry index) (cons name (mapcar @@ -4991,237 +5236,6 @@ If menu binding was not done, calls `pr-menu-bind'." alist))) -(cond - ((featurep 'xemacs) - ;; XEmacs - (defalias 'pr-update-mode-line 'set-menubar-dirty-flag) - - ;; XEmacs - (defvar pr-ps-name-old "PostScript Printers") - (defvar pr-txt-name-old "Text Printers") - (defvar pr-ps-utility-old "PostScript Utility") - (defvar pr-even-or-odd-old "Print All Pages") - - ;; XEmacs - (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)) - (pr-menu-alist pr-ps-utility-alist - 'pr-ps-utility - 'pr-menu-set-utility-title - '("Printing" "PostScript Preview" "File") - 'pr-ps-utility-menu-modified - force - pr-ps-utility-old - nil 1) - (pr-even-or-odd-pages ps-even-or-odd-pages force)) - - ;; XEmacs - (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name - entry index) - (when (and alist (or force (symbol-value modified-sym))) - (pr-xemacs-global-menubar - (pr-x-add-submenu menu-path - (pr-menu-create name alist var-sym - fun entry index))) - (funcall fun (symbol-value var-sym)) - (set modified-sym nil))) - - ;; XEmacs - (defun pr-relabel-menu-item (newname var-sym) - (pr-xemacs-global-menubar - (pr-x-relabel-menu-item - (list "Printing" (symbol-value var-sym)) - newname) - (set var-sym newname))) - - ;; XEmacs - (defun pr-menu-set-ps-title (value &optional item entry index) - (pr-relabel-menu-item (format "PostScript Printer: %s" value) - '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))) - - ;; XEmacs - (defun pr-menu-set-utility-title (value &optional item entry index) - (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)))) - - - (t - ;; GNU Emacs - (defalias 'pr-update-mode-line 'force-mode-line-update) - - ;; GNU Emacs - (defun pr-do-update-menus (&optional force) - (pr-menu-alist pr-ps-printer-alist - 'pr-ps-name - 'pr-menu-set-ps-title - "PostScript Printers" - 'pr-ps-printer-menu-modified - force - "PostScript Printers" - 'postscript 2) - (pr-menu-alist pr-txt-printer-alist - 'pr-txt-name - 'pr-menu-set-txt-title - "Text Printers" - 'pr-txt-printer-menu-modified - force - "Text Printers" - '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 - '("PostScript Print" "File" "PostScript Utility") - 'save-var - force - "PostScript Utility" - nil 1)) - (pr-menu-alist pr-ps-utility-alist - 'pr-ps-utility - 'pr-menu-set-utility-title - '("PostScript Preview" "File" "PostScript Utility") - 'pr-ps-utility-menu-modified - force - "PostScript Utility" - nil 1) - (pr-even-or-odd-pages ps-even-or-odd-pages force)) - - ;; GNU Emacs - (defun pr-menu-get-item (name-list) - ;; NAME-LIST is a string or a list of strings. - (or (listp name-list) - (setq name-list (list name-list))) - (and name-list - (let* ((reversed (reverse name-list)) - (name (pr-get-symbol (car reversed))) - (path (nreverse (cdr reversed))) - (menu (lookup-key - global-map - (vconcat pr-menu-bar - (mapcar 'pr-get-symbol path))))) - (assq name (nthcdr 2 menu))))) - - ;; GNU Emacs - (defvar pr-temp-menu nil) - - ;; GNU Emacs - (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name - entry index) - (when (and alist (or force (symbol-value modified-sym))) - (easy-menu-define pr-temp-menu nil "" - (pr-menu-create name alist var-sym fun entry index)) - (let ((item (pr-menu-get-item menu-path))) - (and item - (let* ((binding (nthcdr 3 item)) - (key-binding (cdr binding))) - (setcar binding pr-temp-menu) - (and key-binding (listp (car key-binding)) - (setcdr binding (cdr key-binding))) ; skip KEY-BINDING - (funcall fun (symbol-value var-sym) item)))) - (set modified-sym nil))) - - ;; GNU Emacs - (defun pr-menu-set-item-name (item name) - (and item - (setcar (nthcdr 2 item) name))) ; ITEM-NAME - - ;; GNU Emacs - (defun pr-menu-set-ps-title (value &optional item entry index) - (pr-menu-set-item-name (or item - (pr-menu-get-item "PostScript Printers")) - (format "PostScript Printer: %s" value)) - (pr-ps-set-printer value) - (and index - (pr-menu-lock entry index 12 'toggle nil))) - - ;; GNU Emacs - (defun pr-menu-set-txt-title (value &optional item entry index) - (pr-menu-set-item-name (or item - (pr-menu-get-item "Text Printers")) - (format "Text Printer: %s" value)) - (pr-txt-set-printer value) - (and index - (pr-menu-lock entry index 12 'toggle nil))) - - ;; GNU Emacs - (defun pr-menu-set-utility-title (value &optional item entry index) - (let ((name (symbol-name value))) - (if item - (pr-menu-set-item-name item name) - (pr-menu-set-item-name - (pr-menu-get-item - '("PostScript Print" "File" "PostScript Utility")) - name) - (pr-menu-set-item-name - (pr-menu-get-item - '("PostScript Preview" "File" "PostScript Utility")) - name))) - (pr-ps-set-utility value) - (and index - (pr-menu-lock entry index 5 nil '("PostScript Print" "File")))) - - ;; GNU Emacs - (defun pr-even-or-odd-pages (value &optional no-lock) - (pr-menu-set-item-name (pr-menu-get-item "Print All Pages") - (cdr (assq value pr-even-or-odd-alist))) - (setq ps-even-or-odd-pages value) - (or no-lock - (pr-menu-lock 'postscript-options 8 12 'toggle nil))))) - - (defun pr-ps-set-utility (value) (let ((item (cdr (assq value pr-ps-utility-alist)))) (or item @@ -5290,15 +5304,15 @@ If menu binding was not done, calls `pr-menu-bind'." (defun pr-eval-local-alist (alist) (let (local-list) - (mapcar #'(lambda (option) - (let ((var-sym (car option)) - (value (cdr option))) - (setq local-list - (if (eq var-sym 'inherits-from:) - (nconc (pr-eval-setting-alist value) local-list) - (set (make-local-variable var-sym) (eval value)) - (cons var-sym local-list))))) - alist) + (mapc #'(lambda (option) + (let ((var-sym (car option)) + (value (cdr option))) + (setq local-list + (if (eq var-sym 'inherits-from:) + (nconc (pr-eval-setting-alist value) local-list) + (set (make-local-variable var-sym) (eval value)) + (cons var-sym local-list))))) + alist) local-list)) @@ -5320,7 +5334,7 @@ If menu binding was not done, calls `pr-menu-bind'." (setq local-list (pr-eval-setting-alist inherits global (cons inherits old))))) - (mapcar + (mapc (cond ((not local) ; global settings #'(lambda (option) (let ((var-sym (car option))) @@ -5705,7 +5719,7 @@ If menu binding was not done, calls `pr-menu-bind'." (save-match-data (let* ((fmt-prompt "%s[%s] N-up printing (default 1): ") (prompt "") - (str (pr-f-read-string (format fmt-prompt prompt mess) "1" nil "1")) + (str (pr-read-string (format fmt-prompt prompt mess) "1" nil "1")) int) (while (if (string-match "^\\s *[0-9]+$" str) (setq int (string-to-number str) @@ -5715,7 +5729,7 @@ If menu binding was not done, calls `pr-menu-bind'." (setq prompt "Invalid integer syntax; ")) (ding) (setq str - (pr-f-read-string (format fmt-prompt prompt mess) str nil "1"))) + (pr-read-string (format fmt-prompt prompt mess) str nil "1"))) int))) @@ -5740,7 +5754,7 @@ If menu binding was not done, calls `pr-menu-bind'." (defun pr-interactive-regexp (mess) - (pr-f-read-string (format "[%s] File regexp to print: " mess) "" nil "")) + (pr-read-string (format "[%s] File regexp to print: " mess) "" nil "")) (defun pr-interactive-dir-args (mess) @@ -5997,9 +6011,10 @@ COMMAND.exe, COMMAND.bat and COMMAND.com in this order." ;; Printing Interface (inspired on ps-print-interface.el) -(require 'widget) -(require 'wid-edit) -(require 'cus-edit) +(eval-when-compile + (require 'cus-edit) + (require 'wid-edit) + (require 'widget)) (defvar pr-i-window-configuration nil) @@ -6023,14 +6038,15 @@ COMMAND.exe, COMMAND.bat and COMMAND.com in this order." "Keymap for pr-interface.") (unless pr-interface-map - (setq pr-interface-map (make-sparse-keymap)) - (cond ((featurep 'xemacs) ; XEmacs - (pr-f-set-keymap-parents pr-interface-map (list widget-keymap)) - (pr-f-set-keymap-name pr-interface-map 'pr-interface-map)) - (t ; GNU Emacs - (pr-f-set-keymap-parents pr-interface-map widget-keymap))) - (define-key pr-interface-map "q" 'pr-interface-quit) - (define-key pr-interface-map "?" 'pr-interface-help)) + (let ((map (make-sparse-keymap))) + (cond ((featurep 'xemacs) ; XEmacs + (pr-set-keymap-parents map (list widget-keymap)) + (pr-set-keymap-name map 'pr-interface-map)) + (t ; GNU Emacs + (pr-set-keymap-parents map widget-keymap))) + (define-key map "q" 'pr-interface-quit) + (define-key map "?" 'pr-interface-help) + (setq pr-interface-map map))) (defmacro pr-interface-save (&rest body)