]> git.bundesbrandschatzamt.de Git - emacsconfig.git/commitdiff
update command-log.
authorAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Tue, 13 Nov 2018 13:44:44 +0000 (14:44 +0100)
committerAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Tue, 13 Nov 2018 13:44:44 +0000 (14:44 +0100)
Signed-off-by: Andreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
elpa/command-log-mode-20160412.2147/command-log-mode-autoloads.el [deleted file]
elpa/command-log-mode-20160412.2147/command-log-mode-pkg.el [deleted file]
elpa/command-log-mode-20160412.2147/command-log-mode.el [deleted file]
elpa/command-log-mode-20160413.447/command-log-mode-autoloads.el [new file with mode: 0644]
elpa/command-log-mode-20160413.447/command-log-mode-pkg.el [new file with mode: 0644]
elpa/command-log-mode-20160413.447/command-log-mode.el [new file with mode: 0644]

diff --git a/elpa/command-log-mode-20160412.2147/command-log-mode-autoloads.el b/elpa/command-log-mode-20160412.2147/command-log-mode-autoloads.el
deleted file mode 100644 (file)
index 1d0e337..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;;; command-log-mode-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))
-\f
-;;;### (autoloads nil "command-log-mode" "command-log-mode.el" (22527
-;;;;;;  20560 0 0))
-;;; Generated autoloads from command-log-mode.el
-
-(autoload 'command-log-mode "command-log-mode" "\
-Toggle keyboard command logging.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'clm/toggle-command-log-buffer "command-log-mode" "\
-Toggle the command log showing or not.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; command-log-mode-autoloads.el ends here
diff --git a/elpa/command-log-mode-20160412.2147/command-log-mode-pkg.el b/elpa/command-log-mode-20160412.2147/command-log-mode-pkg.el
deleted file mode 100644 (file)
index d72a9fd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "command-log-mode" "20160412.2147" "log keyboard commands to buffer" 'nil :url "https://github.com/lewang/command-log-mode" :keywords '("help"))
diff --git a/elpa/command-log-mode-20160412.2147/command-log-mode.el b/elpa/command-log-mode-20160412.2147/command-log-mode.el
deleted file mode 100644 (file)
index 37e6d65..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-;;; command-log-mode.el --- log keyboard commands to buffer
-
-;; homepage: https://github.com/lewang/command-log-mode
-
-;; Copyright (C) 2013 Nic Ferrier
-;; Copyright (C) 2012 Le Wang
-;; Copyright (C) 2004  Free Software Foundation, Inc.
-
-;; Author: Michael Weber <michaelwNOSPAMfoldr.org>
-;; Keywords: help
-;; Package-Version: 20160412.2147
-;; Initial-version: <2004-10-07 11:41:28 michaelw>
-;; Time-stamp: <2004-11-06 17:08:11 michaelw>
-
-;; 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.
-
-;;; Commentary:
-
-;; This add-on can be used to demo Emacs to an audience.  When
-;; activated, keystrokes get logged into a designated buffer, along
-;; with the command bound to them.
-
-;; To enable, use e.g.:
-;;
-;; (require 'command-log-mode)
-;; (add-hook 'LaTeX-mode-hook 'command-log-mode)
-;;
-;; To see the log buffer, call M-x clm/open-command-log-buffer.
-
-;; The key strokes in the log are decorated with ISO9601 timestamps on
-;; the property `:time' so if you want to convert the log for
-;; screencasting purposes you could use the time stamp as a key into
-;; the video beginning.
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-
-(defvar clm/log-text t
-  "A non-nil setting means text will be saved to the command log.")
-
-(defvar clm/log-repeat nil
-  "A nil setting means repetitions of the same command are merged into the single log line.")
-
-(defvar clm/recent-history-string ""
-  "This string will hold recently typed text.")
-
-(defun clm/recent-history ()
-  (setq clm/recent-history-string
-       (concat clm/recent-history-string
-               (buffer-substring-no-properties (- (point) 1) (point)))))
-
-(add-hook 'post-self-insert-hook 'clm/recent-history)
-
-(defun clm/zap-recent-history ()
-  (unless (or (member this-original-command
-                     clm/log-command-exceptions*)
-             (eq this-original-command #'self-insert-command))
-    (setq clm/recent-history-string "")))
-
-(add-hook 'post-command-hook 'clm/zap-recent-history)
-
-(defvar clm/time-string "%Y-%m-%dT%H:%M:%S"
-  "The string sent to `format-time-string' when command time is logged.")
-
-(defvar clm/logging-dir "~/log/"
-  "Directory in which to store files containing logged commands.")
-
-(defvar clm/log-command-exceptions*
-  '(nil self-insert-command backward-char forward-char
-        delete-char delete-backward-char backward-delete-char
-        backward-delete-char-untabify
-        universal-argument universal-argument-other-key
-        universal-argument-minus universal-argument-more
-        beginning-of-line end-of-line recenter
-        move-end-of-line move-beginning-of-line
-        handle-switch-frame
-        newline previous-line next-line)
-  "A list commands which should not be logged, despite logging being enabled.
-Frequently used non-interesting commands (like cursor movements) should be put here.")
-
-(defvar clm/command-log-buffer nil
-  "Reference of the currenly used buffer to display logged commands.")
-(defvar clm/command-repetitions 0
-  "Count of how often the last keyboard commands has been repeated.")
-(defvar clm/last-keyboard-command nil
-  "Last logged keyboard command.")
-
-
-(defvar clm/log-command-indentation 11
-  "*Indentation of commands in command log buffer.")
-
-(defgroup command-log nil
-  "Customization for the command log.")
-
-(defcustom command-log-mode-auto-show nil
-  "Show the command-log window or frame automatically."
-  :group 'command-log
-  :type 'boolean)
-
-(defcustom command-log-mode-window-size 40
-  "The size of the command-log window."
-  :group 'command-log
-  :type 'integer)
-
-(defcustom command-log-mode-window-font-size 2
-  "The font-size of the command-log window."
-  :group 'command-log
-  :type 'integer)
-
-(defcustom command-log-mode-key-binding-open-log "C-c o"
-  "The key binding used to toggle the log window."
-  :group 'command-log
-  :type '(radio
-          (const :tag "No key" nil)
-          (key-sequence "C-c o"))) ;; this is not right though it works for kbd
-
-(defcustom command-log-mode-open-log-turns-on-mode nil
-  "Does opening the command log turn on the mode?"
-  :group 'command-log
-  :type 'boolean)
-
-(defcustom command-log-mode-is-global nil
-  "Does turning on command-log-mode happen globally?"
-  :group 'command-log
-  :type 'boolean)
-
-;;;###autoload
-(define-minor-mode command-log-mode
-  "Toggle keyboard command logging."
-  :init-value nil
-  :lighter " command-log"
-  :keymap nil
-  (if command-log-mode
-      (when (and
-             command-log-mode-auto-show
-             (not (get-buffer-window clm/command-log-buffer)))
-        (clm/open-command-log-buffer))
-      ;; We can close the window though
-      (clm/close-command-log-buffer)))
-
-(define-global-minor-mode global-command-log-mode command-log-mode
-  command-log-mode)
-
-(defun clm/buffer-log-command-p (cmd &optional buffer)
-  "Determines whether keyboard command CMD should be logged.
-If non-nil, BUFFER specifies the buffer used to determine whether CMD should be logged.
-If BUFFER is nil, the current buffer is assumed."
-  (let ((val (if buffer
-                (buffer-local-value command-log-mode buffer)
-              command-log-mode)))
-    (and (not (null val))
-        (null (member cmd clm/log-command-exceptions*)))))
-
-(defmacro clm/save-command-environment (&rest body)
-  (declare (indent 0))
-  `(let ((deactivate-mark nil) ; do not deactivate mark in transient
-                                        ; mark mode
-        ;; do not let random commands scribble over
-        ;; {THIS,LAST}-COMMAND
-        (this-command this-command)
-        (last-command last-command))
-     ,@body))
-
-(defun clm/open-command-log-buffer (&optional arg)
-  "Opens (and creates, if non-existant) a buffer used for logging keyboard commands.
-If ARG is Non-nil, the existing command log buffer is cleared."
-  (interactive "P")
-  (with-current-buffer 
-      (setq clm/command-log-buffer
-            (get-buffer-create " *command-log*"))
-    (text-scale-set 1))
-  (when arg
-    (with-current-buffer clm/command-log-buffer
-      (erase-buffer)))
-  (let ((new-win (split-window-horizontally
-                  (- 0 command-log-mode-window-size))))
-    (set-window-buffer new-win clm/command-log-buffer)
-    (set-window-dedicated-p new-win t)))
-
-(defun clm/close-command-log-buffer ()
-  "Close the command log window."
-  (interactive)
-  (with-current-buffer
-      (setq clm/command-log-buffer
-            (get-buffer-create " *command-log*"))
-    (let ((win (get-buffer-window (current-buffer))))
-      (when (windowp win)
-        (delete-window win)))))
-
-;;;###autoload
-(defun clm/toggle-command-log-buffer (&optional arg)
-  "Toggle the command log showing or not."
-  (interactive "P")
-  (when (and command-log-mode-open-log-turns-on-mode
-             (not command-log-mode))
-    (if command-log-mode-is-global
-        (global-command-log-mode)
-        (command-log-mode)))
-  (with-current-buffer
-      (setq clm/command-log-buffer
-            (get-buffer-create " *command-log*"))
-    (let ((win (get-buffer-window (current-buffer))))
-      (if (windowp win)
-          (clm/close-command-log-buffer)
-          ;; Else open the window
-          (clm/open-command-log-buffer arg)))))
-
-(defun clm/scroll-buffer-window (buffer &optional move-fn)
-  "Updates `point' of windows containing BUFFER according to MOVE-FN.
-If non-nil, MOVE-FN is called on every window which displays BUFFER.
-If nil, MOVE-FN defaults to scrolling to the bottom, making the last line visible.
-
-Scrolling up can be accomplished with:
-\(clm/scroll-buffer-window buf (lambda () (goto-char (point-min))))
-"
-  (let ((selected (selected-window))
-       (point-mover (or move-fn
-                        (function (lambda () (goto-char (point-max)))))))
-    (walk-windows (function (lambda (window)
-                             (when (eq (window-buffer window) buffer)
-                               (select-window window)
-                               (funcall point-mover)
-                               (select-window selected))))
-                 nil t)))
-
-(defmacro clm/with-command-log-buffer (&rest body)
-  (declare (indent 0))
-  `(when (and (not (null clm/command-log-buffer))
-             (buffer-name clm/command-log-buffer))
-     (with-current-buffer clm/command-log-buffer
-       ,@body)))
-
-(defun clm/log-command (&optional cmd)
-  "Hook into `pre-command-hook' to intercept command activation."
-  (clm/save-command-environment
-    (setq cmd (or cmd this-command))
-    (when (clm/buffer-log-command-p cmd)
-      (clm/with-command-log-buffer
-        (let ((current (current-buffer)))
-          (goto-char (point-max))
-          (cond ((and (not clm/log-repeat) (eq cmd clm/last-keyboard-command))
-                 (incf clm/command-repetitions)
-                 (save-match-data
-                   (when (and (> clm/command-repetitions 1)
-                              (search-backward "[" (line-beginning-position -1) t))
-                     (delete-region (point) (line-end-position))))
-                 (backward-char) ; skip over either ?\newline or ?\space before ?\[
-                 (insert " [")
-                 (princ (1+ clm/command-repetitions) current)
-                 (insert " times]"))
-                (t ;; (message "last cmd: %s cur: %s" last-command cmd)
-                 ;; showing accumulated text with interleaved key presses isn't very useful
-                (when (and clm/log-text (not clm/log-repeat))
-                  (if (eq clm/last-keyboard-command 'self-insert-command)
-                      (insert "[text: " clm/recent-history-string "]\n")))
-                 (setq clm/command-repetitions 0)
-                 (insert
-                  (propertize
-                   (key-description (this-command-keys))
-                   :time  (format-time-string clm/time-string (current-time))))
-                 (when (>= (current-column) clm/log-command-indentation)
-                   (newline))
-                 (move-to-column clm/log-command-indentation t)
-                 (princ (if (byte-code-function-p cmd) "<bytecode>" cmd) current)
-                 (newline)
-                 (setq clm/last-keyboard-command cmd)))
-          (clm/scroll-buffer-window current))))))
-
-(defun clm/command-log-clear ()
-  "Clear the command log buffer."
-  (interactive)
-  (with-current-buffer clm/command-log-buffer
-    (erase-buffer)))
-
-(defun clm/save-log-line (start end)
-  "Helper function for `clm/save-command-log' to export text properties."
-  (save-excursion
-    (goto-char start)
-    (let ((time (get-text-property (point) :time)))
-      (if time
-         (list (cons start (if time 
-                               (concat "[" (get-text-property (point) :time) "] ")
-                             "")))))))
-
-(defun clm/save-command-log ()
-  "Save commands to today's log.
-Clears the command log buffer after saving."
-  (interactive)
-  (save-window-excursion
-    (set-buffer (get-buffer " *command-log*"))
-    (goto-char (point-min))
-    (let ((now (format-time-string "%Y-%m-%d"))
-         (write-region-annotate-functions '(clm/save-log-line)))
-      (while (and (re-search-forward "^.*" nil t)
-                 (not (eobp)))
-       (append-to-file (line-beginning-position) (1+ (line-end-position)) (concat clm/logging-dir now))))
-    (clm/command-log-clear)))
-
-(add-hook 'pre-command-hook 'clm/log-command)
-
-(eval-after-load 'command-log-mode
-  '(when command-log-mode-key-binding-open-log
-    (global-set-key
-     (kbd command-log-mode-key-binding-open-log)
-     'clm/toggle-command-log-buffer)))
-
-(provide 'command-log-mode)
-
-;;; command-log-mode.el ends here
diff --git a/elpa/command-log-mode-20160413.447/command-log-mode-autoloads.el b/elpa/command-log-mode-20160413.447/command-log-mode-autoloads.el
new file mode 100644 (file)
index 0000000..c009063
--- /dev/null
@@ -0,0 +1,33 @@
+;;; command-log-mode-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+
+(add-to-list 'load-path (directory-file-name
+                         (or (file-name-directory #$) (car load-path))))
+
+\f
+;;;### (autoloads nil "command-log-mode" "command-log-mode.el" (0
+;;;;;;  0 0 0))
+;;; Generated autoloads from command-log-mode.el
+
+(autoload 'command-log-mode "command-log-mode" "\
+Toggle keyboard command logging.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'clm/toggle-command-log-buffer "command-log-mode" "\
+Toggle the command log showing or not.
+
+\(fn &optional ARG)" t nil)
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "command-log-mode" '("command-log-mode-" "clm/" "global-command-log-mode")))
+
+;;;***
+\f
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; coding: utf-8
+;; End:
+;;; command-log-mode-autoloads.el ends here
diff --git a/elpa/command-log-mode-20160413.447/command-log-mode-pkg.el b/elpa/command-log-mode-20160413.447/command-log-mode-pkg.el
new file mode 100644 (file)
index 0000000..91482bb
--- /dev/null
@@ -0,0 +1,2 @@
+;;; -*- no-byte-compile: t -*-
+(define-package "command-log-mode" "20160413.447" "log keyboard commands to buffer" 'nil :commit "af600e6b4129c8115f464af576505ea8e789db27" :keywords '("help") :authors '(("Michael Weber" . "michaelwNOSPAMfoldr.org")) :maintainer '("Michael Weber" . "michaelwNOSPAMfoldr.org") :url "https://github.com/lewang/command-log-mode")
diff --git a/elpa/command-log-mode-20160413.447/command-log-mode.el b/elpa/command-log-mode-20160413.447/command-log-mode.el
new file mode 100644 (file)
index 0000000..c2a890c
--- /dev/null
@@ -0,0 +1,323 @@
+;;; command-log-mode.el --- log keyboard commands to buffer
+
+;; homepage: https://github.com/lewang/command-log-mode
+
+;; Copyright (C) 2013 Nic Ferrier
+;; Copyright (C) 2012 Le Wang
+;; Copyright (C) 2004  Free Software Foundation, Inc.
+
+;; Author: Michael Weber <michaelwNOSPAMfoldr.org>
+;; Keywords: help
+;; Package-Version: 20160413.447
+;; Initial-version: <2004-10-07 11:41:28 michaelw>
+;; Time-stamp: <2004-11-06 17:08:11 michaelw>
+
+;; 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.
+
+;;; Commentary:
+
+;; This add-on can be used to demo Emacs to an audience.  When
+;; activated, keystrokes get logged into a designated buffer, along
+;; with the command bound to them.
+
+;; To enable, use e.g.:
+;;
+;; (require 'command-log-mode)
+;; (add-hook 'LaTeX-mode-hook 'command-log-mode)
+;;
+;; To see the log buffer, call M-x clm/open-command-log-buffer.
+
+;; The key strokes in the log are decorated with ISO9601 timestamps on
+;; the property `:time' so if you want to convert the log for
+;; screencasting purposes you could use the time stamp as a key into
+;; the video beginning.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+(defvar clm/log-text t
+  "A non-nil setting means text will be saved to the command log.")
+
+(defvar clm/log-repeat nil
+  "A nil setting means repetitions of the same command are merged into the single log line.")
+
+(defvar clm/recent-history-string ""
+  "This string will hold recently typed text.")
+
+(defun clm/recent-history ()
+  (setq clm/recent-history-string
+       (concat clm/recent-history-string
+               (buffer-substring-no-properties (- (point) 1) (point)))))
+
+(add-hook 'post-self-insert-hook 'clm/recent-history)
+
+(defun clm/zap-recent-history ()
+  (unless (or (member this-original-command
+                     clm/log-command-exceptions*)
+             (eq this-original-command #'self-insert-command))
+    (setq clm/recent-history-string "")))
+
+(add-hook 'post-command-hook 'clm/zap-recent-history)
+
+(defvar clm/time-string "%Y-%m-%dT%H:%M:%S"
+  "The string sent to `format-time-string' when command time is logged.")
+
+(defvar clm/logging-dir "~/log/"
+  "Directory in which to store files containing logged commands.")
+
+(defvar clm/log-command-exceptions*
+  '(nil self-insert-command backward-char forward-char
+        delete-char delete-backward-char backward-delete-char
+        backward-delete-char-untabify
+        universal-argument universal-argument-other-key
+        universal-argument-minus universal-argument-more
+        beginning-of-line end-of-line recenter
+        move-end-of-line move-beginning-of-line
+        handle-switch-frame
+        newline previous-line next-line)
+  "A list commands which should not be logged, despite logging being enabled.
+Frequently used non-interesting commands (like cursor movements) should be put here.")
+
+(defvar clm/command-log-buffer nil
+  "Reference of the currenly used buffer to display logged commands.")
+(defvar clm/command-repetitions 0
+  "Count of how often the last keyboard commands has been repeated.")
+(defvar clm/last-keyboard-command nil
+  "Last logged keyboard command.")
+
+
+(defvar clm/log-command-indentation 11
+  "*Indentation of commands in command log buffer.")
+
+(defgroup command-log nil
+  "Customization for the command log.")
+
+(defcustom command-log-mode-auto-show nil
+  "Show the command-log window or frame automatically."
+  :group 'command-log
+  :type 'boolean)
+
+(defcustom command-log-mode-window-size 40
+  "The size of the command-log window."
+  :group 'command-log
+  :type 'integer)
+
+(defcustom command-log-mode-window-font-size 2
+  "The font-size of the command-log window."
+  :group 'command-log
+  :type 'integer)
+
+(defcustom command-log-mode-key-binding-open-log "C-c o"
+  "The key binding used to toggle the log window."
+  :group 'command-log
+  :type '(radio
+          (const :tag "No key" nil)
+          (key-sequence "C-c o"))) ;; this is not right though it works for kbd
+
+(defcustom command-log-mode-open-log-turns-on-mode nil
+  "Does opening the command log turn on the mode?"
+  :group 'command-log
+  :type 'boolean)
+
+(defcustom command-log-mode-is-global nil
+  "Does turning on command-log-mode happen globally?"
+  :group 'command-log
+  :type 'boolean)
+
+;;;###autoload
+(define-minor-mode command-log-mode
+  "Toggle keyboard command logging."
+  :init-value nil
+  :lighter " command-log"
+  :keymap nil
+  (if command-log-mode
+      (when (and
+             command-log-mode-auto-show
+             (not (get-buffer-window clm/command-log-buffer)))
+        (clm/open-command-log-buffer))
+      ;; We can close the window though
+      (clm/close-command-log-buffer)))
+
+(define-global-minor-mode global-command-log-mode command-log-mode
+  command-log-mode)
+
+(defun clm/buffer-log-command-p (cmd &optional buffer)
+  "Determines whether keyboard command CMD should be logged.
+If non-nil, BUFFER specifies the buffer used to determine whether CMD should be logged.
+If BUFFER is nil, the current buffer is assumed."
+  (let ((val (if buffer
+                (buffer-local-value command-log-mode buffer)
+              command-log-mode)))
+    (and (not (null val))
+        (null (member cmd clm/log-command-exceptions*)))))
+
+(defmacro clm/save-command-environment (&rest body)
+  (declare (indent 0))
+  `(let ((deactivate-mark nil) ; do not deactivate mark in transient
+                                        ; mark mode
+        ;; do not let random commands scribble over
+        ;; {THIS,LAST}-COMMAND
+        (this-command this-command)
+        (last-command last-command))
+     ,@body))
+
+(defun clm/open-command-log-buffer (&optional arg)
+  "Opens (and creates, if non-existant) a buffer used for logging keyboard commands.
+If ARG is Non-nil, the existing command log buffer is cleared."
+  (interactive "P")
+  (with-current-buffer 
+      (setq clm/command-log-buffer
+            (get-buffer-create " *command-log*"))
+    (text-scale-set 1))
+  (when arg
+    (with-current-buffer clm/command-log-buffer
+      (erase-buffer)))
+  (let ((new-win (split-window-horizontally
+                  (- 0 command-log-mode-window-size))))
+    (set-window-buffer new-win clm/command-log-buffer)
+    (set-window-dedicated-p new-win t)))
+
+(defun clm/close-command-log-buffer ()
+  "Close the command log window."
+  (interactive)
+  (with-current-buffer
+      (setq clm/command-log-buffer
+            (get-buffer-create " *command-log*"))
+    (let ((win (get-buffer-window (current-buffer))))
+      (when (windowp win)
+        (delete-window win)))))
+
+;;;###autoload
+(defun clm/toggle-command-log-buffer (&optional arg)
+  "Toggle the command log showing or not."
+  (interactive "P")
+  (when (and command-log-mode-open-log-turns-on-mode
+             (not command-log-mode))
+    (if command-log-mode-is-global
+        (global-command-log-mode)
+        (command-log-mode)))
+  (with-current-buffer
+      (setq clm/command-log-buffer
+            (get-buffer-create " *command-log*"))
+    (let ((win (get-buffer-window (current-buffer))))
+      (if (windowp win)
+          (clm/close-command-log-buffer)
+          ;; Else open the window
+          (clm/open-command-log-buffer arg)))))
+
+(defun clm/scroll-buffer-window (buffer &optional move-fn)
+  "Updates `point' of windows containing BUFFER according to MOVE-FN.
+If non-nil, MOVE-FN is called on every window which displays BUFFER.
+If nil, MOVE-FN defaults to scrolling to the bottom, making the last line visible.
+
+Scrolling up can be accomplished with:
+\(clm/scroll-buffer-window buf (lambda () (goto-char (point-min))))
+"
+  (let ((selected (selected-window))
+       (point-mover (or move-fn
+                        (function (lambda () (goto-char (point-max)))))))
+    (walk-windows (function (lambda (window)
+                             (when (eq (window-buffer window) buffer)
+                               (select-window window)
+                               (funcall point-mover)
+                               (select-window selected))))
+                 nil t)))
+
+(defmacro clm/with-command-log-buffer (&rest body)
+  (declare (indent 0))
+  `(when (and (not (null clm/command-log-buffer))
+             (buffer-name clm/command-log-buffer))
+     (with-current-buffer clm/command-log-buffer
+       ,@body)))
+
+(defun clm/log-command (&optional cmd)
+  "Hook into `pre-command-hook' to intercept command activation."
+  (clm/save-command-environment
+    (setq cmd (or cmd this-command))
+    (when (clm/buffer-log-command-p cmd)
+      (clm/with-command-log-buffer
+        (let ((current (current-buffer)))
+          (goto-char (point-max))
+          (cond ((and (not clm/log-repeat) (eq cmd clm/last-keyboard-command))
+                 (incf clm/command-repetitions)
+                 (save-match-data
+                   (when (and (> clm/command-repetitions 1)
+                              (search-backward "[" (line-beginning-position -1) t))
+                     (delete-region (point) (line-end-position))))
+                 (backward-char) ; skip over either ?\newline or ?\space before ?\[
+                 (insert " [")
+                 (princ (1+ clm/command-repetitions) current)
+                 (insert " times]"))
+                (t ;; (message "last cmd: %s cur: %s" last-command cmd)
+                 ;; showing accumulated text with interleaved key presses isn't very useful
+                (when (and clm/log-text (not clm/log-repeat))
+                  (if (eq clm/last-keyboard-command 'self-insert-command)
+                      (insert "[text: " clm/recent-history-string "]\n")))
+                 (setq clm/command-repetitions 0)
+                 (insert
+                  (propertize
+                   (key-description (this-command-keys))
+                   :time  (format-time-string clm/time-string (current-time))))
+                 (when (>= (current-column) clm/log-command-indentation)
+                   (newline))
+                 (move-to-column clm/log-command-indentation t)
+                 (princ (if (byte-code-function-p cmd) "<bytecode>" cmd) current)
+                 (newline)
+                 (setq clm/last-keyboard-command cmd)))
+          (clm/scroll-buffer-window current))))))
+
+(defun clm/command-log-clear ()
+  "Clear the command log buffer."
+  (interactive)
+  (with-current-buffer clm/command-log-buffer
+    (erase-buffer)))
+
+(defun clm/save-log-line (start end)
+  "Helper function for `clm/save-command-log' to export text properties."
+  (save-excursion
+    (goto-char start)
+    (let ((time (get-text-property (point) :time)))
+      (if time
+         (list (cons start (if time 
+                               (concat "[" (get-text-property (point) :time) "] ")
+                             "")))))))
+
+(defun clm/save-command-log ()
+  "Save commands to today's log.
+Clears the command log buffer after saving."
+  (interactive)
+  (save-window-excursion
+    (set-buffer (get-buffer " *command-log*"))
+    (goto-char (point-min))
+    (let ((now (format-time-string "%Y-%m-%d"))
+         (write-region-annotate-functions '(clm/save-log-line)))
+      (while (and (re-search-forward "^.*" nil t)
+                 (not (eobp)))
+       (append-to-file (line-beginning-position) (1+ (line-end-position)) (concat clm/logging-dir now))))
+    (clm/command-log-clear)))
+
+(add-hook 'pre-command-hook 'clm/log-command)
+
+(eval-after-load 'command-log-mode
+  '(when command-log-mode-key-binding-open-log
+    (global-set-key
+     (kbd command-log-mode-key-binding-open-log)
+     'clm/toggle-command-log-buffer)))
+
+(provide 'command-log-mode)
+
+;;; command-log-mode.el ends here