diff options
-rw-r--r-- | lisp/ChangeLog.unicode | 58 | ||||
-rw-r--r-- | lisp/ps-bdf.el | 6 | ||||
-rw-r--r-- | lisp/ps-def.el | 461 | ||||
-rw-r--r-- | lisp/ps-mule.el | 64 | ||||
-rw-r--r-- | lisp/ps-print.el | 525 | ||||
-rw-r--r-- | lisp/ps-samp.el | 249 |
6 files changed, 779 insertions, 584 deletions
diff --git a/lisp/ChangeLog.unicode b/lisp/ChangeLog.unicode index 7d2b53b680b..0f439efb050 100644 --- a/lisp/ChangeLog.unicode +++ b/lisp/ChangeLog.unicode @@ -1,3 +1,61 @@ +2007-01-25 Vinicius Jose Latorre <viniciusjl@ig.com.br> + + * ps-print.el: Split XEmacs/Emacs definitions and sample setup code + into separate files. + (ps-print-version): New Version 7.2. + (ps-postscript-code-directory): Fix XEmacs initialization. + (ps-generate-postscript-with-faces): Call + ps-generate-postscript-with-faces1 (new fun). + (ps-color-format, ps-float-format): Vars moved to ps-def.el. + (ps-xemacs-color-name, ps-mapper, ps-extent-sorter) + (ps-xemacs-face-kind-p, ps-mark-active-p, ps-face-foreground-name) + (ps-face-background-name, ps-frame-parameter, ps-color-device) + (ps-color-values, ps-face-bold-p, ps-face-italic-p): Funs moved to + ps-def.el. + (ps-prsc, ps-c-prsc, ps-s-prsc, ps-rmail-mode-hook) + (ps-rmail-print-message-from-summary, ps-print-message-from-summary) + (ps-article-subject, ps-article-author, ps-gnus-article-prepare-hook) + (ps-vm-mode-hook, ps-gnus-print-article-from-summary) + (ps-vm-print-message-from-summary, ps-gnus-summary-setup, ps-info-file) + (ps-info-node, ps-info-mode-hook, ps-jts-ps-setup, ps-jack-setup): Funs + moved to ps-samp.el. + + * ps-bdf.el (installation-directory, coding-system-for-read): Vars + moved to ps-def.el. + + * ps-mule.el (leading-code-private-22): Var moved to ps-def.el. + (charset-bytes, charset-dimension, charset-id, charset-width) + (find-charset-region, char-width, chars-in-region, forward-point) + (decompose-composite-char, encode-coding-string, coding-system-p) + (ccl-execute-on-string, define-ccl-program, multibyte-string-p) + (string-make-multibyte, encode-char): Funs moved to ps-def.el. + + * ps-def.el: New file. XEmacs/Emacs definitions. + (ps-generate-postscript-with-faces1): New fun. + (ps-color-format, ps-float-format): Vars moved from ps-print.el. + (ps-xemacs-color-name, ps-mapper, ps-extent-sorter) + (ps-xemacs-face-kind-p, ps-mark-active-p, ps-face-foreground-name) + (ps-face-background-name, ps-frame-parameter, ps-color-device) + (ps-color-values, ps-face-bold-p, ps-face-italic-p): Funs moved from + ps-print.el. + (installation-directory, coding-system-for-read): Vars moved from + ps-bdf.el. + (leading-code-private-22): Var moved from ps-mule.el. + (charset-bytes, charset-dimension, charset-id, charset-width) + (find-charset-region, char-width, chars-in-region, forward-point) + (decompose-composite-char, encode-coding-string, coding-system-p) + (ccl-execute-on-string, define-ccl-program, multibyte-string-p) + (string-make-multibyte, encode-char): Funs moved from ps-mule.el. + + * ps-samp.el: New file. Sample setup code. + (ps-prsc, ps-c-prsc, ps-s-prsc, ps-rmail-mode-hook) + (ps-rmail-print-message-from-summary, ps-print-message-from-summary) + (ps-article-subject, ps-article-author, ps-gnus-article-prepare-hook) + (ps-vm-mode-hook, ps-gnus-print-article-from-summary) + (ps-vm-print-message-from-summary, ps-gnus-summary-setup, ps-info-file) + (ps-info-node, ps-info-mode-hook, ps-jts-ps-setup, ps-jack-setup): Funs + moved from ps-print.el. + 2007-01-21 Vinicius Jose Latorre <viniciusjl@ig.com.br> * ps-print.el: Handle frame parameters (background and/or foreground diff --git a/lisp/ps-bdf.el b/lisp/ps-bdf.el index 615f98b950b..568baf38afd 100644 --- a/lisp/ps-bdf.el +++ b/lisp/ps-bdf.el @@ -38,11 +38,7 @@ ;;; Code: (eval-and-compile - (require 'ps-mule) - - ;; to avoid XEmacs compilation gripes - (defvar installation-directory nil) - (defvar coding-system-for-read nil)) + (require 'ps-mule)) ;;;###autoload (defvar bdf-directory-list diff --git a/lisp/ps-def.el b/lisp/ps-def.el new file mode 100644 index 00000000000..ffd8a7bd6c1 --- /dev/null +++ b/lisp/ps-def.el @@ -0,0 +1,461 @@ +;;; ps-def.el --- XEmacs and Emacs definitions for ps-print + +;; Copyright (C) 2007 Free Software Foundation, Inc. + +;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> +;; Kenichi Handa <handa@m17n.org> (multi-byte characters) +;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) +;; Vinicius Jose Latorre <viniciusjl@ig.com.br> +;; Keywords: wp, print, PostScript +;; Version: 7.2 +;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre + +;; This file is part of GNU Emacs. + +;; 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 +;; version. + +;; GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY +;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +;; details. + +;; You should have received a copy of the GNU General Public License along with +;; GNU Emacs; see the file COPYING. If not, write to the Free Software +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; See ps-print.el for documentation. + +;;; Code: + + + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; XEmacs Definitions + + +(cond + ((featurep 'xemacs) ; xemacs + + + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ps-bdf + + (defvar installation-directory nil) + (defvar coding-system-for-read nil) + + + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ps-mule + + (defvar leading-code-private-22 157) + + (or (fboundp 'charset-bytes) + (defun charset-bytes (charset) 1)) ; ascii + + (or (fboundp 'charset-dimension) + (defun charset-dimension (charset) 1)) ; ascii + + (or (fboundp 'charset-id) + (defun charset-id (charset) 0)) ; ascii + + (or (fboundp 'charset-width) + (defun charset-width (charset) 1)) ; ascii + + (or (fboundp 'find-charset-region) + (defun find-charset-region (beg end &optional table) + (list 'ascii))) + + (or (fboundp 'char-width) + (defun char-width (char) 1)) ; ascii + + (or (fboundp 'chars-in-region) + (defun chars-in-region (beg end) + (- (max beg end) (min beg end)))) + + (or (fboundp 'forward-point) + (defun forward-point (arg) + (save-excursion + (let ((count (abs arg)) + (step (if (zerop arg) + 0 + (/ arg arg)))) + (while (and (> count 0) + (< (point-min) (point)) (< (point) (point-max))) + (forward-char step) + (setq count (1- count))) + (+ (point) (* count step)))))) + + (or (fboundp 'decompose-composite-char) + (defun decompose-composite-char (char &optional type + with-composition-rule) + nil)) + + (or (fboundp 'encode-coding-string) + (defun encode-coding-string (string coding-system &optional nocopy) + (if nocopy + string + (copy-sequence string)))) + + (or (fboundp 'coding-system-p) + (defun coding-system-p (obj) nil)) + + (or (fboundp 'ccl-execute-on-string) + (defun ccl-execute-on-string (ccl-prog status str + &optional contin unibyte-p) + str)) + + (or (fboundp 'define-ccl-program) + (defmacro define-ccl-program (name ccl-program &optional doc) + `(defconst ,name nil ,doc))) + + (or (fboundp 'multibyte-string-p) + (defun multibyte-string-p (str) + (let ((len (length str)) + (i 0) + multibyte) + (while (and (< i len) (not (setq multibyte (> (aref str i) 255)))) + (setq i (1+ i))) + multibyte))) + + (or (fboundp 'string-make-multibyte) + (defalias 'string-make-multibyte 'copy-sequence)) + + (or (fboundp 'encode-char) + (defun encode-char (ch ccs) + ch)) + + + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ps-print + + ;; GNU Emacs + (or (fboundp 'line-beginning-position) + (defun line-beginning-position (&optional n) + (save-excursion + (and n (/= n 1) (forward-line (1- n))) + (beginning-of-line) + (point)))) + + + ;; GNU Emacs + (or (fboundp 'find-composition) + (defalias 'find-composition 'ignore)) + + + (defun ps-xemacs-color-name (color) + (if (color-specifier-p color) + (color-name color) + color)) + + + (defalias 'ps-mark-active-p 'region-active-p) + + + (defun ps-face-foreground-name (face) + (ps-xemacs-color-name (face-foreground face))) + + + (defun ps-face-background-name (face) + (ps-xemacs-color-name (face-background face))) + + + (defun ps-frame-parameter (param) + (frame-property nil param)) + + + ;; Return t if the device (which can be changed during an emacs session) + ;; can handle colors. + ;; XEmacs change: Need to check for emacs-major-version too. + (if (or (> emacs-major-version 19) + (and (= emacs-major-version 19) + (>= emacs-minor-version 12))) + ;; xemacs >= 19.12 + (defun ps-color-device () + (eq (device-class) 'color)) + ;; xemacs < 19.12 + (setq ps-print-color-p nil) + (defalias 'ps-color-device 'ignore)) + + + (defun ps-mapper (extent list) + (nconc list + (list (list (extent-start-position extent) 'push extent) + (list (extent-end-position extent) 'pull extent))) + nil) + + + (defun ps-extent-sorter (a b) + (< (extent-priority a) (extent-priority b))) + + + (defun ps-xemacs-face-kind-p (face kind kind-regex) + (let* ((frame-font (or (face-font-instance face) + (face-font-instance 'default))) + (kind-cons + (and frame-font + (assq kind + (font-instance-properties frame-font)))) + (kind-spec (cdr-safe kind-cons)) + (case-fold-search t)) + (and kind-spec (string-match kind-regex kind-spec)))) + + + ;; to avoid XEmacs compilation gripes + (defvar coding-system-for-write nil) + (defvar coding-system-for-read nil) + (defvar buffer-file-coding-system nil) + + + (and (fboundp 'find-coding-system) + (or (funcall 'find-coding-system 'raw-text-unix) + (funcall 'copy-coding-system 'no-conversion-unix 'raw-text-unix))) + + + (defun ps-color-values (x-color) + (let ((color (ps-xemacs-color-name x-color))) + (cond + ((fboundp 'x-color-values) + (funcall 'x-color-values color)) + ((and (fboundp 'color-instance-rgb-components) + (ps-color-device)) + (funcall 'color-instance-rgb-components + (if (color-instance-p x-color) + x-color + (make-color-instance color)))) + (t + (error "No available function to determine X color values"))))) + + + (defun ps-face-bold-p (face) + (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold") + (memq face ps-bold-faces))) ; Kludge-compatible + + + (defun ps-face-italic-p (face) + (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o") + (ps-xemacs-face-kind-p face 'SLANT "i\\|o") + (memq face ps-italic-faces))) ; Kludge-compatible + + + ;; XEmacs will have to make do with %s (princ) for floats. + (defvar ps-color-format "%s %s %s") + (defvar ps-float-format "%s ") + + + (defun ps-generate-postscript-with-faces1 (from to) + ;; Generate some PostScript. + (let ((face 'default) + (position to) + ;; XEmacs + ;; Build the list of extents... + (a (cons 'dummy nil)) + record type extent extent-list) + (map-extents 'ps-mapper nil from to a) + (setq a (sort (cdr a) 'car-less-than-car) + extent-list nil) + + ;; Loop through the extents... + (while a + (setq record (car a) + position (car record) + + record (cdr record) + type (car record) + + record (cdr record) + extent (car record)) + + ;; Plot up to this record. + ;; XEmacs 19.12: for some reason, we're getting into a + ;; situation in which some of the records have + ;; positions less than 'from'. Since we've narrowed + ;; the buffer, this'll generate errors. This is a hack, + ;; but don't call ps-plot-with-face unless from > point-min. + (and (>= from (point-min)) + (ps-plot-with-face from (min position (point-max)) face)) + + (cond + ((eq type 'push) + (and (extent-face extent) + (setq extent-list (sort (cons extent extent-list) + 'ps-extent-sorter)))) + + ((eq type 'pull) + (setq extent-list (sort (delq extent extent-list) + 'ps-extent-sorter)))) + + (setq face (if extent-list + (extent-face (car extent-list)) + 'default) + from position + a (cdr a))) + + (ps-plot-with-face from to face))) + + ) + (t ; emacs + ;; Do nothing + )) ; end cond featurep + + + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Emacs Definitions + + +(cond + ((featurep 'xemacs) ; xemacs + ;; Do nothing + ) + (t ; emacs + + + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ps-print + + (defvar mark-active nil) + + + (defun ps-mark-active-p () + mark-active) + + + (defun ps-face-foreground-name (face) + (face-foreground face nil t)) + + + (defun ps-face-background-name (face) + (face-background face nil t)) + + + (defun ps-frame-parameter (param) + (frame-parameter nil param)) + + + ;; Return t if the device (which can be changed during an emacs session) can + ;; handle colors. This function is not yet implemented for GNU emacs. + (defun ps-color-device () + (if (fboundp 'color-values) + (funcall 'color-values "Green") + t)) + + + (defun ps-color-values (x-color) + (cond + ((fboundp 'color-values) + (funcall 'color-values x-color)) + ((fboundp 'x-color-values) + (funcall 'x-color-values x-color)) + (t + (error "No available function to determine X color values")))) + + + (defun ps-face-bold-p (face) + (or (face-bold-p face) + (memq face ps-bold-faces))) + + + (defun ps-face-italic-p (face) + (or (face-italic-p face) + (memq face ps-italic-faces))) + + + ;; Emacs understands the %f format; we'll use it to limit color RGB values + ;; to three decimals to cut down some on the size of the PostScript output. + (defvar ps-color-format "%0.3f %0.3f %0.3f") + (defvar ps-float-format "%0.3f ") + + + (defun ps-generate-postscript-with-faces1 (from to) + ;; Generate some PostScript. + (let ((face 'default) + (position to) + ;; Emacs + (property-change from) + (overlay-change from) + (save-buffer-invisibility-spec buffer-invisibility-spec) + (buffer-invisibility-spec nil) + before-string after-string) + (while (< from to) + (and (< property-change to) ; Don't search for property change + ; unless previous search succeeded. + (setq property-change (next-property-change from nil to))) + (and (< overlay-change to) ; Don't search for overlay change + ; unless previous search succeeded. + (setq overlay-change (min (next-overlay-change from) + to))) + (setq position (min property-change overlay-change) + before-string nil + after-string nil) + ;; The code below is not quite correct, + ;; because a non-nil overlay invisible property + ;; which is inactive according to the current value + ;; of buffer-invisibility-spec nonetheless overrides + ;; a face text property. + (setq face + (cond ((let ((prop (get-text-property from 'invisible))) + ;; Decide whether this invisible property + ;; really makes the text invisible. + (if (eq save-buffer-invisibility-spec t) + (not (null prop)) + (or (memq prop save-buffer-invisibility-spec) + (assq prop save-buffer-invisibility-spec)))) + 'emacs--invisible--face) + ((get-text-property from 'face)) + (t 'default))) + (let ((overlays (overlays-at from)) + (face-priority -1)) ; text-property + (while (and overlays + (not (eq face 'emacs--invisible--face))) + (let* ((overlay (car overlays)) + (overlay-invisible + (overlay-get overlay 'invisible)) + (overlay-priority + (or (overlay-get overlay 'priority) 0))) + (and (> overlay-priority face-priority) + (setq before-string + (or (overlay-get overlay 'before-string) + before-string) + after-string + (or (and (<= (overlay-end overlay) position) + (overlay-get overlay 'after-string)) + after-string) + face-priority overlay-priority + face + (cond + ((if (eq save-buffer-invisibility-spec t) + (not (null overlay-invisible)) + (or (memq overlay-invisible + save-buffer-invisibility-spec) + (assq overlay-invisible + save-buffer-invisibility-spec))) + 'emacs--invisible--face) + ((overlay-get overlay 'face)) + (t face) + )))) + (setq overlays (cdr overlays)))) + ;; Plot up to this record. + (and before-string + (ps-plot-string before-string)) + (ps-plot-with-face from position face) + (and after-string + (ps-plot-string after-string)) + (setq from position)) + (ps-plot-with-face from to face))) + + )) ; end cond featurep + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(provide 'ps-def) + +;;; arch-tag: fb06a585-1112-4206-885d-a57d95d50579 +;;; ps-def.el ends here diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el index 5223e751d6c..04eb19a6bca 100644 --- a/lisp/ps-mule.el +++ b/lisp/ps-mule.el @@ -91,69 +91,7 @@ ;;; Code: (eval-and-compile - (require 'ps-print) - - ;; to avoid XEmacs compilation gripes - (defvar leading-code-private-22 157) - (or (fboundp 'charset-bytes) - (defun charset-bytes (charset) 1)) ; ascii - (or (fboundp 'charset-dimension) - (defun charset-dimension (charset) 1)) ; ascii - (or (fboundp 'charset-id) - (defun charset-id (charset) 0)) ; ascii - (or (fboundp 'charset-width) - (defun charset-width (charset) 1)) ; ascii - (or (fboundp 'find-charset-region) - (defun find-charset-region (beg end &optional table) - (list 'ascii))) - (or (fboundp 'char-width) - (defun char-width (char) 1)) ; ascii - (or (fboundp 'chars-in-region) - (defun chars-in-region (beg end) - (- (max beg end) (min beg end)))) - (or (fboundp 'forward-point) - (defun forward-point (arg) - (save-excursion - (let ((count (abs arg)) - (step (if (zerop arg) - 0 - (/ arg arg)))) - (while (and (> count 0) - (< (point-min) (point)) (< (point) (point-max))) - (forward-char step) - (setq count (1- count))) - (+ (point) (* count step)))))) - (or (fboundp 'decompose-composite-char) - (defun decompose-composite-char (char &optional type - with-composition-rule) - nil)) - (or (fboundp 'encode-coding-string) - (defun encode-coding-string (string coding-system &optional nocopy) - (if nocopy - string - (copy-sequence string)))) - (or (fboundp 'coding-system-p) - (defun coding-system-p (obj) nil)) - (or (fboundp 'ccl-execute-on-string) - (defun ccl-execute-on-string (ccl-prog status str - &optional contin unibyte-p) - str)) - (or (fboundp 'define-ccl-program) - (defmacro define-ccl-program (name ccl-program &optional doc) - `(defconst ,name nil ,doc))) - (or (fboundp 'multibyte-string-p) - (defun multibyte-string-p (str) - (let ((len (length str)) - (i 0) - multibyte) - (while (and (< i len) (not (setq multibyte (> (aref str i) 255)))) - (setq i (1+ i))) - multibyte))) - (or (fboundp 'string-make-multibyte) - (defalias 'string-make-multibyte 'copy-sequence)) - (or (fboundp 'encode-char) - (defun encode-char (ch ccs) - ch))) + (require 'ps-print)) ;;;###autoload diff --git a/lisp/ps-print.el b/lisp/ps-print.el index 1003015aee0..e50342dac91 100644 --- a/lisp/ps-print.el +++ b/lisp/ps-print.el @@ -10,11 +10,11 @@ ;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) ;; Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Keywords: wp, print, PostScript -;; Version: 7.1 +;; Version: 7.2 ;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre -(defconst ps-print-version "7.1" - "ps-print.el, v 7.1 <2007/01/21 vinicius> +(defconst ps-print-version "7.2" + "ps-print.el, v 7.2 <2007/01/19 vinicius> Vinicius's last change version -- this file may have been edited as part of Emacs without changes to the version number. When reporting bugs, please also @@ -1445,6 +1445,7 @@ Please send all bug fixes and enhancements to (require 'lpr) + (or (featurep 'lisp-float-type) (error "`ps-print' requires floating point support")) @@ -1463,82 +1464,14 @@ Please send all bug fixes and enhancements to 'emacs)))) -;; GNU Emacs -(or (fboundp 'line-beginning-position) - (defun line-beginning-position (&optional n) - (save-excursion - (and n (/= n 1) (forward-line (1- n))) - (beginning-of-line) - (point)))) - - -;; to avoid compilation gripes - -;; XEmacs -(defalias 'ps-x-color-instance-p 'color-instance-p) -(defalias 'ps-x-color-instance-rgb-components 'color-instance-rgb-components) -(defalias 'ps-x-color-name 'color-name) -(defalias 'ps-x-color-specifier-p 'color-specifier-p) -(defalias 'ps-x-copy-coding-system 'copy-coding-system) -(defalias 'ps-x-device-class 'device-class) -(defalias 'ps-x-extent-end-position 'extent-end-position) -(defalias 'ps-x-extent-face 'extent-face) -(defalias 'ps-x-extent-priority 'extent-priority) -(defalias 'ps-x-extent-start-position 'extent-start-position) -(defalias 'ps-x-face-font-instance 'face-font-instance) -(defalias 'ps-x-find-coding-system 'find-coding-system) -(defalias 'ps-x-font-instance-properties 'font-instance-properties) -(defalias 'ps-x-make-color-instance 'make-color-instance) -(defalias 'ps-x-map-extents 'map-extents) -(defalias 'ps-x-frame-property 'frame-property) - -;; GNU Emacs -(defalias 'ps-e-face-bold-p 'face-bold-p) -(defalias 'ps-e-face-italic-p 'face-italic-p) -(defalias 'ps-e-next-overlay-change 'next-overlay-change) -(defalias 'ps-e-overlays-at 'overlays-at) -(defalias 'ps-e-overlay-get 'overlay-get) -(defalias 'ps-e-overlay-end 'overlay-end) -(defalias 'ps-e-x-color-values 'x-color-values) -(defalias 'ps-e-color-values 'color-values) -(defalias 'ps-e-frame-parameter 'frame-parameter) -(if (fboundp 'find-composition) - (defalias 'ps-e-find-composition 'find-composition) - (defalias 'ps-e-find-composition 'ignore)) - - (defconst ps-windows-system (memq system-type '(emx win32 w32 mswindows ms-dos windows-nt))) (defconst ps-lp-system (memq system-type '(usg-unix-v dgux hpux irix))) -(defun ps-xemacs-color-name (color) - (if (ps-x-color-specifier-p color) - (ps-x-color-name color) - color)) - - -(cond ((featurep 'xemacs) ; xemacs - (defalias 'ps-mark-active-p 'region-active-p) - (defun ps-face-foreground-name (face) - (ps-xemacs-color-name (face-foreground face))) - (defun ps-face-background-name (face) - (ps-xemacs-color-name (face-background face))) - (defun ps-frame-parameter (param) - (ps-x-frame-property nil param)) - ) - (t ; emacs 23 or higher - (defvar mark-active nil) - (defun ps-mark-active-p () - mark-active) - (defun ps-face-foreground-name (face) - (face-foreground face nil t)) - (defun ps-face-background-name (face) - (face-background face nil t)) - (defun ps-frame-parameter (param) - (ps-e-frame-parameter nil param)) - )) +;; Load XEmacs/Emacs definitions +(eval-and-compile (require 'ps-def)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -3344,9 +3277,9 @@ It's like the very first character of buffer (or region) is ^L (\\014)." (defcustom ps-postscript-code-directory (or (if (featurep 'xemacs) (cond ((fboundp 'locate-data-directory) ; xemacs - (locate-data-directory "ps-print")) + (funcall 'locate-data-directory "ps-print")) ((boundp 'data-directory) ; xemacs - data-directory) + (symbol-value 'data-directory)) (t ; don't know what to do nil)) data-directory) ; emacs @@ -3838,107 +3771,6 @@ It can be retrieved with `(ps-get ALIST-SYM KEY)'." (format-time-string "%T")) -(and (featurep 'xemacs) - ;; XEmacs change: Need to check for emacs-major-version too. - (or (< emacs-major-version 19) - (and (= emacs-major-version 19) (< emacs-minor-version 12))) - (setq ps-print-color-p nil)) - - -;; Return t if the device (which can be changed during an emacs session) -;; can handle colors. -;; This function is not yet implemented for GNU emacs. -(cond ((and (featurep 'xemacs) - ;; XEmacs change: Need to check for emacs-major-version too. - (or (> emacs-major-version 19) - (and (= emacs-major-version 19) - (>= emacs-minor-version 12)))) ; xemacs >= 19.12 - (defun ps-color-device () - (eq (ps-x-device-class) 'color))) - - (t ; emacs - (defun ps-color-device () - (if (fboundp 'color-values) - (ps-e-color-values "Green") - t)))) - - -(defun ps-mapper (extent list) - (nconc list - (list (list (ps-x-extent-start-position extent) 'push extent) - (list (ps-x-extent-end-position extent) 'pull extent))) - nil) - -(defun ps-extent-sorter (a b) - (< (ps-x-extent-priority a) (ps-x-extent-priority b))) - -(defun ps-xemacs-face-kind-p (face kind kind-regex) - (let* ((frame-font (or (ps-x-face-font-instance face) - (ps-x-face-font-instance 'default))) - (kind-cons - (and frame-font - (assq kind - (ps-x-font-instance-properties frame-font)))) - (kind-spec (cdr-safe kind-cons)) - (case-fold-search t)) - (and kind-spec (string-match kind-regex kind-spec)))) - -(cond ((featurep 'xemacs) ; xemacs - - ;; to avoid XEmacs compilation gripes - (defvar coding-system-for-write nil) - (defvar coding-system-for-read nil) - (defvar buffer-file-coding-system nil) - - (and (fboundp 'find-coding-system) - (or (ps-x-find-coding-system 'raw-text-unix) - (ps-x-copy-coding-system 'no-conversion-unix 'raw-text-unix))) - - (defun ps-color-values (x-color) - (let ((color (ps-xemacs-color-name x-color))) - (cond - ((fboundp 'x-color-values) - (ps-e-x-color-values color)) - ((and (fboundp 'color-instance-rgb-components) - (ps-color-device)) - (ps-x-color-instance-rgb-components - (if (ps-x-color-instance-p x-color) - x-color - (ps-x-make-color-instance color)))) - (t - (error "No available function to determine X color values"))))) - - (defun ps-face-bold-p (face) - (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold") - (memq face ps-bold-faces))) ; Kludge-compatible - - (defun ps-face-italic-p (face) - (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o") - (ps-xemacs-face-kind-p face 'SLANT "i\\|o") - (memq face ps-italic-faces))) ; Kludge-compatible - ) - - (t ; emacs - - (defun ps-color-values (x-color) - (cond - ((fboundp 'color-values) - (ps-e-color-values x-color)) - ((fboundp 'x-color-values) - (ps-e-x-color-values x-color)) - (t - (error "No available function to determine X color values")))) - - (defun ps-face-bold-p (face) - (or (ps-e-face-bold-p face) - (memq face ps-bold-faces))) - - (defun ps-face-italic-p (face) - (or (ps-e-face-italic-p face) - (memq face ps-italic-faces))) - )) - - (defvar ps-print-color-scale 1.0) (defun ps-color-scale (color) @@ -4018,15 +3850,6 @@ Note: No major/minor-mode is activated and no local variables are evaluated for (defvar ps-razchunk 0) (defvar ps-color-p nil) -(defvar ps-color-format - (if (featurep 'xemacs) - ;; XEmacs will have to make do with %s (princ) for floats. - "%s %s %s" - - ;; Emacs understands the %f format; we'll use it to limit color RGB - ;; values to three decimals to cut down some on the size of the - ;; PostScript output. - "%0.3f %0.3f %0.3f")) ;; These values determine how much print-height to deduct when headers/footers ;; are turned on. This is a pretty clumsy way of handling it, but it'll do for @@ -4906,15 +4729,6 @@ page-height == ((floor print-height ((th + ls) * zh)) * ((th + ls) * zh)) - th (vector 0 0 0 0))))) -;; Emacs understands the %f format; we'll use it to limit color RGB values -;; to three decimals to cut down some on the size of the PostScript output. -;; XEmacs will have to make do with %s (princ) for floats. - -(defvar ps-float-format (if (featurep 'xemacs) - "%s " ; xemacs - "%0.3f ")) ; emacs - - (defun ps-float-format (value &optional default) (let ((literal (or value default))) (cond ((null literal) @@ -6442,125 +6256,7 @@ If FACE is not a valid face name, it is used default face." (save-restriction (narrow-to-region from to) (ps-print-ensure-fontified from to) - (let ((face 'default) - (position to)) - (cond - ((featurep 'xemacs) ; xemacs - ;; Build the list of extents... - (let ((a (cons 'dummy nil)) - record type extent extent-list) - (ps-x-map-extents 'ps-mapper nil from to a) - (setq a (sort (cdr a) 'car-less-than-car) - extent-list nil) - - ;; Loop through the extents... - (while a - (setq record (car a) - position (car record) - - record (cdr record) - type (car record) - - record (cdr record) - extent (car record)) - - ;; Plot up to this record. - ;; XEmacs 19.12: for some reason, we're getting into a - ;; situation in which some of the records have - ;; positions less than 'from'. Since we've narrowed - ;; the buffer, this'll generate errors. This is a hack, - ;; but don't call ps-plot-with-face unless from > point-min. - (and (>= from (point-min)) - (ps-plot-with-face from (min position (point-max)) face)) - - (cond - ((eq type 'push) - (and (ps-x-extent-face extent) - (setq extent-list (sort (cons extent extent-list) - 'ps-extent-sorter)))) - - ((eq type 'pull) - (setq extent-list (sort (delq extent extent-list) - 'ps-extent-sorter)))) - - (setq face (if extent-list - (ps-x-extent-face (car extent-list)) - 'default) - from position - a (cdr a))))) - - (t ; emacs - (let ((property-change from) - (overlay-change from) - (save-buffer-invisibility-spec buffer-invisibility-spec) - (buffer-invisibility-spec nil) - before-string after-string) - (while (< from to) - (and (< property-change to) ; Don't search for property change - ; unless previous search succeeded. - (setq property-change (next-property-change from nil to))) - (and (< overlay-change to) ; Don't search for overlay change - ; unless previous search succeeded. - (setq overlay-change (min (ps-e-next-overlay-change from) - to))) - (setq position (min property-change overlay-change) - before-string nil - after-string nil) - ;; The code below is not quite correct, - ;; because a non-nil overlay invisible property - ;; which is inactive according to the current value - ;; of buffer-invisibility-spec nonetheless overrides - ;; a face text property. - (setq face - (cond ((let ((prop (get-text-property from 'invisible))) - ;; Decide whether this invisible property - ;; really makes the text invisible. - (if (eq save-buffer-invisibility-spec t) - (not (null prop)) - (or (memq prop save-buffer-invisibility-spec) - (assq prop save-buffer-invisibility-spec)))) - 'emacs--invisible--face) - ((get-text-property from 'face)) - (t 'default))) - (let ((overlays (ps-e-overlays-at from)) - (face-priority -1)) ; text-property - (while (and overlays - (not (eq face 'emacs--invisible--face))) - (let* ((overlay (car overlays)) - (overlay-invisible - (ps-e-overlay-get overlay 'invisible)) - (overlay-priority - (or (ps-e-overlay-get overlay 'priority) 0))) - (and (> overlay-priority face-priority) - (setq before-string - (or (ps-e-overlay-get overlay 'before-string) - before-string) - after-string - (or (and (<= (ps-e-overlay-end overlay) position) - (ps-e-overlay-get overlay 'after-string)) - after-string) - face-priority overlay-priority - face - (cond - ((if (eq save-buffer-invisibility-spec t) - (not (null overlay-invisible)) - (or (memq overlay-invisible - save-buffer-invisibility-spec) - (assq overlay-invisible - save-buffer-invisibility-spec))) - 'emacs--invisible--face) - ((ps-e-overlay-get overlay 'face)) - (t face) - )))) - (setq overlays (cdr overlays)))) - ;; Plot up to this record. - (and before-string - (ps-plot-string before-string)) - (ps-plot-with-face from position face) - (and after-string - (ps-plot-string after-string)) - (setq from position))))) - (ps-plot-with-face from to face)))) + (ps-generate-postscript-with-faces1 from to))) (defun ps-generate-postscript (from to) (ps-plot-region from to 0 nil)) @@ -6756,209 +6452,6 @@ If FACE is not a valid face name, it is used default face." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Sample Setup Code: - - -;; This stuff is for anybody that's brave enough to look this far, -;; and able to figure out how to use it. It isn't really part of -;; ps-print, but I'll leave it here in hopes it might be useful: - -;; WARNING!!! The following code is *sample* code only. -;; Don't use it unless you understand what it does! - -(defmacro ps-prsc () - `(if (featurep 'xemacs) 'f22 [f22])) -(defmacro ps-c-prsc () - `(if (featurep 'xemacs) '(control f22) [C-f22])) -(defmacro ps-s-prsc () - `(if (featurep 'xemacs) '(shift f22) [S-f22])) - -;; A hook to bind to `rmail-mode-hook' to locally bind prsc and set the -;; `ps-left-headers' specially for mail messages. -(defun ps-rmail-mode-hook () - (local-set-key (ps-prsc) 'ps-rmail-print-message-from-summary) - (setq ps-header-lines 3 - ps-left-header - ;; The left headers will display the message's subject, its - ;; author, and the name of the folder it was in. - '(ps-article-subject ps-article-author buffer-name))) - -;; See `ps-gnus-print-article-from-summary'. This function does the -;; same thing for rmail. -(defun ps-rmail-print-message-from-summary () - (interactive) - (ps-print-message-from-summary 'rmail-summary-buffer "RMAIL")) - -;; Used in `ps-rmail-print-article-from-summary', -;; `ps-gnus-print-article-from-summary' and `ps-vm-print-message-from-summary'. -(defun ps-print-message-from-summary (summary-buffer summary-default) - (let ((ps-buf (or (and (boundp summary-buffer) - (symbol-value summary-buffer)) - summary-default))) - (and (get-buffer ps-buf) - (save-excursion - (set-buffer ps-buf) - (ps-spool-buffer-with-faces))))) - -;; Look in an article or mail message for the Subject: line. To be -;; placed in `ps-left-headers'. -(defun ps-article-subject () - (save-excursion - (goto-char (point-min)) - (if (re-search-forward "^Subject:[ \t]+\\(.*\\)$" nil t) - (buffer-substring (match-beginning 1) (match-end 1)) - "Subject ???"))) - -;; Look in an article or mail message for the From: line. Sorta-kinda -;; understands RFC-822 addresses and can pull the real name out where -;; it's provided. To be placed in `ps-left-headers'. -(defun ps-article-author () - (save-excursion - (goto-char (point-min)) - (if (re-search-forward "^From:[ \t]+\\(.*\\)$" nil t) - (let ((fromstring (buffer-substring (match-beginning 1) (match-end 1)))) - (cond - - ;; Try first to match addresses that look like - ;; thompson@wg2.waii.com (Jim Thompson) - ((string-match ".*[ \t]+(\\(.*\\))" fromstring) - (substring fromstring (match-beginning 1) (match-end 1))) - - ;; Next try to match addresses that look like - ;; Jim Thompson <thompson@wg2.waii.com> or - ;; "Jim Thompson" <thompson@wg2.waii.com> - ((string-match "\\(\"?\\)\\(.*\\)\\1[ \t]+<.*>" fromstring) - (substring fromstring (match-beginning 2) (match-end 2))) - - ;; Couldn't find a real name -- show the address instead. - (t fromstring))) - "From ???"))) - -;; A hook to bind to `gnus-article-prepare-hook'. This will set the -;; `ps-left-headers' specially for gnus articles. Unfortunately, -;; `gnus-article-mode-hook' is called only once, the first time the *Article* -;; buffer enters that mode, so it would only work for the first time -;; we ran gnus. The second time, this hook wouldn't get set up. The -;; only alternative is `gnus-article-prepare-hook'. -(defun ps-gnus-article-prepare-hook () - (setq ps-header-lines 3 - ps-left-header - ;; The left headers will display the article's subject, its - ;; author, and the newsgroup it was in. - '(ps-article-subject ps-article-author gnus-newsgroup-name))) - -;; A hook to bind to `vm-mode-hook' to locally bind prsc and set the -;; `ps-left-headers' specially for mail messages. -(defun ps-vm-mode-hook () - (local-set-key (ps-prsc) 'ps-vm-print-message-from-summary) - (setq ps-header-lines 3 - ps-left-header - ;; The left headers will display the message's subject, its - ;; author, and the name of the folder it was in. - '(ps-article-subject ps-article-author buffer-name))) - -;; Every now and then I forget to switch from the *Summary* buffer to -;; the *Article* before hitting prsc, and a nicely formatted list of -;; article subjects shows up at the printer. This function, bound to -;; prsc for the gnus *Summary* buffer means I don't have to switch -;; buffers first. -;; sb: Updated for Gnus 5. -(defun ps-gnus-print-article-from-summary () - (interactive) - (ps-print-message-from-summary 'gnus-article-buffer "*Article*")) - -;; See `ps-gnus-print-article-from-summary'. This function does the -;; same thing for vm. -(defun ps-vm-print-message-from-summary () - (interactive) - (ps-print-message-from-summary 'vm-mail-buffer "")) - -;; A hook to bind to bind to `gnus-summary-setup-buffer' to locally bind -;; prsc. -(defun ps-gnus-summary-setup () - (local-set-key (ps-prsc) 'ps-gnus-print-article-from-summary)) - -;; Look in an article or mail message for the Subject: line. To be -;; placed in `ps-left-headers'. -(defun ps-info-file () - (save-excursion - (goto-char (point-min)) - (if (re-search-forward "File:[ \t]+\\([^, \t\n]*\\)" nil t) - (buffer-substring (match-beginning 1) (match-end 1)) - "File ???"))) - -;; Look in an article or mail message for the Subject: line. To be -;; placed in `ps-left-headers'. -(defun ps-info-node () - (save-excursion - (goto-char (point-min)) - (if (re-search-forward "Node:[ \t]+\\([^,\t\n]*\\)" nil t) - (buffer-substring (match-beginning 1) (match-end 1)) - "Node ???"))) - -(defun ps-info-mode-hook () - (setq ps-left-header - ;; The left headers will display the node name and file name. - '(ps-info-node ps-info-file))) - -;; WARNING! The following function is a *sample* only, and is *not* -;; meant to be used as a whole unless you understand what the effects -;; will be! (In fact, this is a copy of Jim's setup for ps-print -- -;; I'd be very surprised if it was useful to *anybody*, without -;; modification.) - -(defun ps-jts-ps-setup () - (global-set-key (ps-prsc) 'ps-spool-buffer-with-faces) ;f22 is prsc - (global-set-key (ps-s-prsc) 'ps-spool-region-with-faces) - (global-set-key (ps-c-prsc) 'ps-despool) - (add-hook 'gnus-article-prepare-hook 'ps-gnus-article-prepare-hook) - (add-hook 'gnus-summary-mode-hook 'ps-gnus-summary-setup) - (add-hook 'vm-mode-hook 'ps-vm-mode-hook) - (add-hook 'vm-mode-hooks 'ps-vm-mode-hook) - (add-hook 'Info-mode-hook 'ps-info-mode-hook) - (setq ps-spool-duplex t - ps-print-color-p nil - ps-lpr-command "lpr" - ps-lpr-switches '("-Jjct,duplex_long")) - 'ps-jts-ps-setup) - -;; WARNING! The following function is a *sample* only, and is *not* -;; meant to be used as a whole unless it corresponds to your needs. -;; (In fact, this is a copy of Jack's setup for ps-print -- -;; I would not be that surprised if it was useful to *anybody*, -;; without modification.) - -(defun ps-jack-setup () - (setq ps-print-color-p nil - ps-lpr-command "lpr" - ps-lpr-switches nil - - ps-paper-type 'a4 - ps-landscape-mode t - ps-number-of-columns 2 - - ps-left-margin (/ (* 72 1.0) 2.54) ; 1.0 cm - ps-right-margin (/ (* 72 1.0) 2.54) ; 1.0 cm - ps-inter-column (/ (* 72 1.0) 2.54) ; 1.0 cm - ps-bottom-margin (/ (* 72 1.5) 2.54) ; 1.5 cm - ps-top-margin (/ (* 72 1.5) 2.54) ; 1.5 cm - ps-header-offset (/ (* 72 1.0) 2.54) ; 1.0 cm - ps-header-line-pad .15 - ps-print-header t - ps-print-header-frame t - ps-header-lines 2 - ps-show-n-of-n t - ps-spool-duplex nil - - ps-font-family 'Courier - ps-font-size 5.5 - ps-header-font-family 'Helvetica - ps-header-font-size 6 - ps-header-title-font-size 8) - 'ps-jack-setup) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; To make this file smaller, some commands go in a separate file. ;; But autoload them here to make the separation invisible. diff --git a/lisp/ps-samp.el b/lisp/ps-samp.el new file mode 100644 index 00000000000..60f2c2b2d34 --- /dev/null +++ b/lisp/ps-samp.el @@ -0,0 +1,249 @@ +;;; ps-samp.el --- ps-print sample setup code + +;; Copyright (C) 2007 Free Software Foundation, Inc. + +;; Author: Jim Thompson (was <thompson@wg2.waii.com>) +;; Jacques Duthen (was <duthen@cegelec-red.fr>) +;; Vinicius Jose Latorre <viniciusjl@ig.com.br> +;; Kenichi Handa <handa@m17n.org> (multi-byte characters) +;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) +;; Vinicius Jose Latorre <viniciusjl@ig.com.br> +;; Keywords: wp, print, PostScript +;; Version: 7.2 +;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre + +;; This file is part of GNU Emacs. + +;; 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 +;; version. + +;; GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY +;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +;; details. + +;; You should have received a copy of the GNU General Public License along with +;; GNU Emacs; see the file COPYING. If not, write to the Free Software +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; See ps-print.el for documentation. + +;;; Code: + + +(eval-and-compile (require 'ps-print)) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Sample Setup Code: + + +;; This stuff is for anybody that's brave enough to look this far, +;; and able to figure out how to use it. It isn't really part of +;; ps-print, but I'll leave it here in hopes it might be useful: + +;; WARNING!!! The following code is *sample* code only. +;; Don't use it unless you understand what it does! + +(defmacro ps-prsc () + `(if (featurep 'xemacs) 'f22 [f22])) +(defmacro ps-c-prsc () + `(if (featurep 'xemacs) '(control f22) [C-f22])) +(defmacro ps-s-prsc () + `(if (featurep 'xemacs) '(shift f22) [S-f22])) + +;; A hook to bind to `rmail-mode-hook' to locally bind prsc and set the +;; `ps-left-headers' specially for mail messages. +(defun ps-rmail-mode-hook () + (local-set-key (ps-prsc) 'ps-rmail-print-message-from-summary) + (setq ps-header-lines 3 + ps-left-header + ;; The left headers will display the message's subject, its + ;; author, and the name of the folder it was in. + '(ps-article-subject ps-article-author buffer-name))) + +;; See `ps-gnus-print-article-from-summary'. This function does the +;; same thing for rmail. +(defun ps-rmail-print-message-from-summary () + (interactive) + (ps-print-message-from-summary 'rmail-summary-buffer "RMAIL")) + +;; Used in `ps-rmail-print-article-from-summary', +;; `ps-gnus-print-article-from-summary' and `ps-vm-print-message-from-summary'. +(defun ps-print-message-from-summary (summary-buffer summary-default) + (let ((ps-buf (or (and (boundp summary-buffer) + (symbol-value summary-buffer)) + summary-default))) + (and (get-buffer ps-buf) + (save-excursion + (set-buffer ps-buf) + (ps-spool-buffer-with-faces))))) + +;; Look in an article or mail message for the Subject: line. To be +;; placed in `ps-left-headers'. +(defun ps-article-subject () + (save-excursion + (goto-char (point-min)) + (if (re-search-forward "^Subject:[ \t]+\\(.*\\)$" nil t) + (buffer-substring (match-beginning 1) (match-end 1)) + "Subject ???"))) + +;; Look in an article or mail message for the From: line. Sorta-kinda +;; understands RFC-822 addresses and can pull the real name out where +;; it's provided. To be placed in `ps-left-headers'. +(defun ps-article-author () + (save-excursion + (goto-char (point-min)) + (if (re-search-forward "^From:[ \t]+\\(.*\\)$" nil t) + (let ((fromstring (buffer-substring (match-beginning 1) (match-end 1)))) + (cond + + ;; Try first to match addresses that look like + ;; thompson@wg2.waii.com (Jim Thompson) + ((string-match ".*[ \t]+(\\(.*\\))" fromstring) + (substring fromstring (match-beginning 1) (match-end 1))) + + ;; Next try to match addresses that look like + ;; Jim Thompson <thompson@wg2.waii.com> or + ;; "Jim Thompson" <thompson@wg2.waii.com> + ((string-match "\\(\"?\\)\\(.*\\)\\1[ \t]+<.*>" fromstring) + (substring fromstring (match-beginning 2) (match-end 2))) + + ;; Couldn't find a real name -- show the address instead. + (t fromstring))) + "From ???"))) + +;; A hook to bind to `gnus-article-prepare-hook'. This will set the +;; `ps-left-headers' specially for gnus articles. Unfortunately, +;; `gnus-article-mode-hook' is called only once, the first time the *Article* +;; buffer enters that mode, so it would only work for the first time +;; we ran gnus. The second time, this hook wouldn't get set up. The +;; only alternative is `gnus-article-prepare-hook'. +(defun ps-gnus-article-prepare-hook () + (setq ps-header-lines 3 + ps-left-header + ;; The left headers will display the article's subject, its + ;; author, and the newsgroup it was in. + '(ps-article-subject ps-article-author gnus-newsgroup-name))) + +;; A hook to bind to `vm-mode-hook' to locally bind prsc and set the +;; `ps-left-headers' specially for mail messages. +(defun ps-vm-mode-hook () + (local-set-key (ps-prsc) 'ps-vm-print-message-from-summary) + (setq ps-header-lines 3 + ps-left-header + ;; The left headers will display the message's subject, its + ;; author, and the name of the folder it was in. + '(ps-article-subject ps-article-author buffer-name))) + +;; Every now and then I forget to switch from the *Summary* buffer to +;; the *Article* before hitting prsc, and a nicely formatted list of +;; article subjects shows up at the printer. This function, bound to +;; prsc for the gnus *Summary* buffer means I don't have to switch +;; buffers first. +;; sb: Updated for Gnus 5. +(defun ps-gnus-print-article-from-summary () + (interactive) + (ps-print-message-from-summary 'gnus-article-buffer "*Article*")) + +;; See `ps-gnus-print-article-from-summary'. This function does the +;; same thing for vm. +(defun ps-vm-print-message-from-summary () + (interactive) + (ps-print-message-from-summary 'vm-mail-buffer "")) + +;; A hook to bind to bind to `gnus-summary-setup-buffer' to locally bind +;; prsc. +(defun ps-gnus-summary-setup () + (local-set-key (ps-prsc) 'ps-gnus-print-article-from-summary)) + +;; Look in an article or mail message for the Subject: line. To be +;; placed in `ps-left-headers'. +(defun ps-info-file () + (save-excursion + (goto-char (point-min)) + (if (re-search-forward "File:[ \t]+\\([^, \t\n]*\\)" nil t) + (buffer-substring (match-beginning 1) (match-end 1)) + "File ???"))) + +;; Look in an article or mail message for the Subject: line. To be +;; placed in `ps-left-headers'. +(defun ps-info-node () + (save-excursion + (goto-char (point-min)) + (if (re-search-forward "Node:[ \t]+\\([^,\t\n]*\\)" nil t) + (buffer-substring (match-beginning 1) (match-end 1)) + "Node ???"))) + +(defun ps-info-mode-hook () + (setq ps-left-header + ;; The left headers will display the node name and file name. + '(ps-info-node ps-info-file))) + +;; WARNING! The following function is a *sample* only, and is *not* +;; meant to be used as a whole unless you understand what the effects +;; will be! (In fact, this is a copy of Jim's setup for ps-print -- +;; I'd be very surprised if it was useful to *anybody*, without +;; modification.) + +(defun ps-jts-ps-setup () + (global-set-key (ps-prsc) 'ps-spool-buffer-with-faces) ;f22 is prsc + (global-set-key (ps-s-prsc) 'ps-spool-region-with-faces) + (global-set-key (ps-c-prsc) 'ps-despool) + (add-hook 'gnus-article-prepare-hook 'ps-gnus-article-prepare-hook) + (add-hook 'gnus-summary-mode-hook 'ps-gnus-summary-setup) + (add-hook 'vm-mode-hook 'ps-vm-mode-hook) + (add-hook 'vm-mode-hooks 'ps-vm-mode-hook) + (add-hook 'Info-mode-hook 'ps-info-mode-hook) + (setq ps-spool-duplex t + ps-print-color-p nil + ps-lpr-command "lpr" + ps-lpr-switches '("-Jjct,duplex_long")) + 'ps-jts-ps-setup) + +;; WARNING! The following function is a *sample* only, and is *not* +;; meant to be used as a whole unless it corresponds to your needs. +;; (In fact, this is a copy of Jack's setup for ps-print -- +;; I would not be that surprised if it was useful to *anybody*, +;; without modification.) + +(defun ps-jack-setup () + (setq ps-print-color-p nil + ps-lpr-command "lpr" + ps-lpr-switches nil + + ps-paper-type 'a4 + ps-landscape-mode t + ps-number-of-columns 2 + + ps-left-margin (/ (* 72 1.0) 2.54) ; 1.0 cm + ps-right-margin (/ (* 72 1.0) 2.54) ; 1.0 cm + ps-inter-column (/ (* 72 1.0) 2.54) ; 1.0 cm + ps-bottom-margin (/ (* 72 1.5) 2.54) ; 1.5 cm + ps-top-margin (/ (* 72 1.5) 2.54) ; 1.5 cm + ps-header-offset (/ (* 72 1.0) 2.54) ; 1.0 cm + ps-header-line-pad .15 + ps-print-header t + ps-print-header-frame t + ps-header-lines 2 + ps-show-n-of-n t + ps-spool-duplex nil + + ps-font-family 'Courier + ps-font-size 5.5 + ps-header-font-family 'Helvetica + ps-header-font-size 6 + ps-header-title-font-size 8) + 'ps-jack-setup) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(provide 'ps-samp) + +;;; arch-tag: fb06a585-1112-4206-885d-a57d95d50579 +;;; ps-samp.el ends here |