From: Andreas Gerler Date: Tue, 13 Nov 2018 13:44:44 +0000 (+0100) Subject: update command-log. X-Git-Url: http://git.bundesbrandschatzamt.de/?a=commitdiff_plain;h=6c2e772bd0acc193a3431246db656aea7c618a30;p=emacsconfig.git update command-log. Signed-off-by: Andreas Gerler --- 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 index 1d0e3375..00000000 --- a/elpa/command-log-mode-20160412.2147/command-log-mode-autoloads.el +++ /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)))) - -;;;### (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) - -;;;*** - -;; 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 index d72a9fd1..00000000 --- a/elpa/command-log-mode-20160412.2147/command-log-mode-pkg.el +++ /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 index 37e6d651..00000000 --- a/elpa/command-log-mode-20160412.2147/command-log-mode.el +++ /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 -;; 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) "" 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 index 00000000..c0090635 --- /dev/null +++ b/elpa/command-log-mode-20160413.447/command-log-mode-autoloads.el @@ -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)))) + + +;;;### (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"))) + +;;;*** + +;; 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 index 00000000..91482bb1 --- /dev/null +++ b/elpa/command-log-mode-20160413.447/command-log-mode-pkg.el @@ -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" . "michaelw@foldr.org")) :maintainer '("Michael Weber" . "michaelw@foldr.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 index 00000000..c2a890c6 --- /dev/null +++ b/elpa/command-log-mode-20160413.447/command-log-mode.el @@ -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 +;; 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) "" 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