;;; dispret.el --- show end of line mode. ;; Copyright (C) 2002 by Taiki SUGAWARA ;; Author: Taiki SUGAWARA ;; Keywords: faces, editing ;; This file 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. ;; This file 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. ;;; Comments ;; 改行を表示してみるモード ;;; Todo ;; vline.el と共存できるようにしたい。 ;;; Code: (defvar dispret-overlay-table-size 200) (defvar dispret-overlay-table (make-vector dispret-overlay-table-size nil)) (defvar dispret-eol-string "<") (defvar dispret-eof-string "[EOF]") (defvar dispret-mode nil) (defun dispret-clear () (mapcar (lambda (ovr) (and ovr (delete-overlay ovr))) dispret-overlay-table)) (defun dispret-show () (let ((current (point)) (i 0)) (save-excursion (goto-char (window-start)) (catch 'loop (while (and (< i (1- (window-height))) (< i (length dispret-overlay-table))) (end-of-line) ;; カーソルがあったらそこは無視する (unless (= (point) current) (let ((ovr (aref dispret-overlay-table i))) ;; overlay がなかったら準備する (unless ovr (setq ovr (make-overlay 0 0)) (overlay-put ovr 'rear-nonsticky t) (aset dispret-overlay-table i ovr)) (move-overlay ovr (point) (1+ (point))) (overlay-put ovr 'before-string (if (eobp) dispret-eof-string dispret-eol-string)))) (when (eobp) (throw 'loop nil)) (setq i (1+ i)) (forward-line)))))) (defun dispret-on () (interactive) (setq dispret-mode t) (make-local-hook 'post-command-hook) (make-local-hook 'pre-command-hook) (add-hook 'post-command-hook 'dispret-show nil t) (add-hook 'pre-command-hook 'dispret-clear nil t)) (defun dispret-off () (interactive) (setq dispret-mode nil) (dispret-clear) (remove-hook 'post-command-hook 'dispret-show t) (remove-hook 'pre-command-hook 'dispret-clear t)) (add-to-list 'minor-mode-alist '(dispret-mode " DispRet")) (provide 'dispret) ;;; dispret.el ends here