From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 03 02:31:30 2025 Received: (at submit) by debbugs.gnu.org; 3 Jun 2025 06:31:31 +0000 Received: from localhost ([127.0.0.1]:59343 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uMLBD-0002eV-5k for submit@debbugs.gnu.org; Tue, 03 Jun 2025 02:31:30 -0400 Received: from lists.gnu.org ([2001:470:142::17]:36676) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uMLB3-0002df-2h for submit@debbugs.gnu.org; Tue, 03 Jun 2025 02:31:20 -0400 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 1uMLAx-0006VE-B5 for bug-gnu-emacs@gnu.org; Tue, 03 Jun 2025 02:31:07 -0400 Received: from mail-qt1-x82f.google.com ([2607:f8b0:4864:20::82f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uMLAv-0002wG-0Q for bug-gnu-emacs@gnu.org; Tue, 03 Jun 2025 02:31:07 -0400 Received: by mail-qt1-x82f.google.com with SMTP id d75a77b69052e-4a5840ec53dso23680891cf.0 for ; Mon, 02 Jun 2025 23:31:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748932264; x=1749537064; darn=gnu.org; h=mime-version:message-id:date:subject:to:from:from:to:cc:subject :date:message-id:reply-to; bh=WpQpiA/L5MYz3kcbpWsrS284dXrs1IDsjn48Mp7JsWU=; b=W9NroIOtfMOPLOPMIwtprYqpKnqCAPvSDFfGTEBnwBl9BPfFJYgtiysd5KsXsyLj4v 7HszToAUIu6sNe+v3C+ojpBGTuSt2nF2eWJYIsl56/JJqk9slscQclnBrsmx+NLLfiA6 ZDrjfAXXv61My8jA/kO/fUUmp9jYQSXr3DVLddkLFQ0iTKKDmGod1kCCATa2zooxrowp O+M1iCnMS88PMqPlRRwFtPt8tz2HI3sNbLPLIxIMww6lZoQictm3rayDb139vIPqMhG+ 0pZbnefHlpr58Z44eVLmj/bUTRoXBgkLPWNBwYmRTtiK4l0php+6+LrrM97SBTiNeODu +EiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748932264; x=1749537064; h=mime-version:message-id:date:subject:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=WpQpiA/L5MYz3kcbpWsrS284dXrs1IDsjn48Mp7JsWU=; b=qOn7Et4vnfMOJyqVjP/ee87Ue1cJR6fYmBek0FlYxFg9HVsbAH0vbDS6jnidassgla jxQROngMRHPrGN+0PoLthG/7c8fusjHG5UiaRL0KGfLzun7plIlT27RteZO+iqHNkvic v9uCqPAgbGeg7oWTCdHMs+mPqO5ISLdGYG6fZy2QxIOjXT0ic3eNEqbWEw79yPyvDoEs HprO8iOIZP1dUROPfXCv6PJ67EepmfgQ84zSy8No6c1V6hM0pPaxOxGzy1ozf56e2Fxr eHamcB+yPjwqq0px+KBbc/qyWs/VB1xaEIGcWbxW+2+8aY6BIEtvrwp6XpYM1RgowkYk v1xw== X-Gm-Message-State: AOJu0YwvrjxUkFkMHbJO7WR1opUB2gV/damXq0QrsCPqdyw8kcUy+nUV 2PvAwwKlFJWXETar9Y9cNzVnBEyoYpCr8BYQd6t9yV+5CXJaP8loMdjFIVemuw== X-Gm-Gg: ASbGncvFGXRiguFJmtixuW0ek+TFLt2sAwAuYfaVq8+uEvpDpP0WfKHSX1ABlYedE75 F7znBe7BR1nrWrSpgkPM7jAON8QM7aruJdfFnMqt4oTCJVwU4l9fcQkVXgOxMYef3Gi6CO9jyTm gvhLZ6ZTBqFfndVBg/Yni2PS5htgeQ1XXoXlzFnSxLaKZRYPqTpthQR0h+EwUC4YHsr9DXUHrlL XVArvYQ42wZAPcjSrwA4+5XV4BaUzWZ2Avn0XJRVooegPuEEcHmW429xvN/tO0V4SvhixF9pt/Z ktOgEa4geXgK5DjOCZrmcZ1uVgoJ8HHiKdbQV1QiC3N+NIMdeJbBvRJAay6dF0m/3O00WtS9GCu THISOGqsE X-Google-Smtp-Source: AGHT+IFClw6ZBdJnKAihlXIuBlLgBEJkEFhV7siIqIfHn7POlppjoVjhMSr9SqQSSOqREm00b7BTWQ== X-Received: by 2002:a05:622a:2595:b0:477:6f1e:f477 with SMTP id d75a77b69052e-4a44002c9c2mr296038611cf.19.1748932263489; Mon, 02 Jun 2025 23:31:03 -0700 (PDT) Received: from localhost (135-23-138-165.cpe.pppoe.ca. [135.23.138.165]) by smtp.gmail.com with UTF8SMTPSA id d75a77b69052e-4a435772fb1sm69521691cf.8.2025.06.02.23.31.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 23:31:02 -0700 (PDT) From: "Jacob S. Gordon" To: bug-gnu-emacs@gnu.org Subject: [PATCH v1] world-clock: Sort entries based on a user-provided function Date: Tue, 03 Jun 2025 02:30:59 -0400 Message-ID: <87cybl5obg.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=2607:f8b0:4864:20::82f; envelope-from=jacob.as.gordon@gmail.com; helo=mail-qt1-x82f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) 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: -0.0 (/) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Tags: patch Hello all, Please find below a feature proposal for sorting entries of world-clock, and a first draft of a patch attached to this message. # Motivation The `world-clock' displays time zone entries in the order they appear in `world-clock-list'. Usually this is enough, since orders like time can often be done statically. However, there are scenarios where you might want a dynamic ordering. For example: 1. You work with people in multiple time zones, and you want entries to appear in order of proximity to working hours, e.g. in what time zones are people likely to be responsive right now? 2. Daylight savings can go into effect at [different times]. For example, eastern Europe and Egypt both shift from UTC+2 in the winter to UTC+3 in the summer. | Zone | DST start | DST end | |----------------+----------------------+--------------------------| | eastern Europe | last Sunday of March | last Sunday of October | | Egypt | last Friday of April | last Thursday of October | For a period in the spring, local time in Egypt (UTC+2) is earlier than eastern Europe (UTC+3). Depending on the year, DST in Egypt may end earlier or later than in eastern Europe. In years like 2025 & 2026 where the last Thursday of October is after the last Sunday of October, there=E2=80=99s no static ordering of the zones that works all year (bracket contents are UTC offsets at a vertical time slice): #+begin_src text time |< ~April ~November >| Egypt ---(+2)-----(+2)-|-(+3)--------(+3)---(+3)-|-(+2)----- Europe ---(+2)---|-(+3)---(+3)--------(+3)-|-(+2)---(+2)----- #+end_src In other years like 2027, a consistent ordering is possible: #+begin_src text time |< ~April ~November >| Egypt ---(+2)-----(+2)-|-(+3)--------(+3)-|-(+2)---(+2)----- Europe ---(+2)---|-(+3)---(+3)--------(+3)---(+3)-|-(+2)----- #+end_src [different times] https://en.wikipedia.org/wiki/Daylight_saving_time_by_country # Possible Implementation A simple way to do this is with a `world-clock-sort-function' custom variable that sorts the entries in `world-clock-display'. #+begin_src emacs-lisp (setopt world-clock-sort-function 'my/world-clock-sort-function) #+end_src You could then accomplish each of the orderings mentioned earlier: 1. Time zones appear in order of how far they are from the middle of the workday: #+begin_src emacs-lisp (defun my/world-clock-sort-function (tzlist) "Sort on proximity of local time to work hours." (let* ((now (current-time)) (start 9) (end 17) (mid (/ (+ start end) 2.0))) (sort tzlist :key (lambda (entry) (pcase-let* ((zone (car entry)) (`(,s ,m ,h _) (decode-time now zone)) (hour (+ h (/ m 60.0) (/ s 3600.0))) (diff (min (abs (- hour (- mid 24))) (abs (- hour mid)) (abs (- hour (+ mid 24)))))) diff))))) #+end_src 2. Sort on an ISO-8601 timestamp so zones are always in ascending order: #+begin_src emacs-lisp (defun my/world-clock-sort-function (tzlist) "Sort on local ISO-8601 timestamps." (let ((now (current-time))) (sort tzlist :key (lambda (entry) (let ((zone (car entry))) (format-time-string "%FT%T" now zone)))))) #+end_src Note that in the current patch there=E2=80=99s a small race condition betwe= en recording the current time in `world-clock-display' and sorting the list. Any thoughts on this idea and the interface? Thanks, --=20 Jacob S. Gordon jacob.as.gordon@gmail.com =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Please avoid sending me HTML emails and MS Office documents. https://useplaintext.email/#etiquette https://www.gnu.org/philosophy/no-word-attachments.html In GNU Emacs 30.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.49, cairo version 1.18.4) System Description: Arch Linux Configured using: 'configure --with-pgtk --sysconfdir=3D/etc --prefix=3D/usr --libexecdir=3D/usr/lib --localstatedir=3D/var --disable-build-details --with-cairo --with-harfbuzz --with-libsystemd --with-modules --with-native-compilation=3Daot --with-tree-sitter 'CFLAGS=3D-march=3Dx86-= 64 -mtune=3Dgeneric -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3D3 -Wformat -Werror=3Dformat-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g -ffile-prefix-map=3D/build/emacs/src=3D/usr/src/debug/emacs -flto=3Dauto' 'LDFLAGS=3D-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs -flto=3Dauto' 'CXXFLAGS=3D-march=3Dx86-64 -mtune=3Dgeneric -O2 -pipe -fno-plt -fexceptio= ns -Wp,-D_FORTIFY_SOURCE=3D3 -Wformat -Werror=3Dformat-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=3D/build/emacs/src=3D/usr/src/debug/emacs -flto=3Dauto'' --=-=-= Content-Type: text/patch Content-Disposition: attachment; filename=v1-0001-world-clock-sort-entries-based-user-provided-function.patch >From 0d293d92d81d1086a63942734fa067c4f0ca0bfe Mon Sep 17 00:00:00 2001 From: "Jacob S. Gordon" Date: Mon, 2 Jun 2025 21:06:37 -0400 Subject: [PATCH v1] world-clock: Sort entries based on a user-provided function The 'world-clock' displays time zone entries in the order they appear in 'world-clock-list' (or a default if unset). We introduce a custom variable 'world-clock-sort-function' to generate an order on each update of 'world-clock-display'. The default value of 'identity' preserves the existing behavior. * lisp/time.el (world-clock-sort-function, world-clock-display): Add custom variable 'world-clock-sort-function', and sort time zone entries in 'world-clock-display' according to it. --- etc/NEWS | 10 ++++++++++ lisp/time.el | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 01ed372a2da..001609c5b21 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2120,6 +2120,16 @@ You can now use the mouse wheel to scroll the calendar by 3 months. With the shift modifier, it scrolls by one month. With the meta modifier, it scrolls by year. + +** Time + +*** New user option 'world-clock-sort-function' + +The order of time zone entries in the 'world-clock' is updated according +to the 'world-clock-sort-function'. By default, no sorting is done and +entries appear according to their order in 'world-clock-list' (or a +default if unset). + * New Modes and Packages in Emacs 31.1 ** New minor mode 'delete-trailing-whitespace-mode'. diff --git a/lisp/time.el b/lisp/time.el index fd66775c879..2456ff279e4 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -536,6 +536,15 @@ world-clock-timer-second :type 'natnum :version "28.1") +(defcustom world-clock-sort-function 'identity + "Function to sort time zone entries upon each `world-clock-display'. +It should take a list of `(TIMEZONE LABEL)' entries and return the same. + +This function will be called with `world-clock-list' if set, otherwise +with a default." + :version "31.1" + :type '(function :tag "Sorting function")) + (defface world-clock-label '((t :inherit font-lock-variable-name-face)) "Face for time zone label in `world-clock' buffer.") @@ -563,14 +572,16 @@ world-clock--timer "The current world clock timer.") (defun world-clock-display (alist) - "Replace current buffer text with times in various zones, based on ALIST." + "Replace current buffer text with times in various zones, based on ALIST. +The displayed entries are sorted according to `world-clock-sort-function'." (let ((inhibit-read-only t) (buffer-undo-list t) (now (current-time)) + (sorted-zones (funcall world-clock-sort-function alist)) (max-width 0) result fmt) (erase-buffer) - (dolist (zone alist) + (dolist (zone sorted-zones) (let* ((label (cadr zone)) (width (string-width label))) (push (cons label base-commit: 50e3bce315eb499917c1d208f87f84315f1a8b4e -- Jacob S. Gordon jacob.as.gordon@gmail.com ========================= Please avoid sending me HTML emails and MS Office documents. https://useplaintext.email/#etiquette https://www.gnu.org/philosophy/no-word-attachments.html --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 03 08:00:50 2025 Received: (at 78678) by debbugs.gnu.org; 3 Jun 2025 12:00:51 +0000 Received: from localhost ([127.0.0.1]:32928 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uMQK2-0007uB-5I for submit@debbugs.gnu.org; Tue, 03 Jun 2025 08:00:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60712) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uMQJz-0007sp-QH for 78678@debbugs.gnu.org; Tue, 03 Jun 2025 08:00:48 -0400 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 1uMQJt-0001G8-UG; Tue, 03 Jun 2025 08:00:41 -0400 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=/Qna50KL5e4zn1Z7A6LoRy4nli216PDb80lfleO0CAg=; b=mIlTcn/cTcsT bN7oGmqqblflF49zHN+rapuluFzckzBAXDIieuiLpeX0D116kJ1Kk/dhRxtQUxpGTmtXVvnYIXGhe rUJHmUSraF4Ez3QjWFai0gJZbgOQSW2aKYHHcq5n5nRQAg4KQE9AWskEZaWlLFgIXSGYbiXcaQR+a UT9NWLX+nV682YAqNJ/nZ9PItH/P2gxcTO7JI/I7K+rXlwy0uU7uVzKYNQwipkcSt1hSV6Wg6qk0I JdQro4EIUuN8WDW+4pYkF7FXkrvQdgy831xxTcSIEu90PunBc20hkrkwypnkOcFrsPVRKzKmqV81L D08A2q6zacUj73HZ4dspRg==; Date: Tue, 03 Jun 2025 15:00:34 +0300 Message-Id: <86msapnifx.fsf@gnu.org> From: Eli Zaretskii To: "Jacob S. Gordon" In-Reply-To: <87cybl5obg.fsf@gmail.com> (jacob.as.gordon@gmail.com) Subject: Re: bug#78678: [PATCH v1] world-clock: Sort entries based on a user-provided function References: <87cybl5obg.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78678 Cc: 78678@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 (---) > From: "Jacob S. Gordon" > Date: Tue, 03 Jun 2025 02:30:59 -0400 > > Please find below a feature proposal for sorting entries of > world-clock, and a first draft of a patch attached to this message. > > # Motivation > > The `world-clock' displays time zone entries in the order they appear > in `world-clock-list'. Usually this is enough, since orders like time > can often be done statically. However, there are scenarios where you > might want a dynamic ordering. For example: > > 1. You work with people in multiple time zones, and you want entries > to appear in order of proximity to working hours, e.g. in what time > zones are people likely to be responsive right now? > > 2. Daylight savings can go into effect at [different times]. For > example, eastern Europe and Egypt both shift from UTC+2 in the winter > to UTC+3 in the summer. I have no objections to adding such a feature. > A simple way to do this is with a `world-clock-sort-function' custom > variable that sorts the entries in `world-clock-display'. > > #+begin_src emacs-lisp > (setopt world-clock-sort-function 'my/world-clock-sort-function) > #+end_src > > You could then accomplish each of the orderings mentioned earlier: This requires users to be Lisp programmers. If there are reasonably-useful cases where a certain order would be desirable, allowing users to customize a variable using symbol values makes the feature much more friendly to users who are not programmers. Would it make sense to add a couple of such values? > >From 0d293d92d81d1086a63942734fa067c4f0ca0bfe Mon Sep 17 00:00:00 2001 > From: "Jacob S. Gordon" > Date: Mon, 2 Jun 2025 21:06:37 -0400 > > The 'world-clock' displays time zone entries in the order they appear in > 'world-clock-list' (or a default if unset). We introduce a custom > variable 'world-clock-sort-function' to generate an order on each update > of 'world-clock-display'. The default value of 'identity' preserves the > existing behavior. > > * lisp/time.el (world-clock-sort-function, world-clock-display): > > Add custom variable 'world-clock-sort-function', and sort time zone > entries in 'world-clock-display' according to it. Please reformat the log message according to our conventions (described in CONTRIBUTE). > +** Time > + > +*** New user option 'world-clock-sort-function' The heading lines in NEWS should end with a period. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 08 23:54:18 2025 Received: (at 78678) by debbugs.gnu.org; 9 Jun 2025 03:54:18 +0000 Received: from localhost ([127.0.0.1]:53480 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uOTaT-0007FN-2f for submit@debbugs.gnu.org; Sun, 08 Jun 2025 23:54:17 -0400 Received: from mail-qk1-x730.google.com ([2607:f8b0:4864:20::730]:53596) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uOTaP-0007F9-Li for 78678@debbugs.gnu.org; Sun, 08 Jun 2025 23:54:14 -0400 Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-7c5a88b34a6so382913985a.3 for <78678@debbugs.gnu.org>; Sun, 08 Jun 2025 20:54:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749441248; x=1750046048; darn=debbugs.gnu.org; h=in-reply-to:cc:content-language:from:references:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=B99xW1U/yg2+jMcvgFVHDf7isso0fyD/T6ZOqM+sFug=; b=lfZHfbyFKdEq3WktqpHCs6/RyXaSLr3O1cb5UaA28IlsKh6i8vQwc7P61k84zQ57rX DU8kUChLArKsE2dFLGki5D0807xBcTC2zSWyOj9e71Wak6G4nPTUCutsVe8+yhf0CFsp uzdq/lUSbjVtjWAYzXlExaNfzQVdelwcSTAFb5/MKfhLGCbHTT0o63FM+FNaL56mjfbp dr6do1lcUV/mwW/Vexc4+sv98o9QjWKXlRjHe6wbuPH4rBmpU36HMdMuMJaHVgCw0DYb 7qzT98jH5TSPB+NFoovjANNM19P3zr7boEPQzTz3J9SGTrCM/qjetDmdlUj1r+3n6pbD +Wdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749441248; x=1750046048; h=in-reply-to:cc:content-language:from:references:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=B99xW1U/yg2+jMcvgFVHDf7isso0fyD/T6ZOqM+sFug=; b=hZOGeae5QjjHdq1glwG4UyQdyhUiDSw/kmom4xGLqnw8sh6Hf1YEsR/7Q1aAcNyAlf rGpSW00ftpyowg3cVTxJjLNpGVGKCdSMDZ4dwf1O5YfqZ3JWJCtHsmNrGiYnjeo8PUlH nXjXKwA8mS4YEQ8Ls73OJhxHMI77tEMVnZFr4x9tI2fXoghntZ8/GUs7q3+s42u/cKo/ j5GWcUlXz0BHzOJ7YtCu7rAxkaStQBmJOoPX4djFiUE5yh8G7pBKVhwe6l/gvzjIu9O5 X673HFqhVRhoOzQ8aqSKTpFn5iZDkyO0oexy7BsQghmDgggcu+WMA6Yh4/6tkuA97H+r qVpw== X-Gm-Message-State: AOJu0YzzP4/nOKLMf1Fq/9Sx2GrvxCBwr9hMcy2Y4Qj17T4eivyJuUFu GP6nTvrkMWF3zl1sDjai+NxxGVNR2isVasAhPQw0pgzDtH9D9Qcm56n0 X-Gm-Gg: ASbGncvLnd82zC0pr1sfq5l2VWG25rTo5eRg7X5r5lp4/V0h4YGVIYlP1f8/8tHbyex h6teyAzW1eaVia0/fkClEQvAM2JichJF11Num5H2yoQ5PUBbtwBse/Eq/TBrDTpXuo11/T5qQmP V+MVUvMlKkqnOu0fWgkF4kqaoKbTl3Y3mKwdj7qplaNtrDbL0ndnXq/FbBRl7oU8JGXuKcIenxQ UpmmMe0pf460audbcBvOfxNodH/Dq6+DlD3wlVKb5AS5bhPUNCwKh3uSnSpE1ep1y9y95tqKCrL W5hRWIm1+++bttFgCVRCfHNcfpw0ha+I7A7Dk42rYMeMj4Hf/aDNFLLixfY4KxKAbbZF8RfiOiE T69F4mQQEz3yv0Qc= X-Google-Smtp-Source: AGHT+IEYt7aT5JTaQIdWNM5qJ39gwM582q31Fp6ruadlzWMIlMtq0AT6s+kJC1brEgBd6zVHF5iH4w== X-Received: by 2002:a05:620a:294a:b0:7c5:cd94:adc with SMTP id af79cd13be357-7d2298959a1mr1656617385a.21.1749441247789; Sun, 08 Jun 2025 20:54:07 -0700 (PDT) Received: from [192.168.1.10] (135-23-138-165.cpe.pppoe.ca. [135.23.138.165]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7d2669b4444sm493926885a.105.2025.06.08.20.54.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 08 Jun 2025 20:54:07 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------0vw3dMzwDCnApzzK0vBrdxlH" Message-ID: <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> Date: Sun, 8 Jun 2025 23:54:06 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#78678: [PATCH v2] world-clock: Add user option to control order of entries To: Eli Zaretskii References: <87cybl5obg.fsf@gmail.com> <86msapnifx.fsf@gnu.org> From: "Jacob S. Gordon" Content-Language: en-CA In-Reply-To: <86msapnifx.fsf@gnu.org> X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78678 Cc: 78678@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.0 (-) This is a multi-part message in MIME format. --------------0vw3dMzwDCnApzzK0vBrdxlH Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hello, On 2025-06-03 08:00, Eli Zaretskii wrote: > This requires users to be Lisp programmers. If there are > reasonably-useful cases where a certain order would be desirable, > allowing users to customize a variable using symbol values makes the > feature much more friendly to users who are not programmers. Would > it make sense to add a couple of such values? I agree, and I think it does make sense. After trying a version with symbols for common use-cases, I think the most flexible option is to allow the user to provide a format for `format-time-string' to act as the sorting key. This is similar in complexity to the variable `world-clock-time-format', and some predefined values can be put in the `:type' block of the `defcustom': #+begin_src emacs-lisp :type '(choice (const :tag "No sorting" nil) (const :tag "Chronological order" "%FT%T") (const :tag "Reverse chronological order" ("%FT%T" . t)) (const :tag "Time of day order" "%T") (const :tag "Reverse time of day order" ("%T" . t)) (string :tag "Format string") (cons :tag "Format string and reverse flag" (string :tag "Format string") (boolean :tag "Reverse")) (function :tag "Sorting function"))) #+end_src Then, sorting can be switched based on the type in a helper function: #+begin_quote (defun world-clock--sort-entries (tzlist time) "Sort TZLIST according to `world-clock-sort-order' at a given TIME." (pcase world-clock-sort-order ((pred null) tzlist) ((or (and (pred stringp) format) `(,(and (pred stringp) format) . ,(and (pred booleanp) reverse))) (sort tzlist :key (lambda (entry) (format-time-string format time (car entry))) :reverse reverse)) ((pred functionp) (funcall world-clock-sort-order tzlist time)) (_ (error "Invalid `world-clock-sort-order': `%s'" world-clock-sort-order)))) #+end_quote In terms of coding standards: + I could do this without `pcase', if desired. + I can write unit tests if we’re okay with the idea. > Please reformat the log message according to our conventions > (described in CONTRIBUTE). Done in the updated patch (I think?). Thank you! -- Jacob S. Gordon jacob.as.gordon@gmail.com ====================== Please avoid sending me HTML emails and MS Office documents. https://useplaintext.email/#etiquette https://www.gnu.org/philosophy/no-word-attachments.html --------------0vw3dMzwDCnApzzK0vBrdxlH Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-world-clock-Add-user-option-to-control-entry-order.patch" Content-Disposition: attachment; filename*0="v2-0001-world-clock-Add-user-option-to-control-entry-order.p"; filename*1="atch" Content-Transfer-Encoding: base64 RnJvbSBkYjY4ZGU3NWQwZjA3NzI3ZjNjZDMzOTBhNzNjM2E5ZGM2YjRkMmFiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSmFjb2IgUy4gR29yZG9uIiA8amFjb2IuYXMuZ29y ZG9uQGdtYWlsLmNvbT4KRGF0ZTogTW9uLCAyIEp1biAyMDI1IDIxOjA2OjM3IC0wNDAwClN1 YmplY3Q6IFtQQVRDSCB2Ml0gd29ybGQtY2xvY2s6IEFkZCB1c2VyIG9wdGlvbiB0byBjb250 cm9sIG9yZGVyIG9mIGVudHJpZXMKCiogbGlzcC90aW1lLmVsICh3b3JsZC1jbG9jay1zb3J0 LW9yZGVyKTogQWRkIHVzZXIgb3B0aW9uLgood29ybGQtY2xvY2stLXNvcnQtZW50cmllcyk6 IEFkZCBhdXhpbGlhcnkgc29ydGluZyBmdW5jdGlvbi4KKHdvcmxkLWNsb2NrLWRpc3BsYXkp OiBTb3J0IGVudHJpZXMgYmFzZWQgb24gdGhlIG5ldyB1c2VyIG9wdGlvbi4KLS0tCiBldGMv TkVXUyAgICAgfCAxMiArKysrKysrKysrKwogbGlzcC90aW1lLmVsIHwgNjEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogMiBmaWxlcyBj aGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggMWYyOWZlNWYwYjQuLjNjNDNmMDFmYzQ5IDEw MDY0NAotLS0gYS9ldGMvTkVXUworKysgYi9ldGMvTkVXUwpAQCAtMjE0MCw2ICsyMTQwLDE4 IEBAIGlzIGJvdW5kIHRvICdDLWwnIGluIHRoZSBjYWxlbmRhciBidWZmZXIuCiBZb3UgY2Fu IG5vdyB1c2UgdGhlIG1vdXNlIHdoZWVsIHRvIHNjcm9sbCB0aGUgY2FsZW5kYXIgYnkgMyBt b250aHMuCiBXaXRoIHRoZSBzaGlmdCBtb2RpZmllciwgaXQgc2Nyb2xscyBieSBvbmUgbW9u dGguICBXaXRoIHRoZSBtZXRhCiBtb2RpZmllciwgaXQgc2Nyb2xscyBieSB5ZWFyLgorCisq KiBUaW1lCisKKyoqKiBOZXcgdXNlciBvcHRpb24gJ3dvcmxkLWNsb2NrLXNvcnQtb3JkZXIn LgorVGhpcyBvcHRpb24gY29udHJvbHMgdGhlIG9yZGVyIG9mIHRpbWV6b25lIGVudHJpZXMg aW4gdGhlICd3b3JsZC1jbG9jaycuCitCeSBkZWZhdWx0LCBubyBzb3J0aW5nIGlzIGRvbmUs IGFuZCBlbnRyaWVzIGFwcGVhciBpbiB0aGUgc2FtZSBvcmRlciBhcworaW4gJ3dvcmxkLWNs b2NrLWxpc3QnLiAgQW55IGZvcm1hdCB1bmRlcnN0b29kIGJ5ICdmb3JtYXQtdGltZS1zdHJp bmcnCitjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEga2V5IGZvciB0aGUgc29ydCBvcmRlciwg d2hpY2ggaXMgdXBkYXRlZCB1cG9uCitlYWNoIHJlZnJlc2guICBUaGUgc29ydCBkaXJlY3Rp b24gY2FuIGJlIGNvbnRyb2xsZWQgYnkgdXNpbmcgYSBjb25zIGNlbGwKK29mIGEgZm9ybWF0 IHN0cmluZyBhbmQgYSBib29sZWFuLiAgQWx0ZXJuYXRpdmVseSwgYSBzb3J0aW5nIGZ1bmN0 aW9uIGNhbgorYmUgcHJvdmlkZWQgZGlyZWN0bHkuCisKIAwKICogTmV3IE1vZGVzIGFuZCBQ YWNrYWdlcyBpbiBFbWFjcyAzMS4xCiAKZGlmZiAtLWdpdCBhL2xpc3AvdGltZS5lbCBiL2xp c3AvdGltZS5lbAppbmRleCBmZDY2Nzc1Yzg3OS4uN2YyZjI3NmJlNmQgMTAwNjQ0Ci0tLSBh L2xpc3AvdGltZS5lbAorKysgYi9saXNwL3RpbWUuZWwKQEAgLTUzNiw2ICs1MzYsMzYgQEAg d29ybGQtY2xvY2stdGltZXItc2Vjb25kCiAgIDp0eXBlICduYXRudW0KICAgOnZlcnNpb24g IjI4LjEiKQogCisoZGVmY3VzdG9tIHdvcmxkLWNsb2NrLXNvcnQtb3JkZXIgbmlsCisgICJT b3J0IG9yZGVyIG9mIGVudHJpZXMgaW4gdGhlIGB3b3JsZC1jbG9jaycuCitUaGlzIHZhcmlh YmxlIGNhbiB0YWtlIGEgZmV3IGRpZmZlcmVudCBmb3JtczoKKworLSBBIG5pbCB2YWx1ZSBp bmRpY2F0ZXMgbm8gc29ydGluZywgYW5kIHRoZSBkaXNwbGF5ZWQgb3JkZXIgaXMgdGhlIHNh bWUKKyAgYXMgaW4gYHdvcmxkLWNsb2NrLWxpc3QnLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4K KworLSBBIHN0cmluZyBpcyB0YWtlbiBhcyBhIGZvcm1hdCBmb3IgYGZvcm1hdC10aW1lLXN0 cmluZycsIHdob3NlIG91dHB1dAorICBpcyB1c2VkIGFzIHRoZSBzb3J0aW5nIGtleS4gIEZv ciBleGFtcGxlLCBhbiBJU08gODYwMSBmb3JtYXQgYFwiJUZUJVRcIicKKyAgbWVhbnMgZW50 cmllcyBhcmUgc29ydGVkIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKy0gQSBjb25zIGNl bGwgb2YgdGhlIGZvcm0gKFNUUklORyAuIEJPT0wpIGFnYWluIHByb3ZpZGVzIGEgZm9ybWF0 IGZvcgorICBgZm9ybWF0LXRpbWUtc3RyaW5nJy4gIFRoZSBib29sZWFuIHBhcnQgY29udHJv bHMgdGhlIHNvcnQgZGlyZWN0aW9uLgorICBGb3IgZXhhbXBsZSwgYChcIiVGVCVUXCIgLiAg dCknIG1lYW5zIGVudHJpZXMgYXJlIHNvcnRlZCBpbiByZXZlcnNlCisgIGNocm9ub2xvZ2lj YWwgb3JkZXIuCisKKy0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgbGlzdCBvZiAoVElNRVpP TkUgTEFCRUwpIGVudHJpZXMgYW5kIGEgVElNRSBhcworICBhcmd1bWVudHMsIGFuZCByZXR1 cm5zIGFub3RoZXIgbGlzdCBvZiBlbnRyaWVzLiIKKyAgOnZlcnNpb24gIjMxLjEiCisgIDp0 eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJObyBzb3J0aW5nIiBuaWwpCisJCSAoY29uc3Qg OnRhZyAiQ2hyb25vbG9naWNhbCBvcmRlciIgIiVGVCVUIikKKwkJIChjb25zdCA6dGFnICJS ZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiICgiJUZUJVQiIC4gdCkpCisJCSAoY29uc3Qg OnRhZyAiVGltZSBvZiBkYXkgb3JkZXIiICIlVCIpCisJCSAoY29uc3QgOnRhZyAiUmV2ZXJz ZSB0aW1lIG9mIGRheSBvcmRlciIgKCIlVCIgLiB0KSkKKwkJIChzdHJpbmcgOnRhZyAiRm9y bWF0IHN0cmluZyIpCisJCSAoY29ucyA6dGFnICJGb3JtYXQgc3RyaW5nIGFuZCByZXZlcnNl IGZsYWciCisJCSAgICAgICAoc3RyaW5nIDp0YWcgIkZvcm1hdCBzdHJpbmciKQorCQkgICAg ICAgKGJvb2xlYW4gOnRhZyAiUmV2ZXJzZSIpKQorCQkgKGZ1bmN0aW9uIDp0YWcgIlNvcnRp bmcgZnVuY3Rpb24iKSkpCisKIChkZWZmYWNlIHdvcmxkLWNsb2NrLWxhYmVsCiAgICcoKHQg OmluaGVyaXQgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkpCiAgICJGYWNlIGZvciB0 aW1lIHpvbmUgbGFiZWwgaW4gYHdvcmxkLWNsb2NrJyBidWZmZXIuIikKQEAgLTU2MiwxNSAr NTkyLDMyIEBAIHdvcmxkLWNsb2NrLW1vZGUKIChkZWZ2YXIgd29ybGQtY2xvY2stLXRpbWVy IG5pbAogICAiVGhlIGN1cnJlbnQgd29ybGQgY2xvY2sgdGltZXIuIikKIAorKGRlZnVuIHdv cmxkLWNsb2NrLS1zb3J0LWVudHJpZXMgKHR6bGlzdCB0aW1lKQorICAiU29ydCBUWkxJU1Qg YWNjb3JkaW5nIHRvIGB3b3JsZC1jbG9jay1zb3J0LW9yZGVyJyBhdCBhIGdpdmVuIFRJTUUu IgorICAocGNhc2Ugd29ybGQtY2xvY2stc29ydC1vcmRlcgorICAgICgocHJlZCBudWxsKSB0 emxpc3QpCisgICAgKChvciAoYW5kIChwcmVkIHN0cmluZ3ApIGZvcm1hdCkKKwkgYCgsKGFu ZCAocHJlZCBzdHJpbmdwKSBmb3JtYXQpIC4KKwkgICAsKGFuZCAocHJlZCBib29sZWFucCkg cmV2ZXJzZSkpKQorICAgICAoc29ydCB0emxpc3QKKwkgICA6a2V5IChsYW1iZGEgKGVudHJ5 KQorCQkgIChmb3JtYXQtdGltZS1zdHJpbmcgZm9ybWF0IHRpbWUgKGNhciBlbnRyeSkpKQor CSAgIDpyZXZlcnNlIHJldmVyc2UpKQorICAgICgocHJlZCBmdW5jdGlvbnApIChmdW5jYWxs IHdvcmxkLWNsb2NrLXNvcnQtb3JkZXIgdHpsaXN0IHRpbWUpKQorICAgIChfIChlcnJvciAi SW52YWxpZCBgd29ybGQtY2xvY2stc29ydC1vcmRlcic6IGAlcyciCisJICAgICAgd29ybGQt Y2xvY2stc29ydC1vcmRlcikpKSkKKwogKGRlZnVuIHdvcmxkLWNsb2NrLWRpc3BsYXkgKGFs aXN0KQotICAiUmVwbGFjZSBjdXJyZW50IGJ1ZmZlciB0ZXh0IHdpdGggdGltZXMgaW4gdmFy aW91cyB6b25lcywgYmFzZWQgb24gQUxJU1QuIgotICAobGV0ICgoaW5oaWJpdC1yZWFkLW9u bHkgdCkKLQkoYnVmZmVyLXVuZG8tbGlzdCB0KQotCShub3cgKGN1cnJlbnQtdGltZSkpCi0J KG1heC13aWR0aCAwKQotCXJlc3VsdCBmbXQpCisgICJSZXBsYWNlIGN1cnJlbnQgYnVmZmVy IHRleHQgd2l0aCB0aW1lcyBpbiB2YXJpb3VzIHpvbmVzLCBiYXNlZCBvbiBBTElTVC4KK1Ro ZSBlbnRyaWVzIGFyZSBvcmRlcmVkIGFjY29yZGluZyB0byBgd29ybGQtY2xvY2stc29ydC1v cmRlcicuIgorICAobGV0KiAoKGluaGliaXQtcmVhZC1vbmx5IHQpCisJIChidWZmZXItdW5k by1saXN0IHQpCisJIChub3cgKGN1cnJlbnQtdGltZSkpCisJICh6b25lcyAod29ybGQtY2xv Y2stLXNvcnQtZW50cmllcyBhbGlzdCBub3cpKQorCSAobWF4LXdpZHRoIDApCisJIHJlc3Vs dCBmbXQpCiAgICAgKGVyYXNlLWJ1ZmZlcikKLSAgICAoZG9saXN0ICh6b25lIGFsaXN0KQor ICAgIChkb2xpc3QgKHpvbmUgem9uZXMpCiAgICAgICAobGV0KiAoKGxhYmVsIChjYWRyIHpv bmUpKQogCSAgICAgKHdpZHRoIChzdHJpbmctd2lkdGggbGFiZWwpKSkKIAkocHVzaCAoY29u cyBsYWJlbAoKUmFuZ2UtZGlmZiBhZ2FpbnN0IHYxOgoxOiAgMGQyOTNkOTJkODEgISAxOiAg ZGI2OGRlNzVkMGYgd29ybGQtY2xvY2s6IFNvcnQgZW50cmllcyBiYXNlZCBvbiBhIHVzZXIt cHJvdmlkZWQgZnVuY3Rpb24KICAgIEBAIE1ldGFkYXRhCiAgICAgQXV0aG9yOiBKYWNvYiBT LiBHb3Jkb24gPGphY29iLmFzLmdvcmRvbkBnbWFpbC5jb20+CiAgICAgCiAgICAgICMjIENv bW1pdCBtZXNzYWdlICMjCiAgICAtICAgIHdvcmxkLWNsb2NrOiBTb3J0IGVudHJpZXMgYmFz ZWQgb24gYSB1c2VyLXByb3ZpZGVkIGZ1bmN0aW9uCiAgICArICAgIHdvcmxkLWNsb2NrOiBB ZGQgdXNlciBvcHRpb24gdG8gY29udHJvbCBvcmRlciBvZiBlbnRyaWVzCiAgICAgCiAgICAt ICAgIFRoZSAnd29ybGQtY2xvY2snIGRpc3BsYXlzIHRpbWUgem9uZSBlbnRyaWVzIGluIHRo ZSBvcmRlciB0aGV5IGFwcGVhciBpbgogICAgLSAgICAnd29ybGQtY2xvY2stbGlzdCcgKG9y IGEgZGVmYXVsdCBpZiB1bnNldCkuICBXZSBpbnRyb2R1Y2UgYSBjdXN0b20KICAgIC0gICAg dmFyaWFibGUgJ3dvcmxkLWNsb2NrLXNvcnQtZnVuY3Rpb24nIHRvIGdlbmVyYXRlIGFuIG9y ZGVyIG9uIGVhY2ggdXBkYXRlCiAgICAtICAgIG9mICd3b3JsZC1jbG9jay1kaXNwbGF5Jy4g IFRoZSBkZWZhdWx0IHZhbHVlIG9mICdpZGVudGl0eScgcHJlc2VydmVzIHRoZQogICAgLSAg ICBleGlzdGluZyBiZWhhdmlvci4KICAgIC0KICAgIC0gICAgKiBsaXNwL3RpbWUuZWwgKHdv cmxkLWNsb2NrLXNvcnQtZnVuY3Rpb24sIHdvcmxkLWNsb2NrLWRpc3BsYXkpOgogICAgLQog ICAgLSAgICBBZGQgY3VzdG9tIHZhcmlhYmxlICd3b3JsZC1jbG9jay1zb3J0LWZ1bmN0aW9u JywgYW5kIHNvcnQgdGltZSB6b25lCiAgICAtICAgIGVudHJpZXMgaW4gJ3dvcmxkLWNsb2Nr LWRpc3BsYXknIGFjY29yZGluZyB0byBpdC4KICAgICsgICAgKiBsaXNwL3RpbWUuZWwgKHdv cmxkLWNsb2NrLXNvcnQtb3JkZXIpOiBBZGQgdXNlciBvcHRpb24uCiAgICArICAgICh3b3Js ZC1jbG9jay0tc29ydC1lbnRyaWVzKTogQWRkIGF1eGlsaWFyeSBzb3J0aW5nIGZ1bmN0aW9u LgogICAgKyAgICAod29ybGQtY2xvY2stZGlzcGxheSk6IFNvcnQgZW50cmllcyBiYXNlZCBv biB0aGUgbmV3IHVzZXIgb3B0aW9uLgogICAgIAogICAgICAjIyBldGMvTkVXUyAjIwogICAg LUBAIGV0Yy9ORVdTOiBZb3UgY2FuIG5vdyB1c2UgdGhlIG1vdXNlIHdoZWVsIHRvIHNjcm9s bCB0aGUgY2FsZW5kYXIgYnkgMyBtb250aHMuCiAgICArQEAgZXRjL05FV1M6IGlzIGJvdW5k IHRvICdDLWwnIGluIHRoZSBjYWxlbmRhciBidWZmZXIuCiAgICArIFlvdSBjYW4gbm93IHVz ZSB0aGUgbW91c2Ugd2hlZWwgdG8gc2Nyb2xsIHRoZSBjYWxlbmRhciBieSAzIG1vbnRocy4K ICAgICAgV2l0aCB0aGUgc2hpZnQgbW9kaWZpZXIsIGl0IHNjcm9sbHMgYnkgb25lIG1vbnRo LiAgV2l0aCB0aGUgbWV0YQogICAgICBtb2RpZmllciwgaXQgc2Nyb2xscyBieSB5ZWFyLgog ICAgLSAMCiAgICAgKwogICAgICsqKiBUaW1lCiAgICAgKwogICAgLSsqKiogTmV3IHVzZXIg b3B0aW9uICd3b3JsZC1jbG9jay1zb3J0LWZ1bmN0aW9uJwogICAgLSsKICAgIC0rVGhlIG9y ZGVyIG9mIHRpbWUgem9uZSBlbnRyaWVzIGluIHRoZSAnd29ybGQtY2xvY2snIGlzIHVwZGF0 ZWQgYWNjb3JkaW5nCiAgICAtK3RvIHRoZSAnd29ybGQtY2xvY2stc29ydC1mdW5jdGlvbicu ICBCeSBkZWZhdWx0LCBubyBzb3J0aW5nIGlzIGRvbmUgYW5kCiAgICAtK2VudHJpZXMgYXBw ZWFyIGFjY29yZGluZyB0byB0aGVpciBvcmRlciBpbiAnd29ybGQtY2xvY2stbGlzdCcgKG9y IGEKICAgIC0rZGVmYXVsdCBpZiB1bnNldCkuCiAgICArKyoqKiBOZXcgdXNlciBvcHRpb24g J3dvcmxkLWNsb2NrLXNvcnQtb3JkZXInLgogICAgKytUaGlzIG9wdGlvbiBjb250cm9scyB0 aGUgb3JkZXIgb2YgdGltZXpvbmUgZW50cmllcyBpbiB0aGUgJ3dvcmxkLWNsb2NrJy4KICAg ICsrQnkgZGVmYXVsdCwgbm8gc29ydGluZyBpcyBkb25lLCBhbmQgZW50cmllcyBhcHBlYXIg aW4gdGhlIHNhbWUgb3JkZXIgYXMKICAgICsraW4gJ3dvcmxkLWNsb2NrLWxpc3QnLiAgQW55 IGZvcm1hdCB1bmRlcnN0b29kIGJ5ICdmb3JtYXQtdGltZS1zdHJpbmcnCiAgICArK2NhbiBi ZSB1c2VkIHRvIHNwZWNpZnkgYSBrZXkgZm9yIHRoZSBzb3J0IG9yZGVyLCB3aGljaCBpcyB1 cGRhdGVkIHVwb24KICAgICsrZWFjaCByZWZyZXNoLiAgVGhlIHNvcnQgZGlyZWN0aW9uIGNh biBiZSBjb250cm9sbGVkIGJ5IHVzaW5nIGEgY29ucyBjZWxsCiAgICArK29mIGEgZm9ybWF0 IHN0cmluZyBhbmQgYSBib29sZWFuLiAgQWx0ZXJuYXRpdmVseSwgYSBzb3J0aW5nIGZ1bmN0 aW9uIGNhbgogICAgKytiZSBwcm92aWRlZCBkaXJlY3RseS4KICAgICArCiAgICArIAwKICAg ICAgKiBOZXcgTW9kZXMgYW5kIFBhY2thZ2VzIGluIEVtYWNzIDMxLjEKICAgICAgCiAgICAt ICoqIE5ldyBtaW5vciBtb2RlICdkZWxldGUtdHJhaWxpbmctd2hpdGVzcGFjZS1tb2RlJy4K ICAgICAKICAgICAgIyMgbGlzcC90aW1lLmVsICMjCiAgICAgQEAgbGlzcC90aW1lLmVsOiB3 b3JsZC1jbG9jay10aW1lci1zZWNvbmQKICAgICAgICA6dHlwZSAnbmF0bnVtCiAgICAgICAg OnZlcnNpb24gIjI4LjEiKQogICAgICAKICAgIC0rKGRlZmN1c3RvbSB3b3JsZC1jbG9jay1z b3J0LWZ1bmN0aW9uICdpZGVudGl0eQogICAgLSsgICJGdW5jdGlvbiB0byBzb3J0IHRpbWUg em9uZSBlbnRyaWVzIHVwb24gZWFjaCBgd29ybGQtY2xvY2stZGlzcGxheScuCiAgICAtK0l0 IHNob3VsZCB0YWtlIGEgbGlzdCBvZiBgKFRJTUVaT05FIExBQkVMKScgZW50cmllcyBhbmQg cmV0dXJuIHRoZSBzYW1lLgogICAgKysoZGVmY3VzdG9tIHdvcmxkLWNsb2NrLXNvcnQtb3Jk ZXIgbmlsCiAgICArKyAgIlNvcnQgb3JkZXIgb2YgZW50cmllcyBpbiB0aGUgYHdvcmxkLWNs b2NrJy4KICAgICsrVGhpcyB2YXJpYWJsZSBjYW4gdGFrZSBhIGZldyBkaWZmZXJlbnQgZm9y bXM6CiAgICAgKwogICAgLStUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggYHdv cmxkLWNsb2NrLWxpc3QnIGlmIHNldCwgb3RoZXJ3aXNlCiAgICAtK3dpdGggYSBkZWZhdWx0 LiIKICAgICsrLSBBIG5pbCB2YWx1ZSBpbmRpY2F0ZXMgbm8gc29ydGluZywgYW5kIHRoZSBk aXNwbGF5ZWQgb3JkZXIgaXMgdGhlIHNhbWUKICAgICsrICBhcyBpbiBgd29ybGQtY2xvY2st bGlzdCcuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgogICAgKysKICAgICsrLSBBIHN0cmluZyBp cyB0YWtlbiBhcyBhIGZvcm1hdCBmb3IgYGZvcm1hdC10aW1lLXN0cmluZycsIHdob3NlIG91 dHB1dAogICAgKysgIGlzIHVzZWQgYXMgdGhlIHNvcnRpbmcga2V5LiAgRm9yIGV4YW1wbGUs IGFuIElTTyA4NjAxIGZvcm1hdCBgXCIlRlQlVFwiJwogICAgKysgIG1lYW5zIGVudHJpZXMg YXJlIHNvcnRlZCBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLgogICAgKysKICAgICsrLSBBIGNv bnMgY2VsbCBvZiB0aGUgZm9ybSAoU1RSSU5HIC4gQk9PTCkgYWdhaW4gcHJvdmlkZXMgYSBm b3JtYXQgZm9yCiAgICArKyAgYGZvcm1hdC10aW1lLXN0cmluZycuICBUaGUgYm9vbGVhbiBw YXJ0IGNvbnRyb2xzIHRoZSBzb3J0IGRpcmVjdGlvbi4KICAgICsrICBGb3IgZXhhbXBsZSwg YChcIiVGVCVUXCIgLiAgdCknIG1lYW5zIGVudHJpZXMgYXJlIHNvcnRlZCBpbiByZXZlcnNl CiAgICArKyAgY2hyb25vbG9naWNhbCBvcmRlci4KICAgICsrCiAgICArKy0gQSBmdW5jdGlv biB0aGF0IHRha2VzIGEgbGlzdCBvZiAoVElNRVpPTkUgTEFCRUwpIGVudHJpZXMgYW5kIGEg VElNRSBhcwogICAgKysgIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW5vdGhlciBsaXN0IG9m IGVudHJpZXMuIgogICAgICsgIDp2ZXJzaW9uICIzMS4xIgogICAgLSsgIDp0eXBlICcoZnVu Y3Rpb24gOnRhZyAiU29ydGluZyBmdW5jdGlvbiIpKQogICAgKysgIDp0eXBlICcoY2hvaWNl IChjb25zdCA6dGFnICJObyBzb3J0aW5nIiBuaWwpCiAgICArKwkJIChjb25zdCA6dGFnICJD aHJvbm9sb2dpY2FsIG9yZGVyIiAiJUZUJVQiKQogICAgKysJCSAoY29uc3QgOnRhZyAiUmV2 ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyIiAoIiVGVCVUIiAuIHQpKQogICAgKysJCSAoY29u c3QgOnRhZyAiVGltZSBvZiBkYXkgb3JkZXIiICIlVCIpCiAgICArKwkJIChjb25zdCA6dGFn ICJSZXZlcnNlIHRpbWUgb2YgZGF5IG9yZGVyIiAoIiVUIiAuIHQpKQogICAgKysJCSAoc3Ry aW5nIDp0YWcgIkZvcm1hdCBzdHJpbmciKQogICAgKysJCSAoY29ucyA6dGFnICJGb3JtYXQg c3RyaW5nIGFuZCByZXZlcnNlIGZsYWciCiAgICArKwkJICAgICAgIChzdHJpbmcgOnRhZyAi Rm9ybWF0IHN0cmluZyIpCiAgICArKwkJICAgICAgIChib29sZWFuIDp0YWcgIlJldmVyc2Ui KSkKICAgICsrCQkgKGZ1bmN0aW9uIDp0YWcgIlNvcnRpbmcgZnVuY3Rpb24iKSkpCiAgICAg KwogICAgICAoZGVmZmFjZSB3b3JsZC1jbG9jay1sYWJlbAogICAgICAgICcoKHQgOmluaGVy aXQgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkpCiAgICAgICAgIkZhY2UgZm9yIHRp bWUgem9uZSBsYWJlbCBpbiBgd29ybGQtY2xvY2snIGJ1ZmZlci4iKQogICAgLUBAIGxpc3Av dGltZS5lbDogd29ybGQtY2xvY2stLXRpbWVyCiAgICArQEAgbGlzcC90aW1lLmVsOiB3b3Js ZC1jbG9jay1tb2RlCiAgICArIChkZWZ2YXIgd29ybGQtY2xvY2stLXRpbWVyIG5pbAogICAg ICAgICJUaGUgY3VycmVudCB3b3JsZCBjbG9jayB0aW1lci4iKQogICAgICAKICAgICsrKGRl ZnVuIHdvcmxkLWNsb2NrLS1zb3J0LWVudHJpZXMgKHR6bGlzdCB0aW1lKQogICAgKysgICJT b3J0IFRaTElTVCBhY2NvcmRpbmcgdG8gYHdvcmxkLWNsb2NrLXNvcnQtb3JkZXInIGF0IGEg Z2l2ZW4gVElNRS4iCiAgICArKyAgKHBjYXNlIHdvcmxkLWNsb2NrLXNvcnQtb3JkZXIKICAg ICsrICAgICgocHJlZCBudWxsKSB0emxpc3QpCiAgICArKyAgICAoKG9yIChhbmQgKHByZWQg c3RyaW5ncCkgZm9ybWF0KQogICAgKysJIGAoLChhbmQgKHByZWQgc3RyaW5ncCkgZm9ybWF0 KSAuCiAgICArKwkgICAsKGFuZCAocHJlZCBib29sZWFucCkgcmV2ZXJzZSkpKQogICAgKysg ICAgIChzb3J0IHR6bGlzdAogICAgKysJICAgOmtleSAobGFtYmRhIChlbnRyeSkKICAgICsr CQkgIChmb3JtYXQtdGltZS1zdHJpbmcgZm9ybWF0IHRpbWUgKGNhciBlbnRyeSkpKQogICAg KysJICAgOnJldmVyc2UgcmV2ZXJzZSkpCiAgICArKyAgICAoKHByZWQgZnVuY3Rpb25wKSAo ZnVuY2FsbCB3b3JsZC1jbG9jay1zb3J0LW9yZGVyIHR6bGlzdCB0aW1lKSkKICAgICsrICAg IChfIChlcnJvciAiSW52YWxpZCBgd29ybGQtY2xvY2stc29ydC1vcmRlcic6IGAlcyciCiAg ICArKwkgICAgICB3b3JsZC1jbG9jay1zb3J0LW9yZGVyKSkpKQogICAgKysKICAgICAgKGRl ZnVuIHdvcmxkLWNsb2NrLWRpc3BsYXkgKGFsaXN0KQogICAgIC0gICJSZXBsYWNlIGN1cnJl bnQgYnVmZmVyIHRleHQgd2l0aCB0aW1lcyBpbiB2YXJpb3VzIHpvbmVzLCBiYXNlZCBvbiBB TElTVC4iCiAgICArLSAgKGxldCAoKGluaGliaXQtcmVhZC1vbmx5IHQpCiAgICArLQkoYnVm ZmVyLXVuZG8tbGlzdCB0KQogICAgKy0JKG5vdyAoY3VycmVudC10aW1lKSkKICAgICstCSht YXgtd2lkdGggMCkKICAgICstCXJlc3VsdCBmbXQpCiAgICAgKyAgIlJlcGxhY2UgY3VycmVu dCBidWZmZXIgdGV4dCB3aXRoIHRpbWVzIGluIHZhcmlvdXMgem9uZXMsIGJhc2VkIG9uIEFM SVNULgogICAgLStUaGUgZGlzcGxheWVkIGVudHJpZXMgYXJlIHNvcnRlZCBhY2NvcmRpbmcg dG8gYHdvcmxkLWNsb2NrLXNvcnQtZnVuY3Rpb24nLiIKICAgIC0gICAobGV0ICgoaW5oaWJp dC1yZWFkLW9ubHkgdCkKICAgIC0gCShidWZmZXItdW5kby1saXN0IHQpCiAgICAtIAkobm93 IChjdXJyZW50LXRpbWUpKQogICAgLSsJKHNvcnRlZC16b25lcyAoZnVuY2FsbCB3b3JsZC1j bG9jay1zb3J0LWZ1bmN0aW9uIGFsaXN0KSkKICAgIC0gCShtYXgtd2lkdGggMCkKICAgIC0g CXJlc3VsdCBmbXQpCiAgICArK1RoZSBlbnRyaWVzIGFyZSBvcmRlcmVkIGFjY29yZGluZyB0 byBgd29ybGQtY2xvY2stc29ydC1vcmRlcicuIgogICAgKysgIChsZXQqICgoaW5oaWJpdC1y ZWFkLW9ubHkgdCkKICAgICsrCSAoYnVmZmVyLXVuZG8tbGlzdCB0KQogICAgKysJIChub3cg KGN1cnJlbnQtdGltZSkpCiAgICArKwkgKHpvbmVzICh3b3JsZC1jbG9jay0tc29ydC1lbnRy aWVzIGFsaXN0IG5vdykpCiAgICArKwkgKG1heC13aWR0aCAwKQogICAgKysJIHJlc3VsdCBm bXQpCiAgICAgICAgICAoZXJhc2UtYnVmZmVyKQogICAgIC0gICAgKGRvbGlzdCAoem9uZSBh bGlzdCkKICAgIC0rICAgIChkb2xpc3QgKHpvbmUgc29ydGVkLXpvbmVzKQogICAgKysgICAg KGRvbGlzdCAoem9uZSB6b25lcykKICAgICAgICAgICAgKGxldCogKChsYWJlbCAoY2FkciB6 b25lKSkKICAgICAgCSAgICAgKHdpZHRoIChzdHJpbmctd2lkdGggbGFiZWwpKSkKICAgICAg CShwdXNoIChjb25zIGxhYmVsCgpiYXNlLWNvbW1pdDogODZlYjczM2FlZjQ5ZmM5MWI2ZjJj ZjRlY2IzODRjMDVlODk5ZmZhNQotLSAKSmFjb2IgUy4gR29yZG9uCmphY29iLmFzLmdvcmRv bkBnbWFpbC5jb20KCj09PT09PT09PT09PT09PT09PT09PT09PT0KClBsZWFzZSBhdm9pZCBz ZW5kaW5nIG1lIEhUTUwgZW1haWxzIGFuZCBNUyBPZmZpY2UgZG9jdW1lbnRzLgpodHRwczov L3VzZXBsYWludGV4dC5lbWFpbC8jZXRpcXVldHRlCmh0dHBzOi8vd3d3LmdudS5vcmcvcGhp bG9zb3BoeS9uby13b3JkLWF0dGFjaG1lbnRzLmh0bWwKCg== --------------0vw3dMzwDCnApzzK0vBrdxlH-- From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 12 03:17:06 2025 Received: (at 78678) by debbugs.gnu.org; 12 Jun 2025 07:17:06 +0000 Received: from localhost ([127.0.0.1]:55655 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uPcBO-0000ak-GJ for submit@debbugs.gnu.org; Thu, 12 Jun 2025 03:17:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43938) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uPcBM-0000a3-Kn for 78678@debbugs.gnu.org; Thu, 12 Jun 2025 03:17:05 -0400 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 1uPcBH-0003lX-A3; Thu, 12 Jun 2025 03:16:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=gQMSwltfoMD9p0PCiuaaV1ajhlMuwVGl//qkNTTwsVM=; b=OKnWm3mHluXmGzG7y1wY RgPiRiX99URutfTNs2Ifn/8lF7B3t/AEYdaqYfTPoItqHqBY7q02afCGv28VxNx7+8GhWcwRm9d8r gCkrCtnsyDLKplSkjEJYwqMD8tl6VsBFBm/Srys+tTRyhD/yKzrVAgh8R3Mft3NmcrMF1P74F+H6v x4ighharTMUdi+71qQrimHY3QQbFBxwebNrteafWeroh32NdQgy1egKXDoBQzECVOVgSsN1U3w2Rr 23OIBIReJWagCUNVXsrr0z3+NtUMA2tQxneOgQYONcSkPTJqTc30VLuqt26wz+kH74xCFQwKI2NDB E6bFnggLZOYQ/w==; Date: Thu, 12 Jun 2025 10:16:29 +0300 Message-Id: <86wm9hfn02.fsf@gnu.org> From: Eli Zaretskii To: "Jacob S. Gordon" In-Reply-To: <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> (jacob.as.gordon@gmail.com) Subject: Re: bug#78678: [PATCH v2] world-clock: Add user option to control order of entries References: <87cybl5obg.fsf@gmail.com> <86msapnifx.fsf@gnu.org> <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78678 Cc: 78678@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 (---) > Date: Sun, 8 Jun 2025 23:54:06 -0400 > From: "Jacob S. Gordon" > Cc: 78678@debbugs.gnu.org > > On 2025-06-03 08:00, Eli Zaretskii wrote: > > This requires users to be Lisp programmers. If there are > > reasonably-useful cases where a certain order would be desirable, > > allowing users to customize a variable using symbol values makes the > > feature much more friendly to users who are not programmers. Would > > it make sense to add a couple of such values? > > I agree, and I think it does make sense. After trying a version with > symbols for common use-cases, I think the most flexible option is to > allow the user to provide a format for `format-time-string' to act as > the sorting key. This is similar in complexity to the variable > `world-clock-time-format', and some predefined values can be put in > the `:type' block of the `defcustom': > > #+begin_src emacs-lisp > :type '(choice (const :tag "No sorting" nil) > (const :tag "Chronological order" "%FT%T") > (const :tag "Reverse chronological order" ("%FT%T" . t)) > (const :tag "Time of day order" "%T") > (const :tag "Reverse time of day order" ("%T" . t)) > (string :tag "Format string") > (cons :tag "Format string and reverse flag" > (string :tag "Format string") > (boolean :tag "Reverse")) > (function :tag "Sorting function"))) > #+end_src > > Then, sorting can be switched based on the type in a helper function: > > #+begin_quote > (defun world-clock--sort-entries (tzlist time) > "Sort TZLIST according to `world-clock-sort-order' at a given TIME." > (pcase world-clock-sort-order > ((pred null) tzlist) > ((or (and (pred stringp) format) > `(,(and (pred stringp) format) . > ,(and (pred booleanp) reverse))) > (sort tzlist > :key (lambda (entry) > (format-time-string format time (car entry))) > :reverse reverse)) > ((pred functionp) (funcall world-clock-sort-order tzlist time)) > (_ (error "Invalid `world-clock-sort-order': `%s'" > world-clock-sort-order)))) > #+end_quote > > In terms of coding standards: > > + I could do this without `pcase', if desired. > + I can write unit tests if we’re okay with the idea. > > > Please reformat the log message according to our conventions > > (described in CONTRIBUTE). > > Done in the updated patch (I think?). Thanks, this version LGTM. However, before we can accept this contribution, we need you to sign a copyright-assignment agreement, given the size of this contribution. If you are willing to do that, I will send you the form to fill and the instructions to go with it, to start your assignment paperwork rolling. From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 12 12:10:25 2025 Received: (at 78678) by debbugs.gnu.org; 12 Jun 2025 16:10:25 +0000 Received: from localhost ([127.0.0.1]:59645 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uPkVU-0003wQ-S0 for submit@debbugs.gnu.org; Thu, 12 Jun 2025 12:10:25 -0400 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]:53644) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uPkVK-0003sV-DX for 78678@debbugs.gnu.org; Thu, 12 Jun 2025 12:10:20 -0400 Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-4a44b0ed780so15729211cf.3 for <78678@debbugs.gnu.org>; Thu, 12 Jun 2025 09:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749744608; x=1750349408; darn=debbugs.gnu.org; h=content-transfer-encoding:in-reply-to:cc:content-language:from :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=5LhkmiJZYqXerCy7RvtxRZbdIObR33i2N0mKheLqilg=; b=dIbOkkqbVIlRwdfUCcn1HAPt79aLHhdtlBWWM9rNnTBQuZOAGgG1qMWa/DdPJBzkGr S3dA8R+UjQK69WbSl1r27RCLU4ixx/Mw02Z4y0uS9T5rJEJmvonYSi7YIOvv8pCmvzAi +iSuCx00IG4z0mx/D57E2TLus0ubnZUFHmE10lpDpbK1PhiHs8qTfBpvNSafUAS6Mshb SES1HgN8I994WLJx4OvxRZzVQEomhRKRILD0pR91RPTF5oW/XLKdIyjbdZ/7y1kmUfno 732TDMuVMZq+GXH8Luo5VUVQ5BwWv3ekan03w2Di07TRmb4MvvOA5FIglDcZS1LAsQIY 56wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749744608; x=1750349408; h=content-transfer-encoding:in-reply-to:cc:content-language:from :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5LhkmiJZYqXerCy7RvtxRZbdIObR33i2N0mKheLqilg=; b=TNh7dO7rXu6hIxT4vgPZQ5bQM7tAWDXM0u9mUDbzFyqa9VwrvuoJhJGiKS4YM0v19d 9Roe6ieVSC8P4ZwGe6pje4Xl2s03fx8Rf3Ps+d2uuEQF5HwioSSmoFZ8fQeG/ofHwxhb LHyPEPlm5KQLYca6dsWu8TnW3lzmoEmQlCVIyDg5FE6VrQw1jDClRNHJGRNFGriVMD9A xkS1K5ls7LFlaMz20WsPOPC4SpfVp0U9bv+SeTOPLpFS/cXsrX2jSKeEeXfsLnNzrs2Z 06oOd/k/4WzytGKT9KEw1WnqEZghnf9LknfiCr6iWYjm2AWbe+FkLEUr1/nx+2WDRyMp fzqw== X-Gm-Message-State: AOJu0YyYLm1slk+Kyb0rz7JGhy0WnIfZsQmHc2LMyzOG1l0bAngkCwax VSYtXWraldmRFcy3PiQiA7zvldRaDLeBVF+mFPqFi2cJ16XBLc+on2eM X-Gm-Gg: ASbGnct+lMBI/wZ+okwvf/U0g9ykWl6iUMMjInNkfRq5bCF+zmQ4/7bldo4DaLt9O1M rehzXXEYKc9jQOE56mmt8Mkvjhk0KkoFO6RLlKULO57r54OMdETrLNKU1+MnjmcTp4EfYe4tU1w 6F5btXI7DTNwAd6+dZyOjr+qfw55eNV5V/MiAAM/rfXL18SdM1LEt3JkJm1jvgiioRab39EjfYU oYgyVk17QkG/COV/LCFbheB1xExHrthIl9jxidheHtor+Raa/OHP2Fxbs6dQ61Ls0aRPuEGgitQ sOBy62lURT2c71lrSBM/Mm+CZWB1kKJsQIKxlUYMdROQNRWsx/hiX1GnziOm2Lt6P5dsra9UAkU BxTldKTxFAD4zS+e8Fd/pHVPbgA== X-Google-Smtp-Source: AGHT+IHO3E8MzYuOQJwzdI1CFeHNHJh0cDzj0nz2Rz8UtOTuMO+ihtVBzHJ9FvuhdrOxoSRG0ph63g== X-Received: by 2002:a05:622a:428c:b0:4a5:8eef:f891 with SMTP id d75a77b69052e-4a722a230d5mr71634031cf.39.1749744608329; Thu, 12 Jun 2025 09:10:08 -0700 (PDT) Received: from [192.168.1.10] (135-23-138-165.cpe.pppoe.ca. [135.23.138.165]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a72a2bfc1esm5833161cf.7.2025.06.12.09.10.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 12 Jun 2025 09:10:08 -0700 (PDT) Message-ID: Date: Thu, 12 Jun 2025 12:10:07 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#78678: [PATCH v2] world-clock: Add user option to control order of entries To: Eli Zaretskii References: <87cybl5obg.fsf@gmail.com> <86msapnifx.fsf@gnu.org> <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> <86wm9hfn02.fsf@gnu.org> From: "Jacob S. Gordon" Content-Language: en-CA In-Reply-To: <86wm9hfn02.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78678 Cc: 78678@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.0 (-) Hello, On 2025-06-12 03:16, Eli Zaretskii wrote: > However, before we can accept this contribution, we need you to sign a > copyright-assignment agreement, given the size of this contribution. The FSF signed my agreement on [2025-06-06 Fri], so I think I’m clear to contribute now. Thanks, -- Jacob S. Gordon jacob.as.gordon@gmail.com ====================== Please avoid sending me HTML emails and MS Office documents. https://useplaintext.email/#etiquette https://www.gnu.org/philosophy/no-word-attachments.html From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 12 12:36:40 2025 Received: (at 78678) by debbugs.gnu.org; 12 Jun 2025 16:36:40 +0000 Received: from localhost ([127.0.0.1]:59776 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uPkut-0005hF-TG for submit@debbugs.gnu.org; Thu, 12 Jun 2025 12:36:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46516) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uPkun-0005gZ-3v for 78678@debbugs.gnu.org; Thu, 12 Jun 2025 12:36:37 -0400 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 1uPkuh-00009a-LA; Thu, 12 Jun 2025 12:36:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=P7yn61zlr0EXjsNnmsYGcvfgV4LirWINTXfgHq5CNxg=; b=b6S6y8mDGux1FpQ8oq9M DIiBzcGcllR0YyyYmvuQrkBvGzOjHNig9abweknta7AA/gdvoCPINudf6IiFaacVD0BYEDI2Gr7f5 tb4cj39QGhriM8b9Ovz/xbLM43Nfvd7QJnQ9hfB11ebZlLmKyWBxEz0uy5f+dVD/JNNCQMCQFqNFX o6s+2tqEkpa9HXCpd2RshGFeyVpPcCS6RfcIt6OUnq5wGZ0Jhh4fvcDbxxwaojY6tgIr2VCANbWaS /krRR4u7ac3y4V/O+YU0oIcsKSq8Z+Z5g739VYpInzHLrkdOv5NayLlIINrazkMTQDHcbJCBpZuzJ 73mVIOYQLO+/UA==; Date: Thu, 12 Jun 2025 19:36:25 +0300 Message-Id: <86a56cgbna.fsf@gnu.org> From: Eli Zaretskii To: "Jacob S. Gordon" In-Reply-To: (jacob.as.gordon@gmail.com) Subject: Re: bug#78678: [PATCH v2] world-clock: Add user option to control order of entries References: <87cybl5obg.fsf@gmail.com> <86msapnifx.fsf@gnu.org> <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> <86wm9hfn02.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78678 Cc: 78678@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 (---) > Date: Thu, 12 Jun 2025 12:10:07 -0400 > From: "Jacob S. Gordon" > Cc: 78678@debbugs.gnu.org > > Hello, > > On 2025-06-12 03:16, Eli Zaretskii wrote: > > However, before we can accept this contribution, we need you to sign a > > copyright-assignment agreement, given the size of this contribution. > > The FSF signed my agreement on [2025-06-06 Fri], so I think I’m clear > to contribute now. Thanks for letting us know. Your assignment is not yet on file, so I guess we need to wait for a couple of days until it is. From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 14 10:22:52 2025 Received: (at 78678-done) by debbugs.gnu.org; 14 Jun 2025 14:22:52 +0000 Received: from localhost ([127.0.0.1]:39708 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uQRmT-0006QZ-Rq for submit@debbugs.gnu.org; Sat, 14 Jun 2025 10:22:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56376) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uQRmG-0006Ot-W3 for 78678-done@debbugs.gnu.org; Sat, 14 Jun 2025 10:22:45 -0400 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 1uQRmA-0007ru-Ul; Sat, 14 Jun 2025 10:22:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=RbVNeib5Z6TMl7ar/jzh7wn7E+zlmGbEiXSlveoOvzo=; b=i+kDOoffBJkkMQAE6NJV FfIpFVo0bb2V4uQA+W9Jqd1Y+q+jRdZnJIX6fBka2TNEnF59YaE4qxSKarigGsBeWVgqkmZjeYv03 JF5BeTr7AHreJiT5DsJOzw9E4k7TPZ5M6t9BfSOfHPtLhGCRZWaoOt1d3IOCgfxzuyXRbdqzHY8Ng 7/kWkQVW04d+1J2i0VplD6XZHhfEsQd/vQFplUK/IzyYR8B5rwjZIVByi5CIhprrFfzp7U4K6IL18 hzXLdv2OSxrm0Z0DZ5JQB7lkXDPvg+onhz+G65+TNPDndIPPCW18PiAk9kSf9jTx18Dl0odSg49gp qCpKUhUKxVBbiA==; Date: Sat, 14 Jun 2025 17:22:29 +0300 Message-Id: <8634c2s8re.fsf@gnu.org> From: Eli Zaretskii To: "Jacob S. Gordon" In-Reply-To: <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> (jacob.as.gordon@gmail.com) Subject: Re: bug#78678: [PATCH v2] world-clock: Add user option to control order of entries References: <87cybl5obg.fsf@gmail.com> <86msapnifx.fsf@gnu.org> <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78678-done Cc: 78678-done@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 (---) > Date: Sun, 8 Jun 2025 23:54:06 -0400 > From: "Jacob S. Gordon" > Cc: 78678@debbugs.gnu.org > > On 2025-06-03 08:00, Eli Zaretskii wrote: > > This requires users to be Lisp programmers. If there are > > reasonably-useful cases where a certain order would be desirable, > > allowing users to customize a variable using symbol values makes the > > feature much more friendly to users who are not programmers. Would > > it make sense to add a couple of such values? > > I agree, and I think it does make sense. After trying a version with > symbols for common use-cases, I think the most flexible option is to > allow the user to provide a format for `format-time-string' to act as > the sorting key. This is similar in complexity to the variable > `world-clock-time-format', and some predefined values can be put in > the `:type' block of the `defcustom': > > #+begin_src emacs-lisp > :type '(choice (const :tag "No sorting" nil) > (const :tag "Chronological order" "%FT%T") > (const :tag "Reverse chronological order" ("%FT%T" . t)) > (const :tag "Time of day order" "%T") > (const :tag "Reverse time of day order" ("%T" . t)) > (string :tag "Format string") > (cons :tag "Format string and reverse flag" > (string :tag "Format string") > (boolean :tag "Reverse")) > (function :tag "Sorting function"))) > #+end_src > > Then, sorting can be switched based on the type in a helper function: > > #+begin_quote > (defun world-clock--sort-entries (tzlist time) > "Sort TZLIST according to `world-clock-sort-order' at a given TIME." > (pcase world-clock-sort-order > ((pred null) tzlist) > ((or (and (pred stringp) format) > `(,(and (pred stringp) format) . > ,(and (pred booleanp) reverse))) > (sort tzlist > :key (lambda (entry) > (format-time-string format time (car entry))) > :reverse reverse)) > ((pred functionp) (funcall world-clock-sort-order tzlist time)) > (_ (error "Invalid `world-clock-sort-order': `%s'" > world-clock-sort-order)))) > #+end_quote > > In terms of coding standards: > > + I could do this without `pcase', if desired. > + I can write unit tests if we’re okay with the idea. > > > Please reformat the log message according to our conventions > > (described in CONTRIBUTE). > > Done in the updated patch (I think?). Thanks, installed on master, and closing the bug. (the code as submitted triggered a byte-compiler warning, so I fixed that by a followup patch.) From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 14 10:32:23 2025 Received: (at 78678-done) by debbugs.gnu.org; 14 Jun 2025 14:32:23 +0000 Received: from localhost ([127.0.0.1]:39758 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uQRvi-0007YI-IL for submit@debbugs.gnu.org; Sat, 14 Jun 2025 10:32:23 -0400 Received: from mail-qv1-xf33.google.com ([2607:f8b0:4864:20::f33]:57721) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uQRvd-0007X6-VV for 78678-done@debbugs.gnu.org; Sat, 14 Jun 2025 10:32:19 -0400 Received: by mail-qv1-xf33.google.com with SMTP id 6a1803df08f44-6fafdd322d3so33634026d6.3 for <78678-done@debbugs.gnu.org>; Sat, 14 Jun 2025 07:32:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749911532; x=1750516332; darn=debbugs.gnu.org; h=content-transfer-encoding:in-reply-to:cc:content-language:from :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=+o3zdIp7EmBfBanz9ePibvLCtdArS0yW5IRJ1RTOrFU=; b=IgX5EnU3P7WrvZTTJ/LiG1ZVOPCw2f7XMOe8efLUd3Wr8AQvsmm1XwW4ckMedEgpZQ g2XP5ltf4sKdXZhTjKb8cfjg8tk3mFU5jkcivZLkj7cfhjGoprUIl7h6GNyIVaZA2idu ZFlel6UnVvMLnOjZOA01zi/PikMYe9pVdAqhlqKi/Pj5C0kM2OU2/ZNbyRDqUG8EYeIe qID/VnX9lbXsYhk3jYu6CVghEWGMZFQUb4WVpGqmUeuLJp8YKy0C4AKHRgsIMfep5z+S +N8xKy/kjueGBzpq5GPqHEjf3hQEPwxMb/a6KScnV3MwA5DEvqrMJShm/bJW/c6yWu+3 aPVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749911532; x=1750516332; h=content-transfer-encoding:in-reply-to:cc:content-language:from :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+o3zdIp7EmBfBanz9ePibvLCtdArS0yW5IRJ1RTOrFU=; b=p4KtGRt/ygyFkm0+N651yiYsAMV7wAjF1fX0evcCqyVriC/i6gWDOc7AoYdl4Jbq9e 0UEr/VawAac2s7uNy01dVmbtdBFKII4ZzRkXh+i8WysYcDjesYBsQTiWukeVXjPbSpKA jc5UNFbkoEAPFkPiQRKTEfKE7yZuZkuumwiBVk2MOj4SSUkdcDbqRTFXHboxqpkKZGQp oKoZSEahR/HIUeKPHFr90/qWEZI5i0PLfkdyKjCB0tF0LTWjc7EjDKVNivgYO4YYxTMk v8A186fGosxpWmouymoDCdztPXFXyK1Xm376G7drT1b9iCLrR2Ee4keeA7Zzo5JRAZc+ 98EA== X-Gm-Message-State: AOJu0YxO18UF8su98bkNyEIX85O65s5Kl2NiHdhsGYpUHcPU9cI6jDwl xdl62hz8tX69yeI0ze+h0eI2t4YVQtwQ5zhNSVOWfqiJpOwYyT51ojIq X-Gm-Gg: ASbGnctMZn+gWUTyxwqPSYivBCEjrRCYsYj3elRy7A3i5viIMqYh3hUKOIZbGdasdrz Bba+vAmP8wxoDFzRZrKpcL+qUXtiR6UXlI7sCyfGsmL6xSMOQ+PTo4f7mguYSVad5h0VE+DfrdB TH9bwb4BaGgtcgowRN2W/qXJJ10bGy+PY5Zx4XcFVcFyLN9Ur9Rtt0Hex64dIu5OxfBwsqsvgjU 2h/tWDyZn1aZ8dAxAUtaf2BIGm5NzRGW4USRGwWCsnDjx/oRkNS4WLlnIJ6IqFZJPlPwzgv8Kya cOO8/Y5LatZtpsQ9gJElZGsnNR7t6Vj1Jej3mgtWpr3R54cabFxG0DdubSq+UIYvhz22fSRTb9V CXyYr+fbvNEtpt2j97kvPvq6bUg== X-Google-Smtp-Source: AGHT+IFslTM6tWnl80c9lVFDIgAxGZNCw8iE14Caq6Sp0LcWe+GdN7iXAS6Kt10BAOpAmOMau8kq6A== X-Received: by 2002:a05:6214:5684:b0:6f4:c602:806e with SMTP id 6a1803df08f44-6fb47743264mr48425836d6.13.1749911531953; Sat, 14 Jun 2025 07:32:11 -0700 (PDT) Received: from [192.168.1.10] (135-23-138-165.cpe.pppoe.ca. [135.23.138.165]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6fb35c841d0sm32035326d6.111.2025.06.14.07.32.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 14 Jun 2025 07:32:11 -0700 (PDT) Message-ID: Date: Sat, 14 Jun 2025 10:32:10 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#78678: [PATCH v2] world-clock: Add user option to control order of entries To: Eli Zaretskii References: <87cybl5obg.fsf@gmail.com> <86msapnifx.fsf@gnu.org> <3d34b748-7d49-4dba-a69b-6fddbe98e6f0@gmail.com> <8634c2s8re.fsf@gnu.org> From: "Jacob S. Gordon" Content-Language: en-CA In-Reply-To: <8634c2s8re.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78678-done Cc: 78678-done@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.0 (-) On 2025-06-14 10:22, Eli Zaretskii wrote: > Thanks, installed on master, and closing the bug. Perfect! > (the code as submitted triggered a byte-compiler warning, so I fixed > that by a followup patch.) Shoot, thanks for the fix. I’ve added that to my list of pre-submission checks. Best, -- Jacob S. Gordon jacob.as.gordon@gmail.com ====================== Please avoid sending me HTML emails and MS Office documents. https://useplaintext.email/#etiquette https://www.gnu.org/philosophy/no-word-attachments.html