* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable @ 2021-05-26 19:57 Alex Bochannek 2021-05-27 23:28 ` Lars Ingebrigtsen 0 siblings, 1 reply; 17+ messages in thread From: Alex Bochannek @ 2021-05-26 19:57 UTC (permalink / raw) To: 48683 [-- Attachment #1: Type: text/plain, Size: 313 bytes --] (Not sure if bug-gnu-emacs is the right place to send things like this, please let me know if there is a better list.) I have been missing a article process mark toggle for a while and would like to propose the below patch. If "+" is not an appropriate key to use for this, I am happy to accept an alternative. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Type: text/x-patch, Size: 3468 bytes --] diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 7d6fa4cb5c..2862faadf0 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -6628,6 +6628,13 @@ Setting Process Marks Remove the process mark, if any, from the current article (@code{gnus-summary-unmark-as-processable}). +@item M P + +@itemx + +@kindex M P + @r{(Summary)} +@kindex + @r{(Summary)} +Toggle the process mark of the current article +(@code{gnus-summary-toggle-mark-as-processable}). + @item M P U @kindex M P U @r{(Summary)} @findex gnus-summary-unmark-all-processable diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index aa4c753287..93ea117ff1 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -1948,6 +1948,7 @@ gnus-summary-mode-map "e" gnus-summary-edit-article "#" gnus-summary-mark-as-processable "\M-#" gnus-summary-unmark-as-processable + "+" gnus-summary-toggle-mark-as-processable "\M-\C-t" gnus-summary-toggle-threads "\M-\C-s" gnus-summary-show-thread "\M-\C-h" gnus-summary-hide-thread @@ -2046,6 +2047,7 @@ gnus-summary-mode-map "B" gnus-summary-remove-bookmark "#" gnus-summary-mark-as-processable "\M-#" gnus-summary-unmark-as-processable + "+" gnus-summary-toggle-mark-as-processable "S" gnus-summary-limit-include-expunged "C" gnus-summary-catchup "H" gnus-summary-catchup-to-here @@ -2336,6 +2338,7 @@ gnus-summary-mode-map (gnus-define-keys (gnus-uu-mark-map "P" gnus-summary-mark-map) "p" gnus-summary-mark-as-processable "u" gnus-summary-unmark-as-processable + "+" gnus-summary-toggle-mark-as-processable "U" gnus-summary-unmark-all-processable "v" gnus-uu-mark-over "s" gnus-uu-mark-series @@ -2776,6 +2779,7 @@ gnus-summary-make-menu-bar ("Process Mark" ["Set mark" gnus-summary-mark-as-processable t] ["Remove mark" gnus-summary-unmark-as-processable t] + ["Toggle mark" gnus-summary-toggle-mark-as-processable t] ["Remove all marks" gnus-summary-unmark-all-processable t] ["Invert marks" gnus-uu-invert-processable t] ["Mark above" gnus-uu-mark-over t] @@ -10951,10 +10955,15 @@ gnus-summary-mark-as-processable (n (abs n))) (while (and (> n 0) - (if unmark - (gnus-summary-remove-process-mark - (gnus-summary-article-number)) - (gnus-summary-set-process-mark (gnus-summary-article-number))) + (let ((article (gnus-summary-article-number))) + (cond ((eq nil unmark) + (gnus-summary-set-process-mark article)) + ((eq t unmark) + (gnus-summary-remove-process-mark article)) + ((eq 'toggle unmark) + (if (memq article gnus-newsgroup-processable) + (gnus-summary-remove-process-mark article) + (gnus-summary-set-process-mark article))))) (zerop (gnus-summary-next-subject (if backward -1 1) nil t))) (setq n (1- n))) (when (/= 0 n) @@ -10970,6 +10979,13 @@ gnus-summary-unmark-as-processable (interactive "P" gnus-summary-mode) (gnus-summary-mark-as-processable n t)) +(defun gnus-summary-toggle-mark-as-processable (n) + "Toggle the process mark from the next N articles. +If N is negative, toggle mark backward instead. The difference between +N and the actual number of articles with their mark toggled is returned." + (interactive "P" gnus-summary-mode) + (gnus-summary-mark-as-processable n 'toggle)) + (defun gnus-summary-unmark-all-processable () "Remove the process mark from all articles." (interactive nil gnus-summary-mode) [-- Attachment #3: Type: text/plain, Size: 11 bytes --] -- Alex. ^ permalink raw reply related [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-26 19:57 bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable Alex Bochannek @ 2021-05-27 23:28 ` Lars Ingebrigtsen 2021-05-28 0:13 ` Jose A. Ortega Ruiz 2021-05-28 2:04 ` Alex Bochannek 0 siblings, 2 replies; 17+ messages in thread From: Lars Ingebrigtsen @ 2021-05-27 23:28 UTC (permalink / raw) To: Alex Bochannek; +Cc: 48683 Alex Bochannek <alex@bochannek.com> writes: > I have been missing a article process mark toggle for a while and would > like to propose the below patch. If "+" is not an appropriate key to use > for this, I am happy to accept an alternative. Hm. A toggle command for the process mark? I'm not quite sure I see the utility, and it's unusual in a Gnus marking context -- none of the other marking commands toggle (like setting the tick mark). And the `+' key isn't very mnemonic for a command that toggles the `#' mark. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-27 23:28 ` Lars Ingebrigtsen @ 2021-05-28 0:13 ` Jose A. Ortega Ruiz 2021-05-28 2:07 ` Eric Abrahamsen 2021-05-28 2:04 ` Alex Bochannek 1 sibling, 1 reply; 17+ messages in thread From: Jose A. Ortega Ruiz @ 2021-05-28 0:13 UTC (permalink / raw) To: 48683 On Fri, May 28 2021, Lars Ingebrigtsen wrote: > Alex Bochannek <alex@bochannek.com> writes: > >> I have been missing a article process mark toggle for a while and would >> like to propose the below patch. If "+" is not an appropriate key to use >> for this, I am happy to accept an alternative. > > Hm. A toggle command for the process mark? I'm not quite sure I see > the utility, and it's unusual in a Gnus marking context -- none of the > other marking commands toggle (like setting the tick mark). i for one would use it. in my case, it's very common that i've marked an article by mistake (for instance when marking several for deletion). > And the `+' key isn't very mnemonic for a command that toggles the `#' > mark. i always forget it doesn't work, but my expectation is always that # on an already marked article would unmark it... just my 2cs jao ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-28 0:13 ` Jose A. Ortega Ruiz @ 2021-05-28 2:07 ` Eric Abrahamsen 2021-05-28 2:16 ` Lars Ingebrigtsen 0 siblings, 1 reply; 17+ messages in thread From: Eric Abrahamsen @ 2021-05-28 2:07 UTC (permalink / raw) To: 48683 "Jose A. Ortega Ruiz" <jao@gnu.org> writes: > On Fri, May 28 2021, Lars Ingebrigtsen wrote: > >> Alex Bochannek <alex@bochannek.com> writes: >> >>> I have been missing a article process mark toggle for a while and would >>> like to propose the below patch. If "+" is not an appropriate key to use >>> for this, I am happy to accept an alternative. >> >> Hm. A toggle command for the process mark? I'm not quite sure I see >> the utility, and it's unusual in a Gnus marking context -- none of the >> other marking commands toggle (like setting the tick mark). > > i for one would use it. in my case, it's very common that i've marked > an article by mistake (for instance when marking several for deletion). > >> And the `+' key isn't very mnemonic for a command that toggles the `#' >> mark. > > i always forget it doesn't work, but my expectation is always that # on > an already marked article would unmark it... Same here. My hands keep doing this, despite the fact that it never works. Given that "add mark" on an already-marked article is a no-op, it seems like it wouldn't hurt to have it toggle. ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-28 2:07 ` Eric Abrahamsen @ 2021-05-28 2:16 ` Lars Ingebrigtsen 2021-05-28 2:29 ` Eric Abrahamsen 2021-05-28 17:39 ` Jose A. Ortega Ruiz 0 siblings, 2 replies; 17+ messages in thread From: Lars Ingebrigtsen @ 2021-05-28 2:16 UTC (permalink / raw) To: Eric Abrahamsen; +Cc: 48683 Eric Abrahamsen <eric@ericabrahamsen.net> writes: > Same here. My hands keep doing this, despite the fact that it never > works. Given that "add mark" on an already-marked article is a no-op, it > seems like it wouldn't hurt to have it toggle. That'd be highly surprising if you say `C-u 10 #' and you have some already-marked articles, etc. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-28 2:16 ` Lars Ingebrigtsen @ 2021-05-28 2:29 ` Eric Abrahamsen 2021-05-28 17:39 ` Jose A. Ortega Ruiz 1 sibling, 0 replies; 17+ messages in thread From: Eric Abrahamsen @ 2021-05-28 2:29 UTC (permalink / raw) To: 48683 Lars Ingebrigtsen <larsi@gnus.org> writes: > Eric Abrahamsen <eric@ericabrahamsen.net> writes: > >> Same here. My hands keep doing this, despite the fact that it never >> works. Given that "add mark" on an already-marked article is a no-op, it >> seems like it wouldn't hurt to have it toggle. > > That'd be highly surprising if you say `C-u 10 #' and you have some > already-marked articles, etc. Dired already works like this, and it is already highly surprising :) ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-28 2:16 ` Lars Ingebrigtsen 2021-05-28 2:29 ` Eric Abrahamsen @ 2021-05-28 17:39 ` Jose A. Ortega Ruiz 1 sibling, 0 replies; 17+ messages in thread From: Jose A. Ortega Ruiz @ 2021-05-28 17:39 UTC (permalink / raw) To: 48683 On Fri, May 28 2021, Lars Ingebrigtsen wrote: > Eric Abrahamsen <eric@ericabrahamsen.net> writes: > >> Same here. My hands keep doing this, despite the fact that it never >> works. Given that "add mark" on an already-marked article is a no-op, it >> seems like it wouldn't hurt to have it toggle. > > That'd be highly surprising if you say `C-u 10 #' and you have some > already-marked articles, etc. i guess suprise is in the eye of the beholder :) i think that, in my case, it'd do exactly what i expect (for the very little that's worth). ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-27 23:28 ` Lars Ingebrigtsen 2021-05-28 0:13 ` Jose A. Ortega Ruiz @ 2021-05-28 2:04 ` Alex Bochannek 2021-05-29 2:18 ` Lars Ingebrigtsen 1 sibling, 1 reply; 17+ messages in thread From: Alex Bochannek @ 2021-05-28 2:04 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: 48683 Lars Ingebrigtsen <larsi@gnus.org> writes: > Alex Bochannek <alex@bochannek.com> writes: > >> I have been missing a article process mark toggle for a while and would >> like to propose the below patch. If "+" is not an appropriate key to use >> for this, I am happy to accept an alternative. > > Hm. A toggle command for the process mark? I'm not quite sure I see > the utility, and it's unusual in a Gnus marking context -- none of the > other marking commands toggle (like setting the tick mark). The downloadable mark is a toggle and because `@' is right next to `#' (at least on the US keyboard), I frequently mistyped it and noticed that the behavior is different. Let me explain how I use the process mark and why a toggle is useful to me. When processing a large number of messages, I sometimes mark a region (or multiple regions) and then want to remove the process mark from some messages in the region and add it to some other ones outside the region. I can absolutely use `#' and `M-#`, but switching between the two quickly when going through dozens of messages requires a fair amount of dexterity. That's why I would rather mark the largest region with the most messages and then pick out the ones to add/remove with a single key that toggles the process mark. I considered if this also makes sense for group and topic marking, but it's an optimization for processing a large number of items, which is why it is probably primarily useful in summary mode. > And the `+' key isn't very mnemonic for a command that toggles the `#' > mark. I saw the `+' glyph as a piece of a `#', which is why I suggested it. -- Alex. ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-28 2:04 ` Alex Bochannek @ 2021-05-29 2:18 ` Lars Ingebrigtsen 2021-05-29 16:59 ` Eric Abrahamsen 2021-05-31 20:33 ` Alex Bochannek 0 siblings, 2 replies; 17+ messages in thread From: Lars Ingebrigtsen @ 2021-05-29 2:18 UTC (permalink / raw) To: Alex Bochannek; +Cc: 48683 Alex Bochannek <alex@bochannek.com> writes: > I can absolutely use `#' and `M-#`, but switching between > the two quickly when going through dozens of messages requires a fair > amount of dexterity. It seems like many people would prefer to have the `#' command be a toggle. Perhaps we should just add a user option to have `#' toggle or not? (Defaulting to "not toggle" for backwards compatibility.) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-29 2:18 ` Lars Ingebrigtsen @ 2021-05-29 16:59 ` Eric Abrahamsen 2021-05-30 4:32 ` Lars Ingebrigtsen 2021-05-31 20:33 ` Alex Bochannek 1 sibling, 1 reply; 17+ messages in thread From: Eric Abrahamsen @ 2021-05-29 16:59 UTC (permalink / raw) To: 48683 Lars Ingebrigtsen <larsi@gnus.org> writes: > Alex Bochannek <alex@bochannek.com> writes: > >> I can absolutely use `#' and `M-#`, but switching between >> the two quickly when going through dozens of messages requires a fair >> amount of dexterity. > > It seems like many people would prefer to have the `#' command be a > toggle. Perhaps we should just add a user option to have `#' toggle or > not? (Defaulting to "not toggle" for backwards compatibility.) Would it be too confusing to have it behave as a toggle with no prefix, but "always mark multiple articles" when used with a numeric prefix? To complicate things further, I think it would be worth making sure that group marking in *Group* and article marking in *Summary* work the same. This stuff is super prone to muscle memory, that consistency would be nice. 2¢... ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-29 16:59 ` Eric Abrahamsen @ 2021-05-30 4:32 ` Lars Ingebrigtsen 0 siblings, 0 replies; 17+ messages in thread From: Lars Ingebrigtsen @ 2021-05-30 4:32 UTC (permalink / raw) To: Eric Abrahamsen; +Cc: 48683 Eric Abrahamsen <eric@ericabrahamsen.net> writes: > Would it be too confusing to have it behave as a toggle with no prefix, > but "always mark multiple articles" when used with a numeric prefix? Some people in this thread said they wanted mass marking also to work as a toggle. > To complicate things further, I think it would be worth making sure that > group marking in *Group* and article marking in *Summary* work the same. > This stuff is super prone to muscle memory, that consistency would be > nice. Indeed. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-29 2:18 ` Lars Ingebrigtsen 2021-05-29 16:59 ` Eric Abrahamsen @ 2021-05-31 20:33 ` Alex Bochannek 2021-06-01 6:23 ` Lars Ingebrigtsen 1 sibling, 1 reply; 17+ messages in thread From: Alex Bochannek @ 2021-05-31 20:33 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: 48683 [-- Attachment #1: Type: text/plain, Size: 495 bytes --] Lars Ingebrigtsen <larsi@gnus.org> writes: > Alex Bochannek <alex@bochannek.com> writes: > >> I can absolutely use `#' and `M-#`, but switching between >> the two quickly when going through dozens of messages requires a fair >> amount of dexterity. > > It seems like many people would prefer to have the `#' command be a > toggle. Perhaps we should just add a user option to have `#' toggle or > not? (Defaulting to "not toggle" for backwards compatibility.) How about something like this? [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Type: text/x-patch, Size: 2964 bytes --] diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 7d6fa4cb5c..b9c6952d60 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -6618,13 +6618,15 @@ Setting Process Marks @kindex M P p @r{(Summary)} @findex gnus-summary-mark-as-processable Mark the current article with the process mark -(@code{gnus-summary-mark-as-processable}). -@findex gnus-summary-unmark-as-processable +(@code{gnus-summary-mark-as-processable}).@* +If @code{gnus-summary-process-mark-toggle} is non-nil, toggle the +existing process mark for the current article. @item M P u @itemx M-# @kindex M P u @r{(Summary)} @kindex M-# @r{(Summary)} +@findex gnus-summary-unmark-as-processable Remove the process mark, if any, from the current article (@code{gnus-summary-unmark-as-processable}). @@ -10569,6 +10571,8 @@ Pick and Read it selects just the article. If given a numerical prefix, go to that thread or article and pick it. (The line number is normally displayed at the beginning of the summary pick lines.) +If @code{gnus-summary-process-mark-toggle} is non-nil, this key will +unpick an already picked article. @item @key{SPC} @kindex SPC @r{(Pick)} diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index aa4c753287..941cbaa7d1 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -562,6 +562,12 @@ gnus-move-group-prefix-function :group 'gnus-summary-mail :type 'function) +(defcustom gnus-summary-process-mark-toggle nil + "If non-nil the process mark command toggles the article's mark." + :version "28.1" + :group 'gnus-summary + :type 'boolean) + ;; FIXME: Although the custom type is `character' for the following variables, ;; using multibyte characters (Latin-1, UTF-8) doesn't work. -- rs @@ -2774,7 +2780,7 @@ gnus-summary-make-menu-bar ["Hide marked" gnus-summary-limit-exclude-marks t] ["Show expunged" gnus-summary-limit-include-expunged t]) ("Process Mark" - ["Set mark" gnus-summary-mark-as-processable t] + ["Set/Toggle mark" gnus-summary-mark-as-processable t] ["Remove mark" gnus-summary-unmark-as-processable t] ["Remove all marks" gnus-summary-unmark-all-processable t] ["Invert marks" gnus-uu-invert-processable t] @@ -10951,10 +10957,14 @@ gnus-summary-mark-as-processable (n (abs n))) (while (and (> n 0) - (if unmark - (gnus-summary-remove-process-mark - (gnus-summary-article-number)) - (gnus-summary-set-process-mark (gnus-summary-article-number))) + (let ((article (gnus-summary-article-number))) + (if (eq t unmark) + (gnus-summary-remove-process-mark article) + (if (eq t gnus-summary-process-mark-toggle) + (if (memq article gnus-newsgroup-processable) + (gnus-summary-remove-process-mark article) + (gnus-summary-set-process-mark article)) + (gnus-summary-set-process-mark article)))) (zerop (gnus-summary-next-subject (if backward -1 1) nil t))) (setq n (1- n))) (when (/= 0 n) [-- Attachment #3: Type: text/plain, Size: 11 bytes --] -- Alex. ^ permalink raw reply related [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-05-31 20:33 ` Alex Bochannek @ 2021-06-01 6:23 ` Lars Ingebrigtsen 2021-06-01 15:57 ` Alex Bochannek 2021-06-01 20:45 ` Alex Bochannek 0 siblings, 2 replies; 17+ messages in thread From: Lars Ingebrigtsen @ 2021-06-01 6:23 UTC (permalink / raw) To: Alex Bochannek; +Cc: 48683 Alex Bochannek <alex@bochannek.com> writes: >> It seems like many people would prefer to have the `#' command be a >> toggle. Perhaps we should just add a user option to have `#' toggle or >> not? (Defaulting to "not toggle" for backwards compatibility.) > > How about something like this? Looks good. Some small comments: > +(defcustom gnus-summary-process-mark-toggle nil Perhaps this should be gnus-process-mark-toggle and also work in the Group buffer? > + (if (eq t unmark) > + (gnus-summary-remove-process-mark article) > + (if (eq t gnus-summary-process-mark-toggle) We shouldn't check against t in either of these cases -- any non-nil value is valid. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-06-01 6:23 ` Lars Ingebrigtsen @ 2021-06-01 15:57 ` Alex Bochannek 2021-06-01 20:45 ` Alex Bochannek 1 sibling, 0 replies; 17+ messages in thread From: Alex Bochannek @ 2021-06-01 15:57 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: 48683 Lars Ingebrigtsen <larsi@gnus.org> writes: > Alex Bochannek <alex@bochannek.com> writes: > >>> It seems like many people would prefer to have the `#' command be a >>> toggle. Perhaps we should just add a user option to have `#' toggle or >>> not? (Defaulting to "not toggle" for backwards compatibility.) >> >> How about something like this? > > Looks good. Some small comments: > >> +(defcustom gnus-summary-process-mark-toggle nil > > Perhaps this should be gnus-process-mark-toggle and also work in the > Group buffer? That makes sense and I can look at that. I have not dug into the differences between group and topic mode, but I hope they are similar enough. >> + (if (eq t unmark) >> + (gnus-summary-remove-process-mark article) >> + (if (eq t gnus-summary-process-mark-toggle) > > We shouldn't check against t in either of these cases -- any non-nil > value is valid. Good point, thank you! -- Alex. ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-06-01 6:23 ` Lars Ingebrigtsen 2021-06-01 15:57 ` Alex Bochannek @ 2021-06-01 20:45 ` Alex Bochannek 2021-06-02 5:42 ` Lars Ingebrigtsen 1 sibling, 1 reply; 17+ messages in thread From: Alex Bochannek @ 2021-06-01 20:45 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: 48683 [-- Attachment #1: Type: text/plain, Size: 721 bytes --] Lars Ingebrigtsen <larsi@gnus.org> writes: > Alex Bochannek <alex@bochannek.com> writes: > >>> It seems like many people would prefer to have the `#' command be a >>> toggle. Perhaps we should just add a user option to have `#' toggle or >>> not? (Defaulting to "not toggle" for backwards compatibility.) >> >> How about something like this? > > Looks good. Some small comments: > >> +(defcustom gnus-summary-process-mark-toggle nil > > Perhaps this should be gnus-process-mark-toggle and also work in the > Group buffer? See below. I tried to make sure that only `#' changes behavior and not `M-#' (this is why there is a `no-toggle' variable for some of the functions.) Have a look and let me know what you think. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Type: text/x-patch, Size: 9851 bytes --] diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 7d6fa4cb5c..ebb1df5552 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -2583,7 +2583,9 @@ Marking Groups @itemx M m @kindex M m @r{(Group)} @findex gnus-group-mark-group -Set the mark on the current group (@code{gnus-group-mark-group}). +Set the mark on the current group (@code{gnus-group-mark-group}).@* +If @code{gnus-process-mark-toggle} is non-nil, toggle the +existing process mark for the current group. @item M-# @kindex M-# @r{(Group)} @@ -4043,7 +4045,9 @@ Topic Commands @findex gnus-topic-mark-topic Mark all groups in the current topic with the process mark (@code{gnus-topic-mark-topic}). This command works recursively on -sub-topics unless given a prefix. +sub-topics unless given a prefix.@* +If @code{gnus-process-mark-toggle} is non-nil, toggle the +existing process mark for the current topic. @item T M-# @kindex T M-# @r{(Topic)} @@ -6618,13 +6622,15 @@ Setting Process Marks @kindex M P p @r{(Summary)} @findex gnus-summary-mark-as-processable Mark the current article with the process mark -(@code{gnus-summary-mark-as-processable}). -@findex gnus-summary-unmark-as-processable +(@code{gnus-summary-mark-as-processable}).@* +If @code{gnus-process-mark-toggle} is non-nil, toggle the +existing process mark for the current article. @item M P u @itemx M-# @kindex M P u @r{(Summary)} @kindex M-# @r{(Summary)} +@findex gnus-summary-unmark-as-processable Remove the process mark, if any, from the current article (@code{gnus-summary-unmark-as-processable}). @@ -10569,6 +10575,8 @@ Pick and Read it selects just the article. If given a numerical prefix, go to that thread or article and pick it. (The line number is normally displayed at the beginning of the summary pick lines.) +If @code{gnus-process-mark-toggle} is non-nil, this key will unpick an +already picked article. @item @key{SPC} @kindex SPC @r{(Pick)} diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 8c62c9424d..06d1313d37 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -894,14 +894,14 @@ gnus-group-make-menu-bar ["Sort by real name" gnus-group-sort-selected-groups-by-real-name (not (gnus-topic-mode-p))]) ("Mark" - ["Mark group" gnus-group-mark-group + ["Set/Toggle mark" gnus-group-mark-group (and (gnus-group-group-name) (not (memq (gnus-group-group-name) gnus-group-marked)))] - ["Unmark group" gnus-group-unmark-group + ["Remove mark" gnus-group-unmark-group (and (gnus-group-group-name) (memq (gnus-group-group-name) gnus-group-marked))] - ["Unmark all" gnus-group-unmark-all-groups gnus-group-marked] - ["Mark regexp..." gnus-group-mark-regexp t] + ["Remove all marks" gnus-group-unmark-all-groups gnus-group-marked] + ["Mark by regexp..." gnus-group-mark-regexp t] ["Mark region" gnus-group-mark-region :active mark-active] ["Mark buffer" gnus-group-mark-buffer t] ["Execute command" gnus-group-universal-argument @@ -1865,7 +1865,7 @@ gnus-group-mark-line-p (forward-char (or (cdr (assq 'process gnus-group-mark-positions)) 2)) (eq (char-after) gnus-process-mark))) -(defun gnus-group-mark-group (n &optional unmark no-advance) +(defun gnus-group-mark-group (n &optional unmark no-advance no-toggle) "Mark the current group." (interactive "p" gnus-group-mode) (let ((buffer-read-only nil) @@ -1877,23 +1877,33 @@ gnus-group-mark-group (beginning-of-line) (forward-char (or (cdr (assq 'process gnus-group-mark-positions)) 2)) (delete-char 1) - (if unmark - (progn - (setq gnus-group-marked (delete group gnus-group-marked)) - (insert-char ?\s 1 t)) - (setq gnus-group-marked - (cons group (delete group gnus-group-marked))) - (insert-char gnus-process-mark 1 t))) + (if (and gnus-process-mark-toggle (not no-toggle)) + (if (memq group gnus-group-marked) + (gnus-group-mark-update group t) + (gnus-group-mark-update group)) + (gnus-group-mark-update group unmark))) (unless no-advance (gnus-group-next-group 1)) (cl-decf n)) (gnus-group-position-point) n)) +(defun gnus-group-mark-update (n &optional unmark) + "Set the process mark on current group and update the group line." + (if unmark + (progn + (setq gnus-group-marked + (delete n gnus-group-marked)) + (insert-char ?\s 1 t)) + (progn + (setq gnus-group-marked + (cons n (delete n gnus-group-marked))) + (insert-char gnus-process-mark 1 t)))) + (defun gnus-group-unmark-group (n) "Remove the mark from the current group." (interactive "p" gnus-group-mode) - (gnus-group-mark-group n 'unmark) + (gnus-group-mark-group n 'unmark nil t) (gnus-group-position-point)) (defun gnus-group-unmark-all-groups () @@ -1910,7 +1920,7 @@ gnus-group-mark-region (let ((num (count-lines beg end))) (save-excursion (goto-char beg) - (- num (gnus-group-mark-group num unmark))))) + (- num (gnus-group-mark-group num unmark nil t))))) (defun gnus-group-mark-buffer (&optional unmark) "Mark all groups in the buffer. @@ -1935,7 +1945,7 @@ gnus-group-remove-mark Return nil if the group isn't displayed." (if (gnus-group-goto-group group nil test-marked) (save-excursion - (gnus-group-mark-group 1 'unmark t) + (gnus-group-mark-group 1 'unmark t t) t) (setq gnus-group-marked (delete group gnus-group-marked)) @@ -1945,7 +1955,7 @@ gnus-group-set-mark "Set the process mark on GROUP." (if (gnus-group-goto-group group) (save-excursion - (gnus-group-mark-group 1 nil t)) + (gnus-group-mark-group 1 nil t t)) (setq gnus-group-marked (cons group (delete group gnus-group-marked))))) (defun gnus-group-universal-argument (arg &optional _groups func) diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index aa4c753287..48794ceb3f 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -2774,7 +2774,7 @@ gnus-summary-make-menu-bar ["Hide marked" gnus-summary-limit-exclude-marks t] ["Show expunged" gnus-summary-limit-include-expunged t]) ("Process Mark" - ["Set mark" gnus-summary-mark-as-processable t] + ["Set/Toggle mark" gnus-summary-mark-as-processable t] ["Remove mark" gnus-summary-unmark-as-processable t] ["Remove all marks" gnus-summary-unmark-all-processable t] ["Invert marks" gnus-uu-invert-processable t] @@ -10951,10 +10951,14 @@ gnus-summary-mark-as-processable (n (abs n))) (while (and (> n 0) - (if unmark - (gnus-summary-remove-process-mark - (gnus-summary-article-number)) - (gnus-summary-set-process-mark (gnus-summary-article-number))) + (let ((article (gnus-summary-article-number))) + (if unmark + (gnus-summary-remove-process-mark article) + (if gnus-process-mark-toggle + (if (memq article gnus-newsgroup-processable) + (gnus-summary-remove-process-mark article) + (gnus-summary-set-process-mark article)) + (gnus-summary-set-process-mark article)))) (zerop (gnus-summary-next-subject (if backward -1 1) nil t))) (setq n (1- n))) (when (/= 0 n) diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el index b3d17bc03f..c0484622f4 100644 --- a/lisp/gnus/gnus-topic.el +++ b/lisp/gnus/gnus-topic.el @@ -1112,7 +1112,7 @@ gnus-topic-make-menu-bar ["Delete" gnus-topic-delete t] ["Rename..." gnus-topic-rename t] ["Create..." gnus-topic-create-topic t] - ["Mark" gnus-topic-mark-topic t] + ["Set/Toggle mark" gnus-topic-mark-topic t] ["Indent" gnus-topic-indent t] ["Sort" gnus-topic-sort-topics t] ["Previous topic" gnus-topic-goto-previous-topic t] @@ -1436,7 +1436,7 @@ gnus-topic-show-topic (setcar (cdr (cadr topic)) 'visible) (gnus-group-list-groups))))) -(defun gnus-topic-mark-topic (topic &optional unmark non-recursive) +(defun gnus-topic-mark-topic (topic &optional unmark non-recursive no-toggle) "Mark all groups in the TOPIC with the process mark. If NON-RECURSIVE (which is the prefix) is t, don't mark its subtopics." (interactive @@ -1450,8 +1450,13 @@ gnus-topic-mark-topic (let ((groups (gnus-topic-find-groups topic gnus-level-killed t nil (not non-recursive)))) (while groups - (funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark) - (gnus-info-group (nth 1 (pop groups))))))))) + (let ((group (gnus-info-group (nth 1 (pop groups))))) + (if (and gnus-process-mark-toggle (not no-toggle)) + (if (memq group gnus-group-marked) + (gnus-group-remove-mark group ) + (gnus-group-set-mark group)) + (if unmark (gnus-group-remove-mark group) + (gnus-group-set-mark group))))))))) (defun gnus-topic-unmark-topic (topic &optional _dummy non-recursive) "Remove the process mark from all groups in the TOPIC. @@ -1462,7 +1467,7 @@ gnus-topic-unmark-topic gnus-topic-mode) (if (not topic) (call-interactively 'gnus-group-unmark-group) - (gnus-topic-mark-topic topic t non-recursive))) + (gnus-topic-mark-topic topic t non-recursive t))) (defun gnus-topic-get-new-news-this-topic (&optional n) "Check for new news in the current topic." diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 7de1cd1ddb..21b5f31c14 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -1183,6 +1183,14 @@ gnus-process-mark :group 'gnus-summary-marks :type 'character) +(defcustom gnus-process-mark-toggle nil + "If non-nil the process mark command toggles the process mark." + :version "28.1" + :group 'gnus-summary + :group 'gnus-group-various + :group 'gnus-group-topic + :type 'boolean) + (defcustom gnus-large-newsgroup 200 "The number of articles which indicates a large newsgroup. If the number of articles in a newsgroup is greater than this value, [-- Attachment #3: Type: text/plain, Size: 11 bytes --] -- Alex. ^ permalink raw reply related [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-06-01 20:45 ` Alex Bochannek @ 2021-06-02 5:42 ` Lars Ingebrigtsen 2021-06-02 6:35 ` Alex Bochannek 0 siblings, 1 reply; 17+ messages in thread From: Lars Ingebrigtsen @ 2021-06-02 5:42 UTC (permalink / raw) To: Alex Bochannek; +Cc: 48683 Alex Bochannek <alex@bochannek.com> writes: > See below. I tried to make sure that only `#' changes behavior and not > `M-#' (this is why there is a `no-toggle' variable for some of the > functions.) Have a look and let me know what you think. Thanks! Pushed to Emacs 28 now with some tiny changes to the .texi files. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable 2021-06-02 5:42 ` Lars Ingebrigtsen @ 2021-06-02 6:35 ` Alex Bochannek 0 siblings, 0 replies; 17+ messages in thread From: Alex Bochannek @ 2021-06-02 6:35 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: 48683 Lars Ingebrigtsen <larsi@gnus.org> writes: > Alex Bochannek <alex@bochannek.com> writes: > >> See below. I tried to make sure that only `#' changes behavior and not >> `M-#' (this is why there is a `no-toggle' variable for some of the >> functions.) Have a look and let me know what you think. > > Thanks! Pushed to Emacs 28 now with some tiny changes to the .texi files. Great, thank you! -- Alex. ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2021-06-02 6:35 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-05-26 19:57 bug#48683: 28.0.50; [PATCH] Feature suggestion gnus-summary-toggle-mark-as-processable Alex Bochannek 2021-05-27 23:28 ` Lars Ingebrigtsen 2021-05-28 0:13 ` Jose A. Ortega Ruiz 2021-05-28 2:07 ` Eric Abrahamsen 2021-05-28 2:16 ` Lars Ingebrigtsen 2021-05-28 2:29 ` Eric Abrahamsen 2021-05-28 17:39 ` Jose A. Ortega Ruiz 2021-05-28 2:04 ` Alex Bochannek 2021-05-29 2:18 ` Lars Ingebrigtsen 2021-05-29 16:59 ` Eric Abrahamsen 2021-05-30 4:32 ` Lars Ingebrigtsen 2021-05-31 20:33 ` Alex Bochannek 2021-06-01 6:23 ` Lars Ingebrigtsen 2021-06-01 15:57 ` Alex Bochannek 2021-06-01 20:45 ` Alex Bochannek 2021-06-02 5:42 ` Lars Ingebrigtsen 2021-06-02 6:35 ` Alex Bochannek
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).