diff lisp/packages/column.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children b82b59fe008d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/packages/column.el	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,120 @@
+;;; column.el --- display line and column in the mode line
+
+;; Copyright (C) 1993 Per Abrahamsen.
+;; Copyright abandoned.  This file is donated to the public domain.
+
+;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
+;; Hacked for XEmacs by Richard Lee <rlee@vienna.itd.sterling.com>
+;; Version: 0.2
+;; Bogus-Bureaucratic-Cruft: How 'bout ESR and the LCD people agreed
+;; 	on a common format?
+
+;;; Synched up with: Not in FSF.
+
+;;; Commentary:
+
+;; LCD Archive Entry:
+;; column|Per Abrahamsen|abraham@iesd.auc.dk|
+;; Display line and column in the mode line|
+;; 1993-12-31|0.2|~/misc/column.el.Z|
+
+;; Requires FSF Emacs 19.  ***** or Lucid Emacs 19.6+  -- Richard Lee
+
+;;; Change Log:
+;;
+;; Tue Jan 04 19:51:15 1994     Richard Lee *****
+;;      * Hacks for Lemacs:
+;;           changed display-column-after from ")%--" to ")%----"
+;;           defined current-line (function and variable)
+;;           changed display-column-format to use current-line instead of %l
+;; Fri Dec 31 13:46:41 1993
+;;      * Change mode-line-format directly instead of using a minor mode.
+;; Thu Dec 16 14:57:15 1993
+;;      * Removed (require 'lucid) as unnecessary.
+;; Fri Aug 13 02:06:18 1993	Per Abrahamsen
+;;      * Made current-column buffer local.
+;; Tue Aug 10 10:00:00 1993	Per Abrahamsen
+;;      * Created.
+
+;; This version should display column and line number the same place as
+;; line-number-mode.  Activate with 
+
+;;	M-x display-column-mode RET
+
+;; For FSF Emacs 19 only.  You can get line+.el or linenumber.el from the
+;; emacs lisp archive if you have another version of Emacs.  Not tested.
+
+;;; Code:
+
+;; String containing current column as last evaluated.
+(defvar current-column "0")
+(defvar current-line   "0")
+(make-variable-buffer-local 'current-column)
+(make-variable-buffer-local 'current-line)
+
+;; Returns the vertical position of point _relative to beginning of buffer_
+;; (as opposed to the current-line example in the gnu-emacs 19 info page on
+;; Text Lines, which does it relative to top of screen.) ***** -- Richard Lee
+;; ben: lines begin at 1, not 0!
+(defun current-line ()
+  "Return the vertical position of point in the selected window.
+   First line in the buffer is 1."
+  (1+ (+ (count-lines 1 (point))
+	 (if (= (current-column) 0) 1 0)
+	 -1)))
+
+;; Function updating the string containing the current column.
+(defvar update-column-function 
+  (function (lambda ()
+	      (setq current-column (int-to-string (current-column)))
+	      (setq current-line   (int-to-string (current-line)))
+	      (set-buffer-modified-p (buffer-modified-p)))))
+
+(defvar display-column-mode nil
+  "Show current column and line in mode line if non-nil.")
+
+(defvar display-column-format '(current-line "/" current-column "--")
+  "Format for displaying the line and column in the mode line.")
+
+;; Entry for column mode in mode line.
+(defconst display-column-entry
+  (list 'display-column-mode (cons "" display-column-format)))
+
+(defvar display-column-after ")%]----"
+  "Display column after this element in the mode line.")
+
+;; Add display-column-format to mode-line-format after display-column-after.
+(or (member display-column-entry mode-line-format)
+    (let ((entry (member display-column-after mode-line-format)))
+      (setcdr entry (cons display-column-entry (cdr entry)))))
+
+(defun remove (it list)
+  (cond ((null list) nil)
+        ((eq it (car list)) (cdr list))
+	(t (setcdr list (remove it (cdr list))) list)))  
+
+;;;###autoload
+(defun display-column-mode (&optional arg)
+  "Toggle display column mode.
+With prefix arg, turn display column mode on iff arg is positive.
+
+When display column mode is on, the current column and line number are
+displayed in the mode line."
+  (interactive "P")
+  (if (or (and (null arg) display-column-mode)
+	  (<= (prefix-numeric-value arg) 0))
+      ;; Turn it off
+      (if display-column-mode
+	  (progn
+	    (remove-hook 'post-command-hook update-column-function)
+	    (setq display-column-mode nil)
+	    (set-buffer-modified-p (buffer-modified-p))))
+    ;;Turn it on
+    (if display-column-mode
+	()
+      (add-hook 'post-command-hook update-column-function)
+      (setq display-column-mode t))))
+
+(provide 'column)
+
+;;; column.el ends here