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