1;;; makesum.el --- generate key binding summary for Emacs
2
3;; Copyright (C) 1985, 2001, 2002, 2003, 2004, 2005,
4;;   2006, 2007 Free Software Foundation, Inc.
5
6;; Maintainer: FSF
7;; Keywords: help
8
9;; This file is part of GNU Emacs.
10
11;; GNU Emacs is free software; you can redistribute it and/or modify
12;; it under the terms of the GNU General Public License as published by
13;; the Free Software Foundation; either version 2, or (at your option)
14;; any later version.
15
16;; GNU Emacs is distributed in the hope that it will be useful,
17;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19;; GNU General Public License for more details.
20
21;; You should have received a copy of the GNU General Public License
22;; along with GNU Emacs; see the file COPYING.  If not, write to the
23;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24;; Boston, MA 02110-1301, USA.
25
26;;; Commentary:
27
28;; Displays a nice human-readable summary of all keybindings in a
29;; two-column format.
30
31;;; Code:
32
33;;;###autoload
34(defun make-command-summary ()
35  "Make a summary of current key bindings in the buffer *Summary*.
36Previous contents of that buffer are killed first."
37  (interactive)
38  (message "Making command summary...")
39  ;; This puts a description of bindings in a buffer called *Help*.
40  (save-window-excursion
41   (describe-bindings))
42  (with-output-to-temp-buffer "*Summary*"
43    (save-excursion
44     (let ((cur-mode mode-name))
45       (set-buffer standard-output)
46       (erase-buffer)
47       (insert-buffer-substring "*Help*")
48       (goto-char (point-min))
49       (delete-region (point) (progn (forward-line 1) (point)))
50       (while (search-forward "         " nil t)
51	 (replace-match "  "))
52       (goto-char (point-min))
53       (while (search-forward "-@ " nil t)
54	 (replace-match "-SP"))
55       (goto-char (point-min))
56       (while (search-forward "  .. ~ " nil t)
57	 (replace-match "SP .. ~"))
58       (goto-char (point-min))
59       (while (search-forward "C-?" nil t)
60	 (replace-match "DEL"))
61       (goto-char (point-min))
62       (while (search-forward "C-i" nil t)
63	 (replace-match "TAB"))
64       (goto-char (point-min))
65       (if (re-search-forward "^Local Bindings:" nil t)
66	   (progn
67	    (forward-char -1)
68	    (insert " for " cur-mode " Mode")
69	    (while (search-forward "??\n" nil t)
70	      (delete-region (point)
71			     (progn
72			      (forward-line -1)
73			      (point))))))
74       (goto-char (point-min))
75       (insert "Emacs command summary, " (substring (current-time-string) 0 10)
76	       ".\n")
77       ;; Delete "key    binding" and underlining of dashes.
78       (delete-region (point) (progn (forward-line 2) (point)))
79       (forward-line 1)			;Skip blank line
80       (while (not (eobp))
81	 (let ((beg (point)))
82	   (or (re-search-forward "^$" nil t)
83	       (goto-char (point-max)))
84	   (double-column beg (point))
85	   (forward-line 1)))
86       (goto-char (point-min)))))
87  (message "Making command summary...done"))
88
89(defun double-column (start end)
90  (interactive "r")
91  (let (half cnt
92        line lines nlines
93	(from-end (- (point-max) end)))
94    (setq nlines (count-lines start end))
95    (if (<= nlines 1)
96	nil
97      (setq half (/ (1+ nlines) 2))
98      (goto-char start)
99      (save-excursion
100       (forward-line half)
101       (while (< half nlines)
102	 (setq half (1+ half))
103	 (setq line (buffer-substring (point) (save-excursion (end-of-line) (point))))
104	 (setq lines (cons line lines))
105	 (delete-region (point) (progn (forward-line 1) (point)))))
106      (setq lines (nreverse lines))
107      (while lines
108	(end-of-line)
109	(indent-to 41)
110	(insert (car lines))
111	(forward-line 1)
112	(setq lines (cdr lines))))
113    (goto-char (- (point-max) from-end))))
114
115(provide 'makesum)
116
117;;; arch-tag: c2383336-fc89-46ad-8110-ded42bffaee3
118;;; makesum.el ends here
119