From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stephen Berman Newsgroups: gmane.emacs.devel Subject: Re: Start of Emacs 30 release cycle Date: Mon, 24 Jun 2024 15:49:24 +0200 Message-ID: <87pls6zc0r.fsf@rub.de> References: <86frt3eptb.fsf@gnu.org> <8734p2212i.fsf@gmx.net> <86jziebj8j.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34291"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: maurooaranda@gmail.com, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Jun 24 15:50:21 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sLk5N-0008gG-JG for ged-emacs-devel@m.gmane-mx.org; Mon, 24 Jun 2024 15:50:21 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sLk4a-0003g7-HQ; Mon, 24 Jun 2024 09:49:32 -0400 Original-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 1sLk4Z-0003fp-9d for emacs-devel@gnu.org; Mon, 24 Jun 2024 09:49:31 -0400 Original-Received: from mout.gmx.net ([212.227.17.20]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sLk4W-00052I-GK; Mon, 24 Jun 2024 09:49:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1719236965; x=1719841765; i=stephen.berman@gmx.net; bh=6UhnmM1+riG6YlJAZoq6u/SAfCuTqtnfzqnrNPGaa4g=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date: Message-ID:MIME-Version:Content-Type:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=HWxoiiWfv2UYVnA8INaTFY8D7ZP1DMWB6Qp94Z+8Xib2ilswEuoSjsDU0LvWfMOS +tTbPCuBD7s64cjEsynJ/x1eT44Hzt1z601Gx0QW5p8578ojglFSqu1XAXQGqOa/P vKQHOZ84TDk5hPfeKQqJg3aZik/EwpCuuQEk19azGNj0lR+Zhb/EopalkXpazdg0e lKdRqToFF2DulmHeX8+MHltwcig8yA5XMVw+5WTxZQAYa5DO1PpMrzuItYVIac2+M lGOfp7jgc/gmxF1VejLjb0oslN0ndVz+YCtwNdhwjvaPL7GpB4BDM4TMxtD8LyXvM ckBFJxos/cn1wMNBnA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Original-Received: from strobelfs ([88.130.48.201]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N8XPt-1sPsoe2lLl-00v3T0; Mon, 24 Jun 2024 15:49:25 +0200 In-Reply-To: <86jziebj8j.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 24 Jun 2024 15:47:24 +0300") X-Provags-ID: V03:K1:lj26BEJHR0ugRsOp98nu8rgc4U//DgoZrn2DKOtKz67B4YvegOn wPaXY3J0lusggN4ixBqbSl+i5C0XzbECtwU+TVbF9++5i2zvSzRlmInX7znRcB7BwbozQ9J 30mOmmIPPYJJoIUvg5v5og5dLqeNczr20rkEKAiR6mylpqZ/v8qLjcEIqelkNAFhdV21stk JdCQBZE/o0ke7rh5mTc4Q== UI-OutboundReport: notjunk:1;M01:P0:urMZkMszgrs=;UcQFYVYhzLxXfn/OtVCLrEDSpyM WH5k+m6N4dacBcgR3t0WwDPiDvk9lU7IEpEeE1EOEkjz7qisN0aV4/3Q+bsSsLesZW6o36vuH ArGJ1kIVZbv9fQGmtbJN0suF3A7SVsi+9x2lBIkslv4Eas4pWkQSCnMcN/u7dHz8MRTvlnXlG Rscumf0BQ9HMNPPRtCbhDSzlSChJsp0VWY4XTHnBjv2YYrQoMIsZsnXrQANor8egns94CfZFL FnwP8h8Wy2ukCWcdPiQoaGz7+rv+mS9PXXd2BjYo1m+rStouanih+1QU0haTl5jztGSM7Eg4h QTGbCUS91pWLZg46PstlebGNgpi+6ozvkY/MY9hwiGOUp5aKzuTEWgUGNnZ1/bzhvFCpM2xNB nNiy2ENfT4xeDwN8Sna2Z9jLEauLxkrq3Q7uEKaIpzXTifuVzDqqzAySjpiSmmwkrP5fr6N90 rB7zF/9PSYucUCE9rDrcjmDjaFkiZjXoVpEX6GkHsf5PB0AIHjI2tgXj3B+W8GoYqu66Bem4b QUnRCKSXRnenAfxrXGVNIURjkbq6FCacIkH7/tq1q61Z9Cybxa6IDew0LzXEanDdFcPfjww04 IjTDikSBVpVFuv8mEbIhlZBfrezo7D8KR7ZA+tLHdFUnnXrgsXzFTrwmz70ccHwDQgAe6UYvF eYy6mLHiTZ/eZ3fjoIdhPAbfwlhLJF5aHyy+2HFPoorf4iacAny04fSpt4LUyQcpPeiHXraFQ W1UbJ186eDz81fAyWdHU0mK+E4mhT0amXJxdrgj5jWJTtPCsntGiiGDJVo2/XPtQ1UOzjJBv Received-SPF: pass client-ip=212.227.17.20; envelope-from=stephen.berman@gmx.net; helo=mout.gmx.net 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:320602 Archived-At: --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Mon, 24 Jun 2024 15:47:24 +0300 Eli Zaretskii wrote: >> From: Stephen Berman >> Cc: emacs-devel@gnu.org >> Date: Mon, 24 Jun 2024 10:32:21 +0200 >> >> On Sun, 23 Jun 2024 16:44:48 +0300 Eli Zaretskii wrote: >> >> > I've created the emacs-30 release branch, which will be used to >> > release the Emacs 30.x series. Changes installed on this branch >> > should be bugfixes that do not modify too low-level code, and thus >> > don't risk destabilizing the codebase we have on that branch now. Al= l >> > the other changes, including new features, should be installed on >> > master, as usual. If in doubt whether a particular change should be >> > installed on master or on the release branch, please ask here. >> >> Can the patches for wid-edit.el in bug#69942 and bug#70594 still be >> installed on the emacs-30 branch? In particular, the patch in bug#7059= 4 >> fixes (or, as I see it, completes) commit 91333dacfa1, which is on the >> emacs-30 branch. > > Given the efforts it took me to get any responses to repeated pings in > discussing those bugs, it would be justified for me to say NO. In case you've forgotten, I responded numerous times, including finding shortcomings in previous patches of mine and correcting them (and in another case (bug#69941) even withdrawing my patch as unsuitable). I appreciate that Mauro has more familiarity and experience with the widget code than I do, but maybe he just doesn't have time for it now. > (One > of the two bugs still doesn't have a consensus about what to install, > AFAIU.) But I'm willing to give people one more chance. I think it'd > also be good to see the patches themselves, since we've seen them so > long ago. Here's the patch for bug#69942: --=-=-= Content-Type: text/x-patch Content-Disposition: attachment Content-Description: widget-unselected face patch Content-Transfer-Encoding: quoted-printable diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index dc481d4d0a5..b7673b01c73 100644 =2D-- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -555,6 +555,29 @@ widget-specify-active (delete-overlay inactive) (widget-put widget :inactive nil)))) +(defface widget-unselected + '((t :inherit widget-inactive)) + "Face used for unselected widgets." + :group 'widget-faces + :version "30.1") + +(defun widget-specify-unselected (widget from to) + "Fontify WIDGET as unselected (not chosen)." + (let ((overlay (make-overlay from to nil t nil))) + (overlay-put overlay 'face 'widget-unselected) + (overlay-put overlay 'evaporate t) + ;; The overlay priority here should be lower than the priority in + ;; `widget-specify-active' (bug#69942). + (overlay-put overlay 'priority 90) + (widget-put widget :unselected overlay))) + +(defun widget-specify-selected (widget) + "Remove fontification of WIDGET as unselected (not chosen)." + (let ((unselected (widget-get widget :unselected))) + (when unselected + (delete-overlay unselected) + (widget-put widget :unselected nil)))) + ;;; Widget Properties. (defsubst widget-type (widget) @@ -2439,10 +2462,16 @@ 'checkbox (defun widget-checkbox-action (widget &optional event) "Toggle checkbox, notify parent, and set active state of sibling." (widget-toggle-action widget event) - (let ((sibling (widget-get-sibling widget))) + (let* ((sibling (widget-get-sibling widget)) + (from (widget-get sibling :from)) + (to (widget-get sibling :to))) (when sibling - (widget-apply sibling - (if (widget-value widget) :activate :deactivate)) + (if (widget-value widget) + (progn + (widget-apply sibling :activate) + (widget-specify-selected sibling)) + :deactivate + (widget-specify-unselected sibling from to)) (widget-clear-undo)))) ;;; The `checklist' Widget. @@ -2498,15 +2527,18 @@ widget-checklist-add-item ((eq escape ?v) (setq child (cond ((not chosen) - (let ((child (widget-create-child widget type))) - (widget-apply child :deactivate) + (let* ((child (widget-create-child widget type)) + (from (widget-get child :from)) + (to (widget-get child :to))) + (widget-specify-unselected child from to) child)) ((widget-inline-p type t) (widget-create-child-value widget type (cdr chosen))) (t (widget-create-child-value - widget type (car (cdr chosen))))))) + widget type (car (cdr chosen))) + (widget-specify-selected child))))) (t (error "Unknown escape `%c'" escape))))) ;; Update properties. @@ -2677,8 +2709,11 @@ widget-radio-add-item (widget-create-child-value widget type value) (widget-create-child widget type))) - (unless chosen - (widget-apply child :deactivate))) + (if chosen + (widget-specify-selected child) + (let ((from (widget-get child :from)) + (to (widget-get child :to))) + (widget-specify-unselected child from to)))) (t (error "Unknown escape `%c'" escape))))) ;; Update properties. @@ -2728,14 +2763,17 @@ widget-radio-value-set (dolist (current (widget-get widget :children)) (let* ((button (widget-get current :button)) (match (and (not found) - (widget-apply current :match value)))) + (widget-apply current :match value))) + (from (widget-get current :from)) + (to (widget-get current :to))) (widget-value-set button match) (if match - (progn - (widget-value-set current value) - (widget-apply current :activate)) - (widget-apply current :deactivate)) - (setq found (or found match)))))) + (progn + (widget-value-set current value) + (widget-apply current :activate) + (widget-specify-selected current)) + (widget-specify-unselected current from to)) + (setq found (or found match)))))) (defun widget-radio-validate (widget) ;; Valid if we have made a valid choice. @@ -2755,13 +2793,16 @@ widget-radio-action (let ((buttons (widget-get widget :buttons))) (when (memq child buttons) (dolist (current (widget-get widget :children)) - (let* ((button (widget-get current :button))) + (let* ((button (widget-get current :button)) + (from (widget-get current :from)) + (to (widget-get current :to))) (cond ((eq child button) (widget-value-set button t) - (widget-apply current :activate)) + (widget-apply current :activate) + (widget-specify-selected current)) ((widget-value button) (widget-value-set button nil) - (widget-apply current :deactivate))))))) + (widget-specify-unselected current from to))))))) ;; Pass notification to parent. (widget-apply widget :notify child event)) --=-=-= Content-Type: text/plain And here's the patch for bug#70594: --=-=-= Content-Type: text/x-patch Content-Disposition: attachment Content-Description: widget-move patch diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index dc481d4d0a5..407309c3429 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -1263,42 +1263,40 @@ widget-move ARG may be negative to move backward. When the second optional argument is non-nil, nothing is shown in the echo area." - (let ((wrapped 0) - (number arg) - (old (widget-tabable-at))) - ;; Forward. - (while (> arg 0) - (cond ((eobp) - (goto-char (point-min)) - (setq wrapped (1+ wrapped))) - (widget-use-overlay-change - (goto-char (next-overlay-change (point)))) - (t - (forward-char 1))) - (and (= wrapped 2) - (eq arg number) - (error "No buttons or fields found")) - (let ((new (widget-tabable-at))) - (when new - (unless (eq new old) - (setq arg (1- arg)) - (setq old new))))) - ;; Backward. - (while (< arg 0) - (cond ((bobp) - (goto-char (point-max)) - (setq wrapped (1+ wrapped))) - (widget-use-overlay-change - (goto-char (previous-overlay-change (point)))) - (t - (backward-char 1))) - (and (= wrapped 2) - (eq arg number) - (error "No buttons or fields found")) - (let ((new (widget-tabable-at))) - (when new - (unless (eq new old) - (setq arg (1+ arg)))))) + (let* ((wrapped 0) + (number arg) + (fwd (> arg 0)) ; widget-forward is caller. + (bwd (< arg 0)) ; widget-backward is caller. + (old (widget-tabable-at)) + (tabable (if old 1 0)) + pos) + (catch 'one + (while (> (abs arg) 0) + (cond ((or (and fwd (eobp)) (and bwd (bobp))) + (goto-char (cond (fwd (point-min)) + (bwd (point-max)))) + (setq wrapped (1+ wrapped))) + (widget-use-overlay-change + (goto-char (cond (fwd (next-overlay-change (point))) + (bwd (previous-overlay-change (point)))))) + (t + (cond (fwd (forward-char 1)) + (bwd (backward-char 1))))) + (and (= wrapped 2) + (eq arg number) + (if (= tabable 1) + (progn + (goto-char pos) + (throw 'one (message "Only one tabable widget"))) + (error "No buttons or fields found"))) + (let ((new (widget-tabable-at))) + (when new + (if (eq new old) + (setq pos (point)) + (cl-incf tabable) + (setq arg (cond (fwd (1- arg)) + (bwd (1+ arg)))) + (setq old new)))))) (let ((new (widget-tabable-at))) (while (and (eq (widget-tabable-at) new) (not (bobp))) (backward-char))) --=-=-= Content-Type: text/plain Steve Berman --=-=-=--