Function: mpc-read-seek
mpc-read-seek is a byte-compiled function defined in mpc.el.gz.
Signature
(mpc-read-seek PROMPT)
Documentation
Read a seek time.
Returns a string suitable for MPD "seekcur" protocol command.
Source Code
;; Defined in /usr/src/emacs/lisp/mpc.el.gz
(defun mpc-read-seek (prompt)
"Read a seek time.
Returns a string suitable for MPD \"seekcur\" protocol command."
(let* ((str (read-from-minibuffer prompt nil nil nil nil nil t))
(seconds "\\(?1:[[:digit:]]+\\(?:\\.[[:digit:]]*\\)?\\)")
(minsec (concat "\\(?2:[[:digit:]]+\\):" seconds "?"))
(hrminsec (concat "\\(?3:[[:digit:]]+\\):\\(?:" minsec "?\\|:\\)"))
time sign)
(setq str (string-trim str))
(when (memq (string-to-char str) '(?+ ?-))
(setq sign (string (string-to-char str)))
(setq str (substring str 1)))
(setq time
;; `string-to-number' returns 0 on failure
(cond
((string-match (concat "^" hrminsec "$") str)
(+ (* 3600 (string-to-number (match-string 3 str)))
(* 60 (string-to-number (or (match-string 2 str) "")))
(string-to-number (or (match-string 1 str) ""))))
((string-match (concat "^" minsec "$") str)
(+ (* 60 (string-to-number (match-string 2 str)))
(string-to-number (match-string 1 str))))
((string-match (concat "^" seconds "$") str)
(string-to-number (match-string 1 str)))
(t (user-error "Invalid time"))))
(setq time (number-to-string time))
(if (null sign) time (concat sign time))))