view lisp/gnus-scomo.el @ 23894:f96c37cbdeef

New file. Mule related code extracted from ps-print.el. Require ps-print, provide ps-mule. (ps-multibyte-buffer): Add autoload cookie. (ps-mule-prepare-ascii-font): New fun. (ps-mule-set-ascii-font): New fun. (ps-mule-skip-same-charset): Fun deleted. (ps-mule-plot-string): Set ps-mule-current-charset. (ps-mule-initialize): Add autload cookie. Don't set ps-mule-font-info-database here. (ps-mule-begin-job): Renamed from ps-mule-begin. Update ps-mule-font-info-database and ps-control-or-escape-regexp. (ps-mule-begin-page): New fun. Doc fix. Require ps-print only when compiled. (ps-mule-prologue-generated): New fun. (ps-mule-plot-string): Add autoload cookie. (ps-mule-begin-job): Call ps-mule-prologue-generated. Programming uniformization and little code improvement. (ps-mule-prepare-font): Programming uniformization. (ps-mule-find-wrappoint, ps-mule-plot-rule-cmpchar) (ps-mule-string-encoding, ps-mule-begin-job): Little code improvement. Always require ps-print. Move some function definitions for Emacs 20.2 and the earlier to ps-print.el. (ps-mule-find-wrappoint): Make it work also with Emacs 20.2. (ps-mule-begin-job): Delete nil and unknown from a list of character sets found by find-charset-region.
author Kenichi Handa <handa@m17n.org>
date Tue, 15 Dec 1998 06:38:12 +0000
parents 47d9b7a1dee3
children
line wrap: on
line source

;;; gnus-scomo.el --- mode for editing Gnus score files
;; Copyright (C) 1996 Free Software Foundation, Inc.

;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news, mail

;; 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., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;;; Code:

(require 'easymenu)
(require 'timezone)
(eval-when-compile (require 'cl))

(defvar gnus-score-mode-hook nil
  "*Hook run in score mode buffers.")

(defvar gnus-score-menu-hook nil
  "*Hook run after creating the score mode menu.")

(defvar gnus-score-edit-exit-function nil
  "Function run on exit from the score buffer.")

(defvar gnus-score-mode-map nil)
(unless gnus-score-mode-map
  (setq gnus-score-mode-map (copy-keymap emacs-lisp-mode-map))
  (define-key gnus-score-mode-map "\C-c\C-c" 'gnus-score-edit-exit)
  (define-key gnus-score-mode-map "\C-c\C-d" 'gnus-score-edit-insert-date)
  (define-key gnus-score-mode-map "\C-c\C-p" 'gnus-score-pretty-print))

;;;###autoload
(defun gnus-score-mode ()
  "Mode for editing Gnus score files.
This mode is an extended emacs-lisp mode.

\\{gnus-score-mode-map}"
  (interactive)
  (kill-all-local-variables)
  (use-local-map gnus-score-mode-map)
  (when menu-bar-mode
    (gnus-score-make-menu-bar))
  (set-syntax-table emacs-lisp-mode-syntax-table)
  (setq major-mode 'gnus-score-mode)
  (setq mode-name "Score")
  (lisp-mode-variables nil)
  (make-local-variable 'gnus-score-edit-exit-function)
  (run-hooks 'emacs-lisp-mode-hook 'gnus-score-mode-hook))

(defun gnus-score-make-menu-bar ()
  (unless (boundp 'gnus-score-menu)
    (easy-menu-define
     gnus-score-menu gnus-score-mode-map ""
     '("Score"
       ["Exit" gnus-score-edit-exit t]
       ["Insert date" gnus-score-edit-insert-date t]
       ["Format" gnus-score-pretty-print t]))
    (run-hooks 'gnus-score-menu-hook)))

(defun gnus-score-edit-insert-date ()
  "Insert date in numerical format."
  (interactive)
  (princ (gnus-score-day-number (current-time)) (current-buffer)))

(defun gnus-score-pretty-print ()
  "Format the current score file."
  (interactive)
  (goto-char (point-min))
  (let ((form (read (current-buffer))))
    (erase-buffer)
    (pp form (current-buffer)))
  (goto-char (point-min)))

(defun gnus-score-edit-exit ()
  "Stop editing the score file."
  (interactive)
  (unless (file-exists-p (file-name-directory (buffer-file-name)))
    (make-directory (file-name-directory (buffer-file-name)) t))
  (save-buffer)
  (bury-buffer (current-buffer))
  (let ((buf (current-buffer)))
    (when gnus-score-edit-exit-function
      (funcall gnus-score-edit-exit-function))
    (when (eq buf (current-buffer))
      (switch-to-buffer (other-buffer (current-buffer))))))

(defun gnus-score-day-number (time)
  (let ((dat (decode-time time)))
    (timezone-absolute-from-gregorian
     (nth 4 dat) (nth 3 dat) (nth 5 dat))))

(provide 'gnus-scomo)

;;; gnus-scomo.el ends here