;;;; -*- mode:emacs-lisp;coding:utf-8 -*- ;;;;**************************************************************************** ;;;;FILE: pjb-computer-paper.el ;;;;LANGUAGE: emacs lisp ;;;;SYSTEM: POSIX ;;;;USER-INTERFACE: NONE ;;;;DESCRIPTION ;;;; ;;;; XXX ;;;; ;;;;AUTHORS ;;;; <PJB> Pascal Bourguignon <spam@thalassa.informatimago.com> ;;;;MODIFICATIONS ;;;; 2004-01-31 <PJB> Created. ;;;;BUGS ;;;;LEGAL ;;;; GPL ;;;; ;;;; Copyright Pascal Bourguignon 2004 - 2011 ;;;; ;;;; This program 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 of the License, or (at your option) any later version. ;;;; ;;;; This program 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 this program; if not, write to the Free ;;;; Software Foundation, Inc., 59 Temple Place, Suite 330, ;;;; Boston, MA 02111-1307 USA ;;;;**************************************************************************** (require 'pjb-cl) ;; (require 'make-overlay) (defconst +computer-paper-colors+ '("azure" "PaleTurquoise" "LightCyan1" "LightBlue" "LightCyan" "PowderBlue")) (defun delete-all-overlays () (interactive) (mapc (lambda (item) (if (listp item) (mapc (function delete-overlay) item) (delete-overlay item))) (overlay-lists))) (defun put-computer-paper-overlay (modulo block) (delete-all-overlays) (goto-char (point-min)) (let ((backf (make-array (list (length +computer-paper-colors+)) :initial-contents (mapcar (lambda (color) (let* ((facesym (intern (concatenate 'string color "-face"))) (face (make-face facesym))) (copy-face 'default face) (set-face-foreground face "black") (set-face-background face color) face)) +computer-paper-colors+))) (line 0)) (while (< (point) (point-max)) (let ((extent (make-overlay (progn (beginning-of-line) (point)) (progn (forward-line block) (beginning-of-line) (point))))) (overlay-put extent 'evaporate t) (overlay-put extent 'face (aref backf (mod line modulo))) (incf line) )))) (defun computer-paper () (interactive) (let (modulo block) (cond ((integerp current-prefix-arg) (setf modulo (min current-prefix-arg (length +computer-paper-colors+)) block 1)) ((null current-prefix-arg) (setf modulo (min 2 (length +computer-paper-colors+)) block 1)) ((consp current-prefix-arg) (setf modulo (min (read-minibuffer "Modulo: " "2") (length +computer-paper-colors+)) block (read-minibuffer "Block: " "1"))) (t (error "Invalid prefix %S" current-prefix-arg))) (assert (<= 1 block)) (assert (and (<= 2 modulo) (<= modulo (length +computer-paper-colors+)))) (put-computer-paper-overlay modulo block))) ;;;; THE END ;;;;