diff options
author | jao <jao@gnu.org> | 2019-11-28 00:08:20 +0000 |
---|---|---|
committer | jao <jao@gnu.org> | 2019-11-28 00:08:20 +0000 |
commit | 4da1c95cd9357b5d95b2164aa2c9e960ce8636dc (patch) | |
tree | 9f1d0a0d304decb4faab35cb0db55e2fe116abe3 /misc | |
parent | e91de748332ae3ff142d4200e9f27353a2353434 (diff) | |
download | elibs-4da1c95cd9357b5d95b2164aa2c9e960ce8636dc.tar.gz elibs-4da1c95cd9357b5d95b2164aa2c9e960ce8636dc.tar.bz2 |
Generic random album selector
Diffstat (limited to 'misc')
-rw-r--r-- | misc/jao-random-album.el | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/misc/jao-random-album.el b/misc/jao-random-album.el new file mode 100644 index 0000000..7158417 --- /dev/null +++ b/misc/jao-random-album.el @@ -0,0 +1,101 @@ +;; jao-random-album.el -- play random albums + +;; Copyright (C) 2009, 2010, 2017, 2018, 2019 Jose Antonio Ortega Ruiz + +;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org> +;; Start date: Sat Jul 04, 2009 13:06 + +;; 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 3 of the License, 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 this program. If not, see <http://www.gnu.org/licenses/>. + +(require 'jao-notify) + +(defvar jao-random-album-p t) +(defvar jao-random-lines nil) +(defvar jao-random-lines-file (expand-file-name "~/.emacs.d/random-lines")) +(defvar jao-random-album-notify-p t) +(defvar jao-random-album-notify-icon nil) +(defvar jao-random-album-skip-lines 2) + +(defun jao-random-lines () + (or jao-random-lines + (and (file-exists-p jao-random-lines-file) + (with-current-buffer + (find-file-noselect jao-random-lines-file) + (goto-char (point-min)) + (setq jao-random-lines (read (current-buffer))))) + (dotimes (n (1- (line-number-at-pos (point-max))) + jao-random-lines) + (when (> n jao-random-album-skip-lines) + (push (1+ n) jao-random-lines))))) + +(defun jao-random-lines-save () + (with-current-buffer (find-file-noselect jao-random-lines-file) + (delete-region (point-min) (point-max)) + (insert (format "%s\n" jao-random-lines)) + (save-buffer))) + +(defun jao-goto-random-album () + (let* ((pos (random (length (jao-random-lines)))) + (line (nth pos jao-random-lines))) + (setq jao-random-lines (remove line jao-random-lines)) + (jao-random-lines-save) + (goto-line line))) + + +;; User interface +(defvar jao-random-album-buffer) +(defvar jao-random-album-add-tracks-and-play) +(defvar jao-random-album-stop) + +(defun jao-random-album-start () + (interactive) + (setq jao-random-album-p t) + (jao-random-album-next)) + +(defun jao-random-album-stop () + (interactive) + (setq jao-random-album-p nil) + (funcall jao-random-album-stop)) + +(defun jao-random-album-toggle () + (interactive) + (setq jao-random-album-p (not jao-random-album-p)) + (message "Random album %s" + (if jao-random-album-p "enabled" "disabled"))) + +(defun jao-random-album-next () + (interactive) + (with-current-buffer (get-buffer (funcall jao-random-album-buffer)) + (save-excursion + (jao-goto-random-album) + (let ((album (string-trim + (substring-no-properties (thing-at-point 'line) 0 -1)))) + (funcall jao-random-album-add-tracks-and-play) + (when jao-random-album-notify-p + (jao-notify album "Next album" jao-random-album-notify-icon)))))) + +(defun jao-random-album-reset () + (interactive) + (setq jao-random-lines nil) + (jao-random-lines-save)) + +(defun jao-random-album-setup (album-buffer add-and-play stop &optional icon) + (setq jao-random-album-buffer album-buffer + jao-random-album-add-tracks-and-play add-and-play + jao-random-album-stop stop + jao-random-album-notify-icon icon)) + + +(provide 'jao-random-album) +;;; jao-random-album.el ends here |