From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Mark Oteiza Newsgroups: gmane.emacs.devel Subject: [PATCH] improve mpc seeking Date: Fri, 22 Sep 2017 17:32:50 -0400 Message-ID: <878th61ksd.fsf@udel.edu> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1506116016 14902 195.159.176.226 (22 Sep 2017 21:33:36 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 22 Sep 2017 21:33:36 +0000 (UTC) Cc: Stefan Monnier To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Sep 22 23:33:32 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dvVZe-0003KG-Pn for ged-emacs-devel@m.gmane.org; Fri, 22 Sep 2017 23:33:27 +0200 Original-Received: from localhost ([::1]:32878 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvVZk-0002ab-GS for ged-emacs-devel@m.gmane.org; Fri, 22 Sep 2017 17:33:32 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:52834) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvVZB-0002aE-BO for emacs-devel@gnu.org; Fri, 22 Sep 2017 17:32:58 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvVZ8-0003v6-3h for emacs-devel@gnu.org; Fri, 22 Sep 2017 17:32:57 -0400 Original-Received: from mail-qk0-x230.google.com ([2607:f8b0:400d:c09::230]:55624) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dvVZ7-0003up-V9 for emacs-devel@gnu.org; Fri, 22 Sep 2017 17:32:54 -0400 Original-Received: by mail-qk0-x230.google.com with SMTP id q8so2254079qkl.12 for ; Fri, 22 Sep 2017 14:32:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=udel-edu.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version; bh=iPyS/HVuxKT/+DoAtgolh57x+9yHb+VpzHAlNC5oVhc=; b=wnAGz65VWvdEQJ8zHEJ5iWFYXWIKw+h+H6egfsRG3KPtztCYBmTwmE4+gH/Mnp3YW9 KjEOkjpbJtait+kDi9a55UwKMpqdORsd9xLtiAoC2F8UT3D3Hk2yK5+DREBa5uXW4bD/ NMWufGOaNqhxrE6HFlTpuFu+dDZfDqtCQ0jfpaAFlq2CcII2Wmd+1v/yUGBwpGQ5nu9J gmxhdLpaHTaQjqCGoJ/WQgxtM3wfNTdEkW+Tq/dNvmKSeKuqk9hYj2upyl3wHOm0wy0n QjaaDCEZxW9vJYym+Z84hwCf6Vun8qojo4xXNNTqJEFOEHwpw5h7CsXZQgBM2wvZAHKN vJ+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version; bh=iPyS/HVuxKT/+DoAtgolh57x+9yHb+VpzHAlNC5oVhc=; b=V2/BMgJ3foktW+G8mbaWQrW/4/eNMTZxCkep6zfvT1tKTxcFkJnESUJk6KosFIlRpH A9Rdb33JRjDoiU6PKPtDYMkqtIKBzVlwpvPOPzapo42BR3nF/5Mt9lKJaZIhxBsPV5DI BzNWrTgUSK3bi29hkKiX7qcx5aBrSPEaI/EEhLjrLFBBFPsB3fcqSr8bn6jf9SUz271l h/E7QYUNlFjEAesV3ZoOC/1VJVafUPiDKxzEaT1Tiw0+hCQBIkwkMZbSJgB0DlngMXuk n+lHfrlTr5g/mdpwtIDqnAjjMOrVmEEhvbr+MJOnIY8tfdG4/LWmek3lk2n3u3vV57r/ +Z8w== X-Gm-Message-State: AHPjjUiLn8riVM7deSqLkUJVyHfiNHGn8rfLsTppN8R8WZ87Mmvz6lGx pS9J/y6x9kBgYFCTRHjQ/SqH2Q== X-Google-Smtp-Source: AOwi7QBl6YLJJl9nDEbvXI2GOpjMomlTW4XL8ZQJBmB8Pe4koPtyzVZoJc+xhkUF7GQaDdjLHuxq/Q== X-Received: by 10.55.103.77 with SMTP id b74mr686741qkc.341.1506115972823; Fri, 22 Sep 2017 14:32:52 -0700 (PDT) Original-Received: from logos (pool-173-67-36-61.bltmmd.fios.verizon.net. [173.67.36.61]) by smtp.gmail.com with ESMTPSA id p7sm611341qke.78.2017.09.22.14.32.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 22 Sep 2017 14:32:52 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::230 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:218711 Archived-At: Hi, The following adds to the mpc-seek-current command. It's pretty loose regexp, i.e. you can do things like +1:2.3:200 (seek forward 1 hour + 2.3 minutes + 200 seconds) and there is the issue of string-to-number returning 0 on failure... but is otherwise convenient: -1:: (seek back one hour) 123 (go to 123 seconds) +2:30 (seek forward 2 mins, 30 seconds) I'm not sure if I'm NIHing something from somewhere else in Emacs, however. diff --git a/lisp/mpc.el b/lisp/mpc.el index c23d8ced71..98f4a03183 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -2403,10 +2403,38 @@ mpc-resume (interactive) (mpc-cmd-pause "0")) +(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)))) + (defun mpc-seek-current (pos) "Seek within current track." (interactive - (list (read-string "Position to go ([+-]seconds): "))) + (list (mpc-read-seek "Position to go ([+-][[H:]M:]seconds): "))) (mpc-cmd-seekcur pos)) (defun mpc-toggle-play ()