about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-track-bar.el
diff options
context:
space:
mode:
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-track-bar.el')
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-track-bar.el110
1 files changed, 110 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-track-bar.el b/configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-track-bar.el
new file mode 100644
index 0000000000..360ecf69d5
--- /dev/null
+++ b/configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-track-bar.el
@@ -0,0 +1,110 @@
+;;; lui-track-bar.el --- Provides a bar to track the last read position
+
+;; Copyright (C) 2016 Vasilij Schneidermann <v.schneidermann@gmail.com>
+
+;; Author: Vasilij Schneidermann <v.schneidermann@gmail.com>
+
+;; This file is part of LUI.
+
+;; This program 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 3
+;; of the License, or (at your option) any later version.
+
+;; This program 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 this program; if not, write to the Free Software
+;; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+;; 02110-1301  USA
+
+;;; Commentary:
+
+;; This allows you to track where you've last left off a buffer.
+
+;; Use (enable-lui-track-bar) to enable this mode globally. You can
+;; customize `lui-track-bar-behavior' to change when the track bar
+;; moves. You can also use M-x lui-track-bar-move to move the track
+;; bar manually.
+
+;;; Code:
+
+(require 'lui)
+(require 'tracking)
+
+(defgroup lui-track-bar nil
+  "Last read position tracking for LUI"
+  :prefix "lui-track-bar-"
+  :group 'lui)
+
+(defcustom lui-track-bar-behavior 'before-switch-to-buffer
+  "When to move the track bar.
+
+The following values are possible.
+
+before-switch-to-buffer (default)
+  Move the bar to the bottom of the buffer when switching away
+  from a buffer.
+
+before-tracking-next-buffer
+  Move the bar when switching to the next buffer using
+  \\[tracking-next-buffer].
+
+after-send
+  Move the bar after sending a message."
+  :type '(choice (const :tag "Before switching buffers"
+                        before-switch-to-buffer)
+                 (const :tag "Before tracking switch"
+                        before-tracking-next-buffer)
+                 (const :tag "After sending"
+                        after-send))
+  :group 'lui-track-bar)
+
+(defface lui-track-bar
+  '((((type graphic) (background light))
+     :inherit default :background "dim gray" :height 0.1)
+    (((type graphic) (background dark))
+     :inherit default :background "light gray" :height 0.1)
+    (((type tty))
+     :inherit (font-lock-comment-face default) :underline t))
+  "Track bar face"
+  :group 'lui-track-bar)
+
+(defvar lui-track-bar-overlay nil)
+(make-variable-buffer-local 'lui-track-bar-overlay)
+
+;;;###autoload
+(defun enable-lui-track-bar ()
+  "Enable a bar in Lui buffers that shows where you stopped reading."
+  (interactive)
+  (defadvice switch-to-buffer (before lui-track-bar activate)
+    (when (and (eq lui-track-bar-behavior 'before-switch-to-buffer)
+               ;; Do not move the bar if the buffer is displayed still
+               (<= (length (get-buffer-window-list (current-buffer)))
+                   1))
+      (lui-track-bar-move)))
+  (defadvice tracking-next-buffer (before lui-track-bar activate)
+    (when (eq lui-track-bar-behavior 'before-tracking-next-buffer)
+      (lui-track-bar-move)))
+  (add-hook 'lui-pre-input-hook 'lui-track-bar--move-pre-input))
+
+(defun lui-track-bar--move-pre-input ()
+  (when (eq lui-track-bar-behavior 'after-send)
+    (lui-track-bar-move)))
+
+(defun lui-track-bar-move ()
+  "Move the track bar down."
+  (interactive)
+  (when (derived-mode-p 'lui-mode)
+    (when (not lui-track-bar-overlay)
+      (setq lui-track-bar-overlay (make-overlay (point-min) (point-min)))
+      (overlay-put lui-track-bar-overlay 'after-string
+                   (propertize "\n" 'face 'lui-track-bar)))
+    (move-overlay lui-track-bar-overlay
+                  lui-output-marker lui-output-marker)))
+
+(provide 'lui-track-bar)
+;;; lui-track-bar.el ends here