From unknown Thu Jun 19 14:01:41 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#74200 <74200@debbugs.gnu.org> To: bug#74200 <74200@debbugs.gnu.org> Subject: Status: [PATCH] Add song viewer to 'mpc' Reply-To: bug#74200 <74200@debbugs.gnu.org> Date: Thu, 19 Jun 2025 21:01:41 +0000 retitle 74200 [PATCH] Add song viewer to 'mpc' reassign 74200 emacs submitter 74200 john muhl severity 74200 normal tag 74200 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Sun Nov 03 22:27:04 2024 Received: (at submit) by debbugs.gnu.org; 4 Nov 2024 03:27:04 +0000 Received: from localhost ([127.0.0.1]:36829 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7nk7-0000jb-Dx for submit@debbugs.gnu.org; Sun, 03 Nov 2024 22:27:04 -0500 Received: from lists.gnu.org ([209.51.188.17]:44318) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7nk3-0000jB-Fj for submit@debbugs.gnu.org; Sun, 03 Nov 2024 22:27:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7nk3-0001AN-3t for bug-gnu-emacs@gnu.org; Sun, 03 Nov 2024 22:26:59 -0500 Received: from fhigh-a8-smtp.messagingengine.com ([103.168.172.159]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7nk1-0004tU-9X for bug-gnu-emacs@gnu.org; Sun, 03 Nov 2024 22:26:58 -0500 Received: from phl-compute-02.internal (phl-compute-02.phl.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 4FC7511400C6 for ; Sun, 3 Nov 2024 22:26:54 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-02.internal (MEProxy); Sun, 03 Nov 2024 22:26:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pub.pink; h=cc :content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm3; t=1730690814; x=1730777214; bh=NHon8EydSp6YquQIWCtaoLrCReby+Sc9 JFHiRa/MXDQ=; b=Cci7PB9mrpF8XDpN6cR/ySVFXOk1rLxP5HwQD45wvOOlf8l4 nUJbO6/GwomZ84FK5G55W3n2sZM7aXqic5zr++MwEcFtySLIzyTQxgnhgGGIwSsc +duVN5EZxN5CUs/wbJbYISgeptElt48jOItnj5r6Z8jXRZoaJ59K5J0JlkNzlm8x VHix/oN/4FmRI2Raa1XF3GPHyvb9JLb1jOgerEUQehCLGhTo6eiBDrYy67SmvyYD KvRsmwVW/AEFJoinzYdUD4Exlwbv+IdNwRaw6Eo4BZWt2VD7702kvQFZRCcOj8V9 rfHz06qyaBXy31FGqQo2ylL/M6BQlWHsYskCmw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1730690814; x= 1730777214; bh=NHon8EydSp6YquQIWCtaoLrCReby+Sc9JFHiRa/MXDQ=; b=U +9Lgu/uSzQEP2hzdF9mkQMHBNx0iiUzyaJO4qMN0npwCzpAvOau7lHJ6bJ/SkkZc kQ9poTlhzEQB1AqlOx4n8zwlGfj1nkV/1k5YAX0Gt/g7rk2KV7LxrcuT5AxGcJfT /9RdQLpa/Kugvlo50uaC9QiNSu41VpWtbSKAbn0Czrr0M4rX7/Hm/NgBAYITyQPH kAC/jys3BsHLtp4q7UKJKDjZdMIaYZS3Lk/Gr68gZggPsbsG7jyRacoPFzbfVGJb 5epJ1FNgJbTpf9TJzm4s774TfFBTfWjsl4RVgVDD7cXNh/zVVss99GHadrqrLQT5 bYkuy/3/ezkx5EyaHEtwg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdelhedgheelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpefhvffuff fkgggtsehttdertddttddtnecuhfhrohhmpehjohhhnhcumhhuhhhluceojhhmsehpuhgs rdhpihhnkheqnecuggftrfgrthhtvghrnhepgefhudekueehudeugffhgfegfeevhfetje ehhfeuleffgfeguedtffdvteeutedunecuvehluhhsthgvrhfuihiivgeptdenucfrrghr rghmpehmrghilhhfrhhomhepjhhmsehpuhgsrdhpihhnkhdpnhgspghrtghpthhtohepud dpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepsghughdqghhnuhdqvghmrggtshes ghhnuhdrohhrgh X-ME-Proxy: Feedback-ID: i74194916:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Sun, 3 Nov 2024 22:26:53 -0500 (EST) From: john muhl To: bug-gnu-emacs@gnu.org Subject: [PATCH] Add song viewer to 'mpc' X-Debbugs-Cc: monnier@iro.umontreal.ca Date: Sun, 03 Nov 2024 21:26:52 -0600 Message-ID: <874j4n1xxf.fsf@pub.pink> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=103.168.172.159; envelope-from=jm@pub.pink; helo=fhigh-a8-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.6 (--) Tags: patch This adds a mpc-describe-song command which brings up a buffer full of information about the selected song. From debbugs-submit-bounces@debbugs.gnu.org Sun Nov 03 22:30:03 2024 Received: (at 74200) by debbugs.gnu.org; 4 Nov 2024 03:30:03 +0000 Received: from localhost ([127.0.0.1]:36849 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7nn0-0000mS-CL for submit@debbugs.gnu.org; Sun, 03 Nov 2024 22:30:03 -0500 Received: from fout-a4-smtp.messagingengine.com ([103.168.172.147]:60013) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7nmx-0000lp-Ub for 74200@debbugs.gnu.org; Sun, 03 Nov 2024 22:30:00 -0500 Received: from phl-compute-08.internal (phl-compute-08.phl.internal [10.202.2.48]) by mailfout.phl.internal (Postfix) with ESMTP id B2F471380121; Sun, 3 Nov 2024 22:29:54 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-08.internal (MEProxy); Sun, 03 Nov 2024 22:29:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pub.pink; h=cc :cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1730690994; x=1730777394; bh=JPzvjh2duF GHxSyNRdLjLXLAmF3nf/w/JOj/WiVSr/8=; b=GWM1t7aue82zTSvyykcayp6rKY pg11zZuqr/e0vAtMwy0LHO4TmyaUVnWaysb+t6aPVVeQi44Sxp/64ZsdzRjPqMM2 LjID4si/ZfU1+DMP3YfBMBFcqltgk8shOvXZenL//TZMonTXt0vjUc7Z8XlNXB0p KrSpIrbnGF6VwXwzVMJZ0na+OB4MwSm9iyCBy0FzRJTcipvqXuaQCoh+BN/ZI18q MjeyM/9WZSLmIveHfu4ZOXdthAbFuXBF8kO27SesKU+xq19FLbO9XeYiAuGK5w5O urhKCTvg3IWgVqGPWZeXwPF7WAKswByMfSSFocSpfVNHKVCDxkPqaf3JbtxA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1730690994; x=1730777394; bh=JPzvjh2duFGHxSyNRdLjLXLAmF3nf/w/JOj /WiVSr/8=; b=YovN72PRcu8Dzk7fN0PzIMi+di0rl1PF7Uk/ZEBgUrVZoJfyMG2 RwofUhCGZ9CYgHc77jHsrrJLWBeiuZL1NXAjOKpCvAD6GL5g8jTo5gS7qzu4aoIR zYsS5IyNgFtR/3DSxDgCV1+a/wQfEUy2zjhrGJ5BLAdtZqw1LS0ci1PZVKSSxo+P cm0AOgfbzgpyjtcp/q/yRX4QRyUtnEu7lO8jf6O6NdI+lr0tNkbyIH3dXLF43JSJ BKUwvtu7gWeSbmUit7i7pvms9oVvG8+IE6cn26A1lh/nrcQSdhdqacta3oUIEKcJ tKBo/RHxfbyusGStXs9/yAvbgIsLDHHFlLA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdelhedgheelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevuf gjfhgffffkgggtsehmtderredtredtnecuhfhrohhmpehjohhhnhcumhhuhhhluceojhhm sehpuhgsrdhpihhnkheqnecuggftrfgrthhtvghrnhepffduledtfffhjeduheeghfefle dtfeetfffgtdevleeiudehueffudejveffvddtnecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhmsehpuhgsrdhpihhnkhdpnhgspghrtghpth htohepvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepmhhonhhnihgvrhesihhr ohdruhhmohhnthhrvggrlhdrtggrpdhrtghpthhtohepjeegvddttdesuggvsggsuhhgsh drghhnuhdrohhrgh X-ME-Proxy: Feedback-ID: i74194916:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 3 Nov 2024 22:29:54 -0500 (EST) From: john muhl To: 74200@debbugs.gnu.org Subject: Re: bug#74200: [PATCH] Add song viewer to 'mpc' In-Reply-To: <874j4n1xxf.fsf@pub.pink> (john muhl's message of "Sun, 03 Nov 2024 21:26:52 -0600") References: <874j4n1xxf.fsf@pub.pink> User-Agent: mu4e 1.12.1; emacs 31.0.50 Date: Sun, 03 Nov 2024 21:29:53 -0600 Message-ID: <87y11zznf2.fsf@pub.pink> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 74200 Cc: monnier@iro.umontreal.ca X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0001-Add-song-viewer-to-mpc-Bug-74200.patch Content-Transfer-Encoding: quoted-printable >From 861491d591a4e03bf4d4ceff001fd5036c0afef7 Mon Sep 17 00:00:00 2001 From: john muhl Date: Sat, 19 Oct 2024 18:25:41 -0500 Subject: [PATCH] Add song viewer to 'mpc' (Bug#74200) * lisp/mpc.el (mpc-describe-song): New command. (mpc-mode-map): Bind "i" to 'mpc-describe-song'. (mpc-mode-menu): Add menu item. (mpc-secs-to-time): Ensure secs argument is an integer. (mpc-song-viewer-empty, mpc-song-viewer-tag): (mpc-song-viewer-value): New face. (mpc-song-viewer-tags): New option. (mpc-song-viewer-tagtypes): New constant. --- etc/NEWS | 7 ++++ lisp/mpc.el | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 111 insertions(+), 2 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index f8e17da0592..e9466f7f9f3 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -619,6 +619,13 @@ When non-nil, MPC will crossfade between songs for the= specified number of seconds. Crossfading can be toggled using the command 'mpc-toggle-crossfade' or from the MPC menu. =20 +*** New command 'mpc-describe-song'. +This command displays information about the currently playing song or +song at point in the MPC-Songs buffer. The list of tags to display can +be customized using the new user option 'mpc-song-viewer-tags' and the +appearance of the list with the new faces 'mpc-song-viewer-tag', +'mpc-song-viewer-value', and 'mpc-song-viewer-empty'. + ** VC =20 --- diff --git a/lisp/mpc.el b/lisp/mpc.el index 0a43b09c11d..7b3737aa57f 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -63,7 +63,7 @@ ;; e.g. filename regexp -> compilation flag ;; - window/buffer management. ;; - menubar, tooltips, ... -;; - add mpc-describe-song, mpc-describe-album, ... +;; - add mpc-describe-album, ... ;; - add import/export commands (especially export to an MP3 player). ;; - add a real notion of album (as opposed to just album-name): ;; if all songs with same album-name have same artist -> it's an album @@ -95,6 +95,8 @@ =20 (require 'notifications) =20 +(require 'vtable) + (defgroup mpc () "Client for the Music Player Daemon (mpd)." :prefix "mpc-" @@ -978,11 +980,15 @@ mpc-cover-image-re :version "28.1") =20 (defun mpc-secs-to-time (secs) + "Convert SECS from a string, integer or float value to a time string." ;; We could use `format-seconds', but it doesn't seem worth the trouble ;; because we'd still need to check (>=3D secs (* 60 100)) since the spe= cial ;; %z only allows us to drop the large units for small values but ;; not to drop the small units for large values. (if (stringp secs) (setq secs (string-to-number secs))) + ;; Ensure secs is an integer. The Time tag has been deprecated by MPD + ;; and its replacement (the duration tag) includes fractional seconds. + (if (floatp secs) (setq secs (round secs))) (if (>=3D secs (* 60 100)) ;More than 100 minutes. (format "%dh%02d" ;"%d:%02d:%02d" (/ secs 3600) (% (/ secs 60) 60)) ;; (% secs 60) @@ -1180,7 +1186,8 @@ mpc-mode-map ">" #'mpc-next "<" #'mpc-prev "g" #'mpc-seek-current - "o" #'mpc-goto-playing-song) + "o" #'mpc-goto-playing-song + "i" #'mpc-describe-song) =20 (easy-menu-define mpc-mode-menu mpc-mode-map "Menu for MPC mode." @@ -1189,6 +1196,7 @@ mpc-mode-menu ["Next Track" mpc-next] ;FIXME: Add =E2=87=A5 there? ["Previous Track" mpc-prev] ;FIXME: Add =E2=87=A4 there? ["Seek Within Track" mpc-seek-current] + ["Song Details" mpc-describe-song] "--" ["Repeat Playlist" mpc-toggle-repeat :style toggle :selected (member '(repeat . "1") mpc-status)] @@ -2862,6 +2870,100 @@ mpc-notifications-notify :app-icon icon :replaces-id mpc--notifications-id)))) =20 +;;; Song Viewer ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;= ;; + +(defface mpc-song-viewer-value + '((t (:inherit vtable))) + "Face for tag values in the MPC song viewer.") + +(defface mpc-song-viewer-tag + '((t (:inherit (mpc-song-viewer-value bold)))) + "Face for tag types in the MPC song viewer.") + +(defface mpc-song-viewer-empty + '((t (:inherit (mpc-song-viewer-value italic shadow)))) + "Face for empty tag values in the MPC song viewer.") + +(defconst mpc-song-viewer-tagtypes + (sort (append '("Bitrate" "Duration" "File" "Format") (mpc-cmd-tagtypes)= )) + "Tag types available for use in `mpc-song-viewer-tags'.") + +(defcustom mpc-song-viewer-tags + '("Title" "Artist" "Album" "Performer" "Composer" + "Date" "Duration" "Disc" "Track" "Genre" "File") + "The list of tags to display with `mpc-describe-song'. + +See `mpc-song-viewer-tagtypes' for a list of available tags." + :version "31.1" + :type '(repeat string)) + +(defun mpc-describe-song (&optional file) + "Show details of the selected song or FILE in the MPC song viewer. + +If there is no song at point then information about the currently +playing song is displayed." + (interactive + ;; Handle being called from the context menu. In that case you want + ;; to see details for the song you clicked on to invoke the menu not + ;; whatever `point' happens to be on at that time. + (list (when-let* ((event last-nonmenu-event) + ((listp event)) + (position (nth 1 (event-start event)))) + (get-text-property position 'mpc-file)))) + (let ((tags (or (when (and file (stringp file)) + (mpc-proc-cmd-to-alist (list "search" "file" file))) + (when-let* (((string=3D (buffer-name) "*MPC-Songs*")) + (file (get-text-property (point) 'mpc-file))) + (mpc-proc-cmd-to-alist (list "search" "file" file))) + (when (assoc 'file mpc-status) mpc-status))) + (buffer "*MPC Song Viewer*")) + (when tags + (with-current-buffer (get-buffer-create buffer) + (special-mode) + (visual-line-mode) + (let ((buffer-read-only nil)) + (erase-buffer) + (make-vtable + :columns '(( :name "Tag" + :align right + :min-width 3 + :displayer + (lambda (tag &rest _) + (propertize tag 'face 'mpc-song-viewer-tag))) + ( :name "Value" + :align left + :min-width 5 + :displayer + (lambda (value &rest _) + (if (and value (not (string-blank-p value))) + (propertize value 'face 'mpc-song-viewer-val= ue) + (propertize "empty" 'face 'mpc-song-viewer-emp= ty))))) + :objects (mapcar + (lambda (tag) + (pcase tag + ("Bitrate" + (list tag (let ((bitrate (alist-get 'bitrate tag= s))) + (when bitrate + (format "%s kpbs" bitrate))))) + ("Duration" (list tag (mpc-secs-to-time + (alist-get 'duration tags)= ))) + ("File" (list tag (alist-get 'file tags))) + ;; Concatenate all the values of tags which may + ;; occur multiple times. + ((or "Composer" "Genre" "Performer") + (list tag (mapconcat + (lambda (val) (cdr val)) + (seq-filter + (lambda (val) (eq (car val) (intern = tag))) + tags) + "; "))) + (_ (list tag (alist-get (intern tag) tags))))) + mpc-song-viewer-tags)) + (goto-char (point-min)))) + (select-window (display-buffer buffer '((display-buffer-reuse-window + display-buffer-same-window) + (reusable-frames . t))))))) + ;;; Toplevel ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;= ;; =20 (defcustom mpc-frame-alist '((name . "MPC") (tool-bar-lines . 1) --=20 2.46.2 --=-=-= Content-Type: text/plain john muhl writes: > Tags: patch > > This adds a mpc-describe-song command which brings up a buffer > full of information about the selected song. --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 04 07:46:16 2024 Received: (at 74200) by debbugs.gnu.org; 4 Nov 2024 12:46:16 +0000 Received: from localhost ([127.0.0.1]:39640 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7wTH-0001Tf-HL for submit@debbugs.gnu.org; Mon, 04 Nov 2024 07:46:16 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37052) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7wTC-0001TU-ME for 74200@debbugs.gnu.org; Mon, 04 Nov 2024 07:46:14 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t7wT5-0002yu-R3; Mon, 04 Nov 2024 07:46:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=RXkTIoUd7KnM2kzGMx3YGuQ6y9x8IEQeSm3nKz+5UWE=; b=WyEr5RMpCV4q l07ABNBaD6pmVziycsRzs+XP+p/mi1MZmhdh0Rn3quoWNdipcKeWJZwvDPNCdIAPTk1KhraEAOyKN aGnltUbUskkdDQKtd/DD7S637itQirGxItwJ23QR+vNfVnJguIxa8/ZaCBmbKOvf8WeoC3GwUhM4r WmVY2NCJndagDuDzvTSdBjg8+CkzzEzJYcFR4/oPWyed4YflKwHXMzdoOiFsXc7O+9hisL/WLcS9E YHYYntp8Nd9i6L0y2wMsHtLuQQ6zdTYlO24UVBJELy1X0qtSTDSHTdCHAREB3fMLTgHzUD6foz3S6 GjHcobQVyyDsJIAUPa2S/w==; Date: Mon, 04 Nov 2024 14:46:02 +0200 Message-Id: <86v7x3upyt.fsf@gnu.org> From: Eli Zaretskii To: john muhl In-Reply-To: <87y11zznf2.fsf@pub.pink> (message from john muhl on Sun, 03 Nov 2024 21:29:53 -0600) Subject: Re: bug#74200: [PATCH] Add song viewer to 'mpc' References: <874j4n1xxf.fsf@pub.pink> <87y11zznf2.fsf@pub.pink> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74200 Cc: monnier@iro.umontreal.ca, 74200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: monnier@iro.umontreal.ca > From: john muhl > Date: Sun, 03 Nov 2024 21:29:53 -0600 > > >From 861491d591a4e03bf4d4ceff001fd5036c0afef7 Mon Sep 17 00:00:00 2001 > From: john muhl > Date: Sat, 19 Oct 2024 18:25:41 -0500 > Subject: [PATCH] Add song viewer to 'mpc' (Bug#74200) > > * lisp/mpc.el (mpc-describe-song): New command. > (mpc-mode-map): Bind "i" to 'mpc-describe-song'. > (mpc-mode-menu): Add menu item. > (mpc-secs-to-time): Ensure secs argument is an integer. > (mpc-song-viewer-empty, mpc-song-viewer-tag): > (mpc-song-viewer-value): New face. > (mpc-song-viewer-tags): New option. > (mpc-song-viewer-tagtypes): New constant. > --- > etc/NEWS | 7 ++++ > lisp/mpc.el | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++- > 2 files changed, 111 insertions(+), 2 deletions(-) Thanks, a few minor comments. > --- a/etc/NEWS > +++ b/etc/NEWS > @@ -619,6 +619,13 @@ When non-nil, MPC will crossfade between songs for the specified number > of seconds. Crossfading can be toggled using the command > 'mpc-toggle-crossfade' or from the MPC menu. > > +*** New command 'mpc-describe-song'. > +This command displays information about the currently playing song or > +song at point in the MPC-Songs buffer. The list of tags to display can > +be customized using the new user option 'mpc-song-viewer-tags' and the > +appearance of the list with the new faces 'mpc-song-viewer-tag', > +'mpc-song-viewer-value', and 'mpc-song-viewer-empty'. This entry should be marked with "---", as we don't intend to document this in any manual. > +(defcustom mpc-song-viewer-tags > + '("Title" "Artist" "Album" "Performer" "Composer" > + "Date" "Duration" "Disc" "Track" "Genre" "File") > + "The list of tags to display with `mpc-describe-song'. Each new defcustom should have a :version tag. From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 04 08:25:30 2024 Received: (at 74200) by debbugs.gnu.org; 4 Nov 2024 13:25:30 +0000 Received: from localhost ([127.0.0.1]:39916 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7x5F-0002oH-Mz for submit@debbugs.gnu.org; Mon, 04 Nov 2024 08:25:30 -0500 Received: from fhigh-b2-smtp.messagingengine.com ([202.12.124.153]:42897) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t7x5C-0002o9-LS for 74200@debbugs.gnu.org; Mon, 04 Nov 2024 08:25:27 -0500 Received: from phl-compute-08.internal (phl-compute-08.phl.internal [10.202.2.48]) by mailfhigh.stl.internal (Postfix) with ESMTP id CEA60254010A; Mon, 4 Nov 2024 08:25:20 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-08.internal (MEProxy); Mon, 04 Nov 2024 08:25:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pub.pink; h=cc :cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1730726720; x=1730813120; bh=6/jgyUWOIe Z+zNex1HZGV3f7UiB8akwTUevra3O8IsI=; b=g+ts3r8Cc3oiVJtXWuRneFeAK1 V3H+0ApG0VljsIVKGBL3EdtlpbPk9ZGtTnlcx7dYNlJ1p1RGxaUu+WWMy5ggVf5m 0w3FM6vyMw5Pm9wNJpAvjq9A0gFRlJTZea0Dr9m1InSt7XOH6qmjjAevSSLgcORx R1dl1F17I86nOlKDeoI6yIC8wh24nRc72uubgErlqoREn3qivWYILvWEcH3MNyeO GRziTXv4Rt8A/8Ov7rY7J2w/x6UTINhmKWLatxs5iXtrxWTWcJ2awj87JXMvJ7Zh ByKIZ2qPbMqUqJWJ3uHf8FOLCwJ3DfqJDMzmNONtr1Cx+QEpbhC3UoS4P4dg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1730726720; x=1730813120; bh=6/jgyUWOIeZ+zNex1HZGV3f7UiB8akwTUev ra3O8IsI=; b=mQYyoRUuru4B12Zfdo1VoqBQPmy1heSeM1oHV6doAFnouUvWnHe 8PgtFOeLFaB33PvC3V8HiNXeL8RMXIog/sfALPakBJ5B5/zSQbT3ZWGFt2m85Shq 3tLy2EkYWoCYuxcYBCnOfJDHiuyLhiH5Mn2iJLXb/KRg6LSm7mwqnhdyMZlvElon s3l4CXVG2fWX4D89ORpc1IGW49Dti4FO7w6gs5xn2GUSjZO9g96qGmouLoTnNwmZ 1Ha8JYEbcAp9sA7Myk3lPzgiQlNTEWMvC80oxezIWjjX3cmGUuqqZGgmdt3FeGCJ AnjCtgVTRTBWImb3M+HB+uYH+oXJFiVObIg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdeliedghedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhephffvvefujghffgffkfggtgesmhdtreertdertden ucfhrhhomhepjhhohhhnuchmuhhhlhcuoehjmhesphhusgdrphhinhhkqeenucggtffrrg htthgvrhhnpeffudeltdffhfejudehgefhfeeltdefteffgfdtveelieduheeuffdujeev ffdvtdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpe hjmhesphhusgdrphhinhhkpdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopehmohhnnhhivghrsehirhhordhumhhonhhtrhgvrghlrdgtrgdprh gtphhtthhopeejgedvtddtseguvggssghughhsrdhgnhhurdhorhhgpdhrtghpthhtohep vghlihiisehgnhhurdhorhhg X-ME-Proxy: Feedback-ID: i74194916:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 4 Nov 2024 08:25:20 -0500 (EST) From: john muhl To: Eli Zaretskii Subject: Re: bug#74200: [PATCH] Add song viewer to 'mpc' In-Reply-To: <86v7x3upyt.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 04 Nov 2024 14:46:02 +0200") References: <874j4n1xxf.fsf@pub.pink> <87y11zznf2.fsf@pub.pink> <86v7x3upyt.fsf@gnu.org> User-Agent: mu4e 1.12.1; emacs 31.0.50 Date: Mon, 04 Nov 2024 07:25:18 -0600 Message-ID: <87ses7xha9.fsf@pub.pink> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 74200 Cc: monnier@iro.umontreal.ca, 74200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/plain Eli Zaretskii writes: >> --- a/etc/NEWS >> +++ b/etc/NEWS >> @@ -619,6 +619,13 @@ When non-nil, MPC will crossfade between songs >> for the specified number >> of seconds. Crossfading can be toggled using the command >> 'mpc-toggle-crossfade' or from the MPC menu. >> >> +*** New command 'mpc-describe-song'. >> +This command displays information about the currently playing song or >> +song at point in the MPC-Songs buffer. The list of tags to display can >> +be customized using the new user option 'mpc-song-viewer-tags' and the >> +appearance of the list with the new faces 'mpc-song-viewer-tag', >> +'mpc-song-viewer-value', and 'mpc-song-viewer-empty'. > > This entry should be marked with "---", as we don't intend to document > this in any manual. Fixed. Added one to previous entry too which slipped through unnoticed. >> +(defcustom mpc-song-viewer-tags >> + '("Title" "Artist" "Album" "Performer" "Composer" >> + "Date" "Duration" "Disc" "Track" "Genre" "File") >> + "The list of tags to display with `mpc-describe-song'. > > Each new defcustom should have a :version tag. Hmm. Not sure how that got lost in transmission but hopefully it makes it through this time. Thanks for looking. --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0001-Add-song-viewer-to-mpc-Bug-74200.patch Content-Transfer-Encoding: quoted-printable >From 38add009b751900332f4ba9006ef62dcae472e69 Mon Sep 17 00:00:00 2001 From: john muhl Date: Sat, 19 Oct 2024 18:25:41 -0500 Subject: [PATCH] Add song viewer to 'mpc' (Bug#74200) * lisp/mpc.el (mpc-describe-song): New command. (mpc-mode-map): Bind "i" to 'mpc-describe-song'. (mpc-mode-menu): Add menu item. (mpc-secs-to-time): Ensure secs argument is an integer. (mpc-song-viewer-empty, mpc-song-viewer-tag): (mpc-song-viewer-value): New face. (mpc-song-viewer-tags): New option. (mpc-song-viewer-tagtypes): New constant. --- etc/NEWS | 9 +++++ lisp/mpc.el | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 113 insertions(+), 2 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index f8e17da0592..852006e3dde 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -614,11 +614,20 @@ a desktop notification when the song changes, using customized using the new user options 'mpc-notifications-title' and 'mpc-notifications-body'. =20 +--- *** New user option 'mpc-crossfade-time'. When non-nil, MPC will crossfade between songs for the specified number of seconds. Crossfading can be toggled using the command 'mpc-toggle-crossfade' or from the MPC menu. =20 +--- +*** New command 'mpc-describe-song'. +This command displays information about the currently playing song or +song at point in the MPC-Songs buffer. The list of tags to display can +be customized using the new user option 'mpc-song-viewer-tags' and the +appearance of the list with the new faces 'mpc-song-viewer-tag', +'mpc-song-viewer-value', and 'mpc-song-viewer-empty'. + ** VC =20 --- diff --git a/lisp/mpc.el b/lisp/mpc.el index 0a43b09c11d..7b3737aa57f 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -63,7 +63,7 @@ ;; e.g. filename regexp -> compilation flag ;; - window/buffer management. ;; - menubar, tooltips, ... -;; - add mpc-describe-song, mpc-describe-album, ... +;; - add mpc-describe-album, ... ;; - add import/export commands (especially export to an MP3 player). ;; - add a real notion of album (as opposed to just album-name): ;; if all songs with same album-name have same artist -> it's an album @@ -95,6 +95,8 @@ =20 (require 'notifications) =20 +(require 'vtable) + (defgroup mpc () "Client for the Music Player Daemon (mpd)." :prefix "mpc-" @@ -978,11 +980,15 @@ mpc-cover-image-re :version "28.1") =20 (defun mpc-secs-to-time (secs) + "Convert SECS from a string, integer or float value to a time string." ;; We could use `format-seconds', but it doesn't seem worth the trouble ;; because we'd still need to check (>=3D secs (* 60 100)) since the spe= cial ;; %z only allows us to drop the large units for small values but ;; not to drop the small units for large values. (if (stringp secs) (setq secs (string-to-number secs))) + ;; Ensure secs is an integer. The Time tag has been deprecated by MPD + ;; and its replacement (the duration tag) includes fractional seconds. + (if (floatp secs) (setq secs (round secs))) (if (>=3D secs (* 60 100)) ;More than 100 minutes. (format "%dh%02d" ;"%d:%02d:%02d" (/ secs 3600) (% (/ secs 60) 60)) ;; (% secs 60) @@ -1180,7 +1186,8 @@ mpc-mode-map ">" #'mpc-next "<" #'mpc-prev "g" #'mpc-seek-current - "o" #'mpc-goto-playing-song) + "o" #'mpc-goto-playing-song + "i" #'mpc-describe-song) =20 (easy-menu-define mpc-mode-menu mpc-mode-map "Menu for MPC mode." @@ -1189,6 +1196,7 @@ mpc-mode-menu ["Next Track" mpc-next] ;FIXME: Add =E2=87=A5 there? ["Previous Track" mpc-prev] ;FIXME: Add =E2=87=A4 there? ["Seek Within Track" mpc-seek-current] + ["Song Details" mpc-describe-song] "--" ["Repeat Playlist" mpc-toggle-repeat :style toggle :selected (member '(repeat . "1") mpc-status)] @@ -2862,6 +2870,100 @@ mpc-notifications-notify :app-icon icon :replaces-id mpc--notifications-id)))) =20 +;;; Song Viewer ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;= ;; + +(defface mpc-song-viewer-value + '((t (:inherit vtable))) + "Face for tag values in the MPC song viewer.") + +(defface mpc-song-viewer-tag + '((t (:inherit (mpc-song-viewer-value bold)))) + "Face for tag types in the MPC song viewer.") + +(defface mpc-song-viewer-empty + '((t (:inherit (mpc-song-viewer-value italic shadow)))) + "Face for empty tag values in the MPC song viewer.") + +(defconst mpc-song-viewer-tagtypes + (sort (append '("Bitrate" "Duration" "File" "Format") (mpc-cmd-tagtypes)= )) + "Tag types available for use in `mpc-song-viewer-tags'.") + +(defcustom mpc-song-viewer-tags + '("Title" "Artist" "Album" "Performer" "Composer" + "Date" "Duration" "Disc" "Track" "Genre" "File") + "The list of tags to display with `mpc-describe-song'. + +See `mpc-song-viewer-tagtypes' for a list of available tags." + :version "31.1" + :type '(repeat string)) + +(defun mpc-describe-song (&optional file) + "Show details of the selected song or FILE in the MPC song viewer. + +If there is no song at point then information about the currently +playing song is displayed." + (interactive + ;; Handle being called from the context menu. In that case you want + ;; to see details for the song you clicked on to invoke the menu not + ;; whatever `point' happens to be on at that time. + (list (when-let* ((event last-nonmenu-event) + ((listp event)) + (position (nth 1 (event-start event)))) + (get-text-property position 'mpc-file)))) + (let ((tags (or (when (and file (stringp file)) + (mpc-proc-cmd-to-alist (list "search" "file" file))) + (when-let* (((string=3D (buffer-name) "*MPC-Songs*")) + (file (get-text-property (point) 'mpc-file))) + (mpc-proc-cmd-to-alist (list "search" "file" file))) + (when (assoc 'file mpc-status) mpc-status))) + (buffer "*MPC Song Viewer*")) + (when tags + (with-current-buffer (get-buffer-create buffer) + (special-mode) + (visual-line-mode) + (let ((buffer-read-only nil)) + (erase-buffer) + (make-vtable + :columns '(( :name "Tag" + :align right + :min-width 3 + :displayer + (lambda (tag &rest _) + (propertize tag 'face 'mpc-song-viewer-tag))) + ( :name "Value" + :align left + :min-width 5 + :displayer + (lambda (value &rest _) + (if (and value (not (string-blank-p value))) + (propertize value 'face 'mpc-song-viewer-val= ue) + (propertize "empty" 'face 'mpc-song-viewer-emp= ty))))) + :objects (mapcar + (lambda (tag) + (pcase tag + ("Bitrate" + (list tag (let ((bitrate (alist-get 'bitrate tag= s))) + (when bitrate + (format "%s kpbs" bitrate))))) + ("Duration" (list tag (mpc-secs-to-time + (alist-get 'duration tags)= ))) + ("File" (list tag (alist-get 'file tags))) + ;; Concatenate all the values of tags which may + ;; occur multiple times. + ((or "Composer" "Genre" "Performer") + (list tag (mapconcat + (lambda (val) (cdr val)) + (seq-filter + (lambda (val) (eq (car val) (intern = tag))) + tags) + "; "))) + (_ (list tag (alist-get (intern tag) tags))))) + mpc-song-viewer-tags)) + (goto-char (point-min)))) + (select-window (display-buffer buffer '((display-buffer-reuse-window + display-buffer-same-window) + (reusable-frames . t))))))) + ;;; Toplevel ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;= ;; =20 (defcustom mpc-frame-alist '((name . "MPC") (tool-bar-lines . 1) --=20 2.46.2 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Nov 08 14:20:32 2024 Received: (at 74200) by debbugs.gnu.org; 8 Nov 2024 19:20:32 +0000 Received: from localhost ([127.0.0.1]:52190 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t9UX2-0005ze-80 for submit@debbugs.gnu.org; Fri, 08 Nov 2024 14:20:32 -0500 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:40159) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t9UWx-0005zP-UI for 74200@debbugs.gnu.org; Fri, 08 Nov 2024 14:20:30 -0500 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 926DE44463C; Fri, 8 Nov 2024 14:20:22 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1731093621; bh=CTxO4EgIXdrHXtX9rbQ7ntHPr/bhZkZsjITyRu0VBGE=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=N1soSwxIa+PCtMRwR0A9cnZpioLk6+9GhgZQ8R+rHf44yUGg4PIanSjgic3b8aNBn /i8UHLXLz2z+4nAnTVK99xE00Gs9Vd3N7UTItTnopYZVIfGLjMTSkNVew4lrBjRp6B bGcTqx3jgsXtjj/3hW33lrN8P2eg4hfZouv7iXuzAMie4q2FACSUMhc/A7oHcsQGDX u20GWHyrtxgnwYOmQLP2iK923GGutwSuDtS5vj8Ef+pfcx1TaZwMwnvtCUttJ60uKL YifsKCbCj8JAPu7j9TOhG8xUHopcEnEShZuxtivBJ6+lgKLKgApPlsu8w7c+Sx4op0 +LCEdxDkvHmRg== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 0320F444639; Fri, 8 Nov 2024 14:20:21 -0500 (EST) Received: from asado (bras-base-mtrlpq0776w-grc-08-184-145-223-228.dsl.bell.ca [184.145.223.228]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id E24A7120489; Fri, 8 Nov 2024 14:20:20 -0500 (EST) From: Stefan Monnier To: john muhl Subject: Re: bug#74200: [PATCH] Add song viewer to 'mpc' In-Reply-To: <87ses7xha9.fsf@pub.pink> (john muhl's message of "Mon, 04 Nov 2024 07:25:18 -0600") Message-ID: References: <874j4n1xxf.fsf@pub.pink> <87y11zznf2.fsf@pub.pink> <86v7x3upyt.fsf@gnu.org> <87ses7xha9.fsf@pub.pink> Date: Fri, 08 Nov 2024 14:20:20 -0500 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.095 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74200 Cc: Eli Zaretskii , 74200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > + "i" #'mpc-describe-song) What about using "d" (i.e. the "describe" mnemonic instead of the "info" mnemonic)? > +(defconst mpc-song-viewer-tagtypes > + (sort (append '("Bitrate" "Duration" "File" "Format") (mpc-cmd-tagtypes))) > + "Tag types available for use in `mpc-song-viewer-tags'.") Hmm... running `mpc-cmd-tagtypes` when we load the file seems risky: we may not know the `mpc-host` yet, or any other thing may go wrong. > +(defun mpc-describe-song (&optional file) Any reason we can't make the argument mandatory? > + (when tags > + (with-current-buffer (get-buffer-create buffer) > + (special-mode) > + (visual-line-mode) > + (let ((buffer-read-only nil)) This should bind `inhibit-read-only` instead. > + (select-window (display-buffer buffer '((display-buffer-reuse-window > + display-buffer-same-window) > + (reusable-frames . t))))))) Why use `select-window + display-buffer` instead of `pop-to-buffer`? Stefan From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 12 20:01:28 2024 Received: (at 74200) by debbugs.gnu.org; 13 Nov 2024 01:01:28 +0000 Received: from localhost ([127.0.0.1]:40053 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tB1l9-0006up-Pi for submit@debbugs.gnu.org; Tue, 12 Nov 2024 20:01:28 -0500 Received: from fhigh-b6-smtp.messagingengine.com ([202.12.124.157]:38395) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tB1l7-0006uQ-2D for 74200@debbugs.gnu.org; Tue, 12 Nov 2024 20:01:26 -0500 Received: from phl-compute-04.internal (phl-compute-04.phl.internal [10.202.2.44]) by mailfhigh.stl.internal (Postfix) with ESMTP id 6BB6825400DE; Tue, 12 Nov 2024 20:01:19 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-04.internal (MEProxy); Tue, 12 Nov 2024 20:01:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pub.pink; h=cc :cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1731459679; x=1731546079; bh=CQRdGn1Ik5 6PdvLtjaGQ0tvtpUSsi6oM/nGTXfHopbM=; b=J90kMGIcvhvxVGUswk/pqKpAZv Zc5Le91w60wX6m7DaFSwIFmcfXKCyR4ucaWCRLriqRdcQWatLDVIEq7Qph7SQHpH PiFH2r+2efPWNOB50qsf/6C8AcHzU2WDdHGh9kRLUITM7rgVo2smxKoAP2PkKeJf jhtJjdVDQ1+19n2WDylOtwKWUXIE+7aNs+X4U8idb/YpawOPdkqsG1tc8ZmMe2TC u6fjISeDVtsocvdHgtJRBH/u2bwa3ovwr/DOEbOpL+cBWEPRVnaxOQCGAdhCXnZg z1D5FZiJcTi0ANgDkWP7F3+evQncX+VERDKoukbStA3AM0vb1kw3DOmwVKFw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1731459679; x=1731546079; bh=CQRdGn1Ik56PdvLtjaGQ0tvtpUSsi6oM/nG TXfHopbM=; b=ckERH0P9CFtcmcVY/UHEVfn6I2B7OTYr2fcqb5A0lVP0KUQCgyj nYjqXnJW+Q6dl8OAlq61lt0/OE6o/rt86ynBuM/QYbm/ZP1eoLIOUhjxYWp/cDS+ iAqY3uiHItgZeAUMpH+xVBNk5hBUDrld2ofs4kL5eEOTCLoJsKCe7u6tlQ1g2Ubn spRkrNB1YrxYF2foDM6xBlQqRMfpolBLCN8LQuxfbkb8XApBb1Ohr/SA2spZFG59 xfkj/1VoQAETFH/WCy4k+1qEgrXsQOR9DDA41/YNoVfB7Roa/XwjRoUqLJ83xU3A 6W2sT8dI2Q8zsNYGaFGdoBI8JNaWZDLfrAg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudehgddvlecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdpuffr tefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnth hsucdlqddutddtmdenucfjughrpefhvfevufgjfhgffffkgggtsehmtderredtredtnecu hfhrohhmpehjohhhnhcumhhuhhhluceojhhmsehpuhgsrdhpihhnkheqnecuggftrfgrth htvghrnhepffduledtfffhjeduheeghfefledtfeetfffgtdevleeiudehueffudejveff vddtnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepjh hmsehpuhgsrdhpihhnkhdpnhgspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhht pdhrtghpthhtohepjeegvddttdesuggvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtth hopegvlhhiiiesghhnuhdrohhrghdprhgtphhtthhopehmohhnnhhivghrsehirhhordhu mhhonhhtrhgvrghlrdgtrg X-ME-Proxy: Feedback-ID: i74194916:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 12 Nov 2024 20:01:18 -0500 (EST) From: john muhl To: Stefan Monnier Subject: Re: bug#74200: [PATCH] Add song viewer to 'mpc' In-Reply-To: (Stefan Monnier's message of "Fri, 08 Nov 2024 14:20:20 -0500") References: <874j4n1xxf.fsf@pub.pink> <87y11zznf2.fsf@pub.pink> <86v7x3upyt.fsf@gnu.org> <87ses7xha9.fsf@pub.pink> User-Agent: mu4e 1.12.1; emacs 31.0.50 Date: Tue, 12 Nov 2024 19:01:17 -0600 Message-ID: <875xos6j6q.fsf@pub.pink> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 74200 Cc: Eli Zaretskii , 74200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/plain Stefan Monnier writes: >> + "i" #'mpc-describe-song) > > What about using "d" (i.e. the "describe" mnemonic instead of the "info" > mnemonic)? Done. >> +(defconst mpc-song-viewer-tagtypes >> + (sort (append '("Bitrate" "Duration" "File" "Format") (mpc-cmd-tagtypes))) >> + "Tag types available for use in `mpc-song-viewer-tags'.") > > Hmm... running `mpc-cmd-tagtypes` when we load the file seems risky: we > may not know the `mpc-host` yet, or any other thing may go wrong. Right you are. The tags are always the same anyway so I put a note in the docstring and got rid of the risky constant. >> +(defun mpc-describe-song (&optional file) > > Any reason we can't make the argument mandatory? Nope. >> + (when tags >> + (with-current-buffer (get-buffer-create buffer) >> + (special-mode) >> + (visual-line-mode) >> + (let ((buffer-read-only nil)) > > This should bind `inhibit-read-only` instead. Fixed. >> + (select-window (display-buffer buffer '((display-buffer-reuse-window >> + display-buffer-same-window) >> + (reusable-frames . t))))))) > > Why use `select-window + display-buffer` instead of `pop-to-buffer`? Elsewhere I was told not to use pop-to-buffer in new code and I believe everything anyone tells me. --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0001-Add-song-viewer-to-mpc-Bug-74200.patch Content-Transfer-Encoding: quoted-printable >From 28a1710f4f40b9de88719ea6ffa1893913195e11 Mon Sep 17 00:00:00 2001 From: john muhl Date: Sat, 19 Oct 2024 18:25:41 -0500 Subject: [PATCH] Add song viewer to 'mpc' (Bug#74200) * lisp/mpc.el (mpc-describe-song): New command. (mpc-mode-map): Bind "d" to 'mpc-describe-song'. (mpc-mode-menu): Add menu item. (mpc-secs-to-time): Ensure secs argument is an integer. (mpc-song-viewer-empty, mpc-song-viewer-tag): (mpc-song-viewer-value): New face. (mpc-song-viewer-tags): New option. --- etc/NEWS | 9 +++++ lisp/mpc.el | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 111 insertions(+), 2 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 0a08527b2e5..9beec8d1770 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -654,11 +654,20 @@ a desktop notification when the song changes, using customized using the new user options 'mpc-notifications-title' and 'mpc-notifications-body'. =20 +--- *** New user option 'mpc-crossfade-time'. When non-nil, MPC will crossfade between songs for the specified number of seconds. Crossfading can be toggled using the command 'mpc-toggle-crossfade' or from the MPC menu. =20 +--- +*** New command 'mpc-describe-song'. +This command displays information about the currently playing song or +song at point in the MPC-Songs buffer. The list of tags to display can +be customized using the new user option 'mpc-song-viewer-tags' and the +appearance of the list with the new faces 'mpc-song-viewer-tag', +'mpc-song-viewer-value', and 'mpc-song-viewer-empty'. + ** VC =20 --- diff --git a/lisp/mpc.el b/lisp/mpc.el index 0a43b09c11d..a0ecb21e454 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -63,7 +63,7 @@ ;; e.g. filename regexp -> compilation flag ;; - window/buffer management. ;; - menubar, tooltips, ... -;; - add mpc-describe-song, mpc-describe-album, ... +;; - add mpc-describe-album, ... ;; - add import/export commands (especially export to an MP3 player). ;; - add a real notion of album (as opposed to just album-name): ;; if all songs with same album-name have same artist -> it's an album @@ -95,6 +95,8 @@ =20 (require 'notifications) =20 +(require 'vtable) + (defgroup mpc () "Client for the Music Player Daemon (mpd)." :prefix "mpc-" @@ -978,11 +980,15 @@ mpc-cover-image-re :version "28.1") =20 (defun mpc-secs-to-time (secs) + "Convert SECS from a string, integer or float value to a time string." ;; We could use `format-seconds', but it doesn't seem worth the trouble ;; because we'd still need to check (>=3D secs (* 60 100)) since the spe= cial ;; %z only allows us to drop the large units for small values but ;; not to drop the small units for large values. (if (stringp secs) (setq secs (string-to-number secs))) + ;; Ensure secs is an integer. The Time tag has been deprecated by MPD + ;; and its replacement (the duration tag) includes fractional seconds. + (if (floatp secs) (setq secs (round secs))) (if (>=3D secs (* 60 100)) ;More than 100 minutes. (format "%dh%02d" ;"%d:%02d:%02d" (/ secs 3600) (% (/ secs 60) 60)) ;; (% secs 60) @@ -1180,7 +1186,8 @@ mpc-mode-map ">" #'mpc-next "<" #'mpc-prev "g" #'mpc-seek-current - "o" #'mpc-goto-playing-song) + "o" #'mpc-goto-playing-song + "d" #'mpc-describe-song) =20 (easy-menu-define mpc-mode-menu mpc-mode-map "Menu for MPC mode." @@ -1189,6 +1196,7 @@ mpc-mode-menu ["Next Track" mpc-next] ;FIXME: Add =E2=87=A5 there? ["Previous Track" mpc-prev] ;FIXME: Add =E2=87=A4 there? ["Seek Within Track" mpc-seek-current] + ["Song Details" mpc-describe-song] "--" ["Repeat Playlist" mpc-toggle-repeat :style toggle :selected (member '(repeat . "1") mpc-status)] @@ -2862,6 +2870,98 @@ mpc-notifications-notify :app-icon icon :replaces-id mpc--notifications-id)))) =20 +;;; Song Viewer ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;= ;; + +(defface mpc-song-viewer-value + '((t (:inherit vtable))) + "Face for tag values in the MPC song viewer.") + +(defface mpc-song-viewer-tag + '((t (:inherit (mpc-song-viewer-value bold)))) + "Face for tag types in the MPC song viewer.") + +(defface mpc-song-viewer-empty + '((t (:inherit (mpc-song-viewer-value italic shadow)))) + "Face for empty tag values in the MPC song viewer.") + +(defcustom mpc-song-viewer-tags + '("Title" "Artist" "Album" "Performer" "Composer" + "Date" "Duration" "Disc" "Track" "Genre" "File") + "The list of tags to display with `mpc-describe-song'. + +The list of supported tags are available by evaluating +`mpc-cmd-tagtypes'. In addition to the standard MPD tags: Bitrate, +Duration, File, and Format are also supported." + :version "31.1" + :type '(repeat string)) + +(defun mpc-describe-song (file) + "Show details of the selected song or FILE in the MPC song viewer. + +If there is no song at point then information about the currently +playing song is displayed." + (interactive + ;; Handle being called from the context menu. In that case you want + ;; to see details for the song you clicked on to invoke the menu not + ;; whatever `point' happens to be on at that time. + (list (when-let* ((event last-nonmenu-event) + ((listp event)) + (position (nth 1 (event-start event)))) + (get-text-property position 'mpc-file)))) + (let ((tags (or (when (and file (stringp file)) + (mpc-proc-cmd-to-alist (list "search" "file" file))) + (when-let* (((string=3D (buffer-name) "*MPC-Songs*")) + (file (get-text-property (point) 'mpc-file))) + (mpc-proc-cmd-to-alist (list "search" "file" file))) + (when (assoc 'file mpc-status) mpc-status))) + (buffer "*MPC Song Viewer*")) + (when tags + (with-current-buffer (get-buffer-create buffer) + (special-mode) + (visual-line-mode) + (let ((inhibit-read-only t)) + (erase-buffer) + (make-vtable + :columns '(( :name "Tag" + :align right + :min-width 3 + :displayer + (lambda (tag &rest _) + (propertize tag 'face 'mpc-song-viewer-tag))) + ( :name "Value" + :align left + :min-width 5 + :displayer + (lambda (value &rest _) + (if (and value (not (string-blank-p value))) + (propertize value 'face 'mpc-song-viewer-val= ue) + (propertize "empty" 'face 'mpc-song-viewer-emp= ty))))) + :objects (mapcar + (lambda (tag) + (pcase tag + ("Bitrate" + (list tag (let ((bitrate (alist-get 'bitrate tag= s))) + (when bitrate + (format "%s kpbs" bitrate))))) + ("Duration" (list tag (mpc-secs-to-time + (alist-get 'duration tags)= ))) + ("File" (list tag (alist-get 'file tags))) + ;; Concatenate all the values of tags which may + ;; occur multiple times. + ((or "Composer" "Genre" "Performer") + (list tag (mapconcat + (lambda (val) (cdr val)) + (seq-filter + (lambda (val) (eq (car val) (intern = tag))) + tags) + "; "))) + (_ (list tag (alist-get (intern tag) tags))))) + mpc-song-viewer-tags)) + (goto-char (point-min)))) + (pop-to-buffer buffer '((display-buffer-reuse-window + display-buffer-same-window) + (reusable-frames . t)))))) + ;;; Toplevel ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;= ;; =20 (defcustom mpc-frame-alist '((name . "MPC") (tool-bar-lines . 1) --=20 2.47.0 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 14 10:46:10 2024 Received: (at 74200) by debbugs.gnu.org; 14 Nov 2024 15:46:10 +0000 Received: from localhost ([127.0.0.1]:46816 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tBc2s-0005Po-8m for submit@debbugs.gnu.org; Thu, 14 Nov 2024 10:46:10 -0500 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:29944) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tBc2m-0005PA-Vn for 74200@debbugs.gnu.org; Thu, 14 Nov 2024 10:46:08 -0500 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 008734425DE; Thu, 14 Nov 2024 10:45:59 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1731599158; bh=dE0Gb+QE9kVlIAjclxC6AXNqvLXAV9SzUic87Tzpnq8=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=ckEvSczk4xwRL6Mw7MEotwEu2ZNvvw4W/uGRouBTOPHI+XNq+PFTClWvCrN/qTAJ+ ptGUUuvBltY48vwZmSfwZedvc2w8FjQBRCPP9vozNk2gn462cgDmje21Hs5OOIJ/Tm eIhNp6++ekwCVAhWRrgoX3I/nFi4L2LKCFiUWhREsjMRK2PTmznubrtB9zgsvRNy1q rDcv3XgReBkCxO3rfllRms9qX+BYJgXx2OZL3+7BXA3mdKHv3gDlgiYO/IJJTn3gfx Yir8ixCA6blGmJUIVq5z3zPuCNqC7cOfwSwsPtlJ3t0rG0YLf2aIOc1Kli74N+hwRS uQYc6SaGJtr9A== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 0AA414425D1; Thu, 14 Nov 2024 10:45:58 -0500 (EST) Received: from alfajor (modemcable005.21-80-70.mc.videotron.ca [70.80.21.5]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id DEA7F120319; Thu, 14 Nov 2024 10:45:57 -0500 (EST) From: Stefan Monnier To: john muhl Subject: Re: bug#74200: [PATCH] Add song viewer to 'mpc' In-Reply-To: <875xos6j6q.fsf@pub.pink> (john muhl's message of "Tue, 12 Nov 2024 19:01:17 -0600") Message-ID: References: <874j4n1xxf.fsf@pub.pink> <87y11zznf2.fsf@pub.pink> <86v7x3upyt.fsf@gnu.org> <87ses7xha9.fsf@pub.pink> <875xos6j6q.fsf@pub.pink> Date: Thu, 14 Nov 2024 10:45:57 -0500 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.084 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74200 Cc: Eli Zaretskii , 74200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >>> + (select-window (display-buffer buffer '((display-buffer-reuse-window >>> + display-buffer-same-window) >>> + (reusable-frames . t))))))) >> >> Why use `select-window + display-buffer` instead of `pop-to-buffer`? > > Elsewhere I was told not to use pop-to-buffer in new code and I > believe everything anyone tells me. Really? AFAIK the one function in that family that's shunned is `switch-to-buffer` (because its intention is unclear: sometimes it means "change the content of this window (to that buffer)" and sometimes it means "display this buffer (in the selected window)"), Anyway, thanks, installed into `master`. Stefan From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 14 12:08:56 2024 Received: (at 74200-done) by debbugs.gnu.org; 14 Nov 2024 17:08:56 +0000 Received: from localhost ([127.0.0.1]:46998 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tBdKy-00014d-EI for submit@debbugs.gnu.org; Thu, 14 Nov 2024 12:08:56 -0500 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:41804) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tBdKw-00014N-LI for 74200-done@debbugs.gnu.org; Thu, 14 Nov 2024 12:08:55 -0500 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id C8A2F100180; Thu, 14 Nov 2024 12:08:48 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1731604128; bh=wBzqjLbJnLUCFwl97L/KCHM/AxnB/agyxcpLr3FhPks=; h=From:To:Subject:In-Reply-To:References:Date:From; b=pnrS2zIFBXv7zcm3783oPJ3UUrv3kOSUIKr1drFvOitsL2QufnAGrYeZPb68pYtxh dwBpucyUrP616HwgqWAbo9MQQ7/PFIwZjpoQ4q+fU5O5z380oHQgZ4YQSoZBGMDJGp ZrTd+Lymdez8XzG2t3MaEzdI+KuI7KOYqrOHsw+axi4O+u5M4D7DafNAslBaLVrnjH phaliXJFNGUmr45oqqLxhCwl2xvda7eYu1k5za5+28WkMIiBpJJfLugY3o5qA+5wbv yqBdvMbhg5fS7bv3JoM88Y8MjPS03ZGX9n035w+NAeBVvcIO2DycxzIPLxw+7gJgVT OsWEYJipxF87A== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 3973A100043; Thu, 14 Nov 2024 12:08:48 -0500 (EST) Received: from alfajor (modemcable005.21-80-70.mc.videotron.ca [70.80.21.5]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 201291204D5; Thu, 14 Nov 2024 12:08:48 -0500 (EST) From: Stefan Monnier To: 74200-done@debbugs.gnu.org Subject: Re: bug#74200: [PATCH] Add song viewer to 'mpc' In-Reply-To: (Stefan Monnier's message of "Thu, 14 Nov 2024 10:45:57 -0500") Message-ID: References: <874j4n1xxf.fsf@pub.pink> <87y11zznf2.fsf@pub.pink> <86v7x3upyt.fsf@gnu.org> <87ses7xha9.fsf@pub.pink> <875xos6j6q.fsf@pub.pink> Date: Thu, 14 Nov 2024 12:08:47 -0500 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.228 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74200-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Anyway, thanks, installed into `master`. Closing, Stefan From unknown Thu Jun 19 14:01:41 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Fri, 13 Dec 2024 12:24:06 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator