* `isearch-allow-scroll' - a misnomer and a bad design @ 2011-09-09 20:38 Drew Adams 2011-09-09 21:52 ` Alan Mackenzie 0 siblings, 1 reply; 59+ messages in thread From: Drew Adams @ 2011-09-09 20:38 UTC (permalink / raw) To: emacs-devel 1. The doc for this option, as well as its name, give the impression that it is about allowing scrolling. It is not. 1. For one thing, a non-nil value allows *any* command bound to a key in `isearch-mode-map' to take advantage of a prefix arg. That is, `C-u' is passed through to the command if the option value is non-nil. The command need not have anything to do with scrolling. And there are already at least two such vanilla commands: `isearch-query-replace' and `isearch-query-replace-regexp' (`M-%', `C-M-%'). A `C-u' changes the command behavior in a way that has nothing to do with scrolling. At a minimum, the doc should be adjusted. The option name should also be changed to fit what it really does. Likewise, the functions (e.g. `isearch-lookup-scroll-key') and other code and doc strings in isearch.el that paint this feature as having to do with scrolling. 1b. For another thing (i.e., forgetting about `C-u'), *any* command can benefit from the same Isearch feature as a scrolling command. It suffices to put a non-nil `isearch-scroll' property on the command symbol. 2. I would like to see us separate the treatment of a prefix arg - whether it gets passed it through to a command or it exits Isearch - from the other uses/effects of this option. IOW, I would like to be able to set some option to have Isearch pass `C-u' through, and have that be independent of the setting of some other option that controls whether scrolling (or some other behavior) is allowed. Even if allowing scrolling (or whatever) might also require the ability to pass through `C-u', that does not mean that being able to pass through `C-u' should allow scrolling. It makes little sense to couple these two features. The query-replace commands are a good example, and users (such as yours truly) might well want similar `C-u' pass-through for other commands, without also wanting scrolling (or whatever). 3. Wrt controlling which commands are affected by the option (i.e., forgetting about `C-u' now): The current design makes the library designer responsible for this choice, not the user. That is another flaw, IMO. A user should be able to easily (using Customize, not just putting `put' here and there) choose which commands are affected. Instead of a Boolean option (`isearch-allow-scroll'), users should have an option that specifies the affected commands. (It could also configure any specifics for each command, if there are such.) 4. Why are there currently _two_ different properties that turn on this sensitivity (i.e., "scrolling")? From the code comments: ;; ... property called `isearch-scroll'. ;; If a command's symbol has the value t for this property or for the ;; `scroll-command' property, it is a scrolling command. This means that if someone adds property `scroll-command' for some command then it automatically acts as if s?he also added property `isearch-scroll'. Why couple these two things? Why assume that every `scroll-command' command is also one for which Isearch should allow scrolling. All of this smacks of being a carryover from someone's (hi Alan) personal customizations, rather than being thought out in terms of users in general. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-09 20:38 `isearch-allow-scroll' - a misnomer and a bad design Drew Adams @ 2011-09-09 21:52 ` Alan Mackenzie 2011-09-09 23:07 ` Drew Adams 0 siblings, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-09 21:52 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel Hi, Drew, I kind of feel myself being addressed here. :-) On Fri, Sep 09, 2011 at 01:38:16PM -0700, Drew Adams wrote: > 1. The doc for this option, as well as its name, give the impression that it is > about allowing scrolling. It is not. It is largely about scrolling. Try enabling the option and use <PgUp>, <PgDn> during an isearch. Or try C-l. The need to scroll during a search was what inspired the feature. > 1. For one thing, a non-nil value allows *any* command bound to a key in > `isearch-mode-map' to take advantage of a prefix arg. That is, `C-u' is passed > through to the command if the option value is non-nil. The command need not > have anything to do with scrolling. I'm not sure that's quite true. Or if it is, keys like C-s don't react to it. > And there are already at least two such vanilla commands: > `isearch-query-replace' and `isearch-query-replace-regexp' (`M-%', `C-M-%'). A > `C-u' changes the command behavior in a way that has nothing to do with > scrolling. It's good that the C-u works, though. ;-) > At a minimum, the doc should be adjusted. The option name should also be > changed to fit what it really does. What would you suggest? What does the option really do, in your judgement? Scrolling is an essential part of the option. > Likewise, the functions (e.g. `isearch-lookup-scroll-key') and other > code and doc strings in isearch.el that paint this feature as having to > do with scrolling. They're stricly internal functions, so changing their names/doc strings wouldn't be a big deal. > 1b. For another thing (i.e., forgetting about `C-u'), *any* command can benefit > from the same Isearch feature as a scrolling command. It suffices to put a > non-nil `isearch-scroll' property on the command symbol. This isn't true. Only commands which don't foul up the isearch can be permitted to use the feature. Only a few commands meet the criteria. `universal-argument' is such a command. > 2. I would like to see us separate the treatment of a prefix arg - whether it > gets passed it through to a command or it exits Isearch - from the other > uses/effects of this option. I agree, that would be a good idea. It wouldn't take very much work. > IOW, I would like to be able to set some option to have Isearch pass `C-u' > through, and have that be independent of the setting of some other option that > controls whether scrolling (or some other behavior) is allowed. Even if > allowing scrolling (or whatever) might also require the ability to pass through > `C-u', that does not mean that being able to pass through `C-u' should allow > scrolling. It makes little sense to couple these two features. Need it be an option? Why not just let C-u through no matter what? > The query-replace commands are a good example, and users (such as yours truly) > might well want similar `C-u' pass-through for other commands, without also > wanting scrolling (or whatever). As a matter of interest, have you tried setting isearch-allow-scroll? If you have and didn't like it, what about it didn't you like? > 3. Wrt controlling which commands are affected by the option (i.e., forgetting > about `C-u' now): The current design makes the library designer responsible for > this choice, not the user. That is another flaw, IMO. A user should be able to > easily (using Customize, not just putting `put' here and there) choose which > commands are affected. I disagree totally here. The sophisticated user can set a suitable command to be a "scrolling" command. The unsophisticated user is going to get his Emacs into a thorough mess by messing around in this area. > Instead of a Boolean option (`isearch-allow-scroll'), users should have > an option that specifies the affected commands. (It could also > configure any specifics for each command, if there are such.) Again, familiarise yourself with just how restricted the permissible commands are. There's a list of criteria in isearch.el ~L1760 (think - number of yards in a mile :-). > 4. Why are there currently _two_ different properties that turn on this > sensitivity (i.e., "scrolling")? From the code comments: > ;; ... property called `isearch-scroll'. > ;; If a command's symbol has the value t for this property or for the > ;; `scroll-command' property, it is a scrolling command. I haven't a clue. I've no idea who put `scroll-command' in or why. > This means that if someone adds property `scroll-command' for some command then > it automatically acts as if s?he also added property `isearch-scroll'. Why > couple these two things? Why assume that every `scroll-command' command is also > one for which Isearch should allow scrolling. > All of this smacks of being a carryover from someone's (hi Alan) personal > customizations, rather than being thought out in terms of users in general. Pretty much all standard commands that can be "scrolling" commands already are. Let me know if there are any I have missed. Users capable of writing their own "scrolling" commands will be quite capable of putting the `isearch-scroll' property on them. (I have done this.) -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-09 21:52 ` Alan Mackenzie @ 2011-09-09 23:07 ` Drew Adams 2011-09-10 0:58 ` Stefan Monnier ` (3 more replies) 0 siblings, 4 replies; 59+ messages in thread From: Drew Adams @ 2011-09-09 23:07 UTC (permalink / raw) To: 'Alan Mackenzie'; +Cc: emacs-devel > Hi, Drew, Hi Alan, > I kind of feel myself being addressed here. :-) Consider it a compliment that I now see some use for this general feature - beyond scrolling (which I personally won't use it for). ;-) > > 1. The doc for this option, as well as its name, give the > > impression that it is > > about allowing scrolling. It is not. > > It is largely about scrolling. I meant that it is not _necessarily_ about scrolling. I understand that that was the original motivation, and it remains an important use case (for people who want scrolling). > > 1. For one thing, a non-nil value allows *any* command > > bound to a key in `isearch-mode-map' to take advantage > > of a prefix arg. That is, `C-u' is passed > > through to the command if the option value is non-nil. > > The command need not have anything to do with scrolling. > > I'm not sure that's quite true. Or if it is, keys like C-s > don't react to it. AFAICT, it is 100% true. For one thing, that's how `isearch-query-replace(-regexp)' works. Those commands do _not_ have property `isearch-scroll' or `scroll-command' on their symbols. They simply use the feature that `C-u' gets passed through if `isearch-allow-scroll' is non-nil. > > And there are already at least two such vanilla commands: > > `isearch-query-replace' and `isearch-query-replace-regexp' > > (`M-%', `C-M-%'). A `C-u' changes the command behavior in > > a way that has nothing to do with scrolling. > > It's good that the C-u works, though. ;-) That's my point. Like those commands, I want to make use of this `C-u' feature. But I do not want to also allow scrolling during Isearch. For example, I have an Icicles command (bound to `S-TAB') that runs from Isearch, and if you use `C-u S-TAB' then its behavior is different. But that means that to take advantage of this users need to turn on `isearch-allow-scroll'. That would be OK if that only had the effect of allowing `C-u' pass-through. But it also allows scrolling, and it's not obvious that users who want to use `C-u S-TAB' also want Isearch to allow scrolling. > > At a minimum, the doc should be adjusted. The option name > > should also be changed to fit what it really does. > > What would you suggest? What does the option really do, in your > judgement? Scrolling is an essential part of the option. AFAICT, it does two things: 1. It invokes any command that has property `isearch-scroll' or `scroll-command' on its symbol - without necessarily exiting Isearch. The function used to look up such commands is `isearch-lookup-scroll-key', but there is nothing in that function's definition that deals with scrolling or scroll commands (apart from the names of the properties checked). 2. It passes a prefix arg through to any key (its command) that follows it. Neither of these has anything to do with scrolling, necessarily. Change the names to remove `scroll' and you will see that. Now, yes, it happens that the scrolling commands use property `scroll-command'. That was one of my points: separate the property used to distinguish susceptible commands for Isearch from a property that is associated with scrolling. For scrolling commands, if you want pass-through from Isearch then you just give them property `isearch-scroll' (a bad name), in addition to property `scroll-command'. (And the code that gives the scrolling commands their Isearch behavior should not even be in isearch.el, IMO.) > > Likewise, the functions (e.g. `isearch-lookup-scroll-key') > > and other code and doc strings in isearch.el that paint this > > feature as having to do with scrolling. > > They're stricly internal functions, so changing their > names/doc strings wouldn't be a big deal. Right, but my real point is not about the names but about freeing up the two pass-through behaviors (one for specific commands, the other for `C-u') from their coupling to scrolling. Once freed, nothing would prevent you from re-associating them: telling Isearch that you want scrolling commands to benefit from the pass-through feature. > > 1b. For another thing (i.e., forgetting about `C-u'), *any* > > command can benefit from the same Isearch feature as a > > scrolling command. It suffices to put a non-nil > > `isearch-scroll' property on the command symbol. > > This isn't true. It is true, AFAICT. Nothing prevents you from putting property `isearch-scroll' on *any* command, to get Isearch to pass through to it. Now that does not mean that every command is a reasonable candidate for using this feature. It just means that the feature is not in any way scrolling-specific. > Only commands which don't foul up the isearch can be > permitted to use the feature. Only a few commands meet the criteria. > `universal-argument' is such a command. Even if you are right about that, nothing says that that particular set of commands is limited to scrolling commands. And even if that were also the case, nothing in fact prevents using an inappropriate command this way. The code looks for only one thing: property `isearch-scroll'. > > 2. I would like to see us separate the treatment of a > > prefix arg - whether it gets passed it through to a > > command or it exits Isearch - from the other > > uses/effects of this option. > > I agree, that would be a good idea. It wouldn't take very much work. Very glad to hear that. > Need it be an option? Why not just let C-u through no matter what? Dunno. That would probably be OK for me, but I can imagine RMS or others chiming in that they are used to having `C-u' immediately exit Isearch. Having an option means not disturbing the general, traditional behavior. But as far as I'm concerned, I think I would be in favor of always letting prefix-arg keys pass through without exiting Isearch. (It would be up to the command they are passed through to to decide whether to exit. In the case of the Icicles feature that uses this, the command does in fact exit Isearch, after picking up some Isearch info. But the important thing is to be able to pass a prefix arg to the command, which is bound to a key on `isearch-mode-map'.) > As a matter of interest, have you tried setting > isearch-allow-scroll? If > you have and didn't like it, what about it didn't you like? I have tried it. I don't recall just what I didn't like. I wouldn't say that I'm against it or I don't like it. (For one thing, I'm not used to it.) But I do recall trying it out a fair amount a few years back. You know, everyone is different. The fact that someone might not like to use it doesn't mean much. > > 3. Wrt controlling which commands are affected by the > > option (i.e., forgetting about `C-u' now): The current > > design makes the library designer responsible for > > this choice, not the user. That is another flaw, IMO. > > A user should be able to easily (using Customize, not just > > putting `put' here and there) choose which commands are affected. > > I disagree totally here. The sophisticated user can set a suitable > command to be a "scrolling" command. The unsophisticated > user is going to get his Emacs into a thorough mess by messing > around in this area. I suspect you are still thinking of this in terms of scroll commands. I am not. Granted that users might not want to mess around with the scrolling commands (whether via `put' or Customize), perhaps you will recognize that a user might want to not have Isearch pass through to some command that library `foo' thinks it is a great idea to pass through to by default. Currently, it is all or nothing: all scroll commands plus any others that might have property `isearch-scroll' or else none of them. Especially if we open this up to intentionally be about pass-through in general and not just scrolling, users should have a way to easily pick and choose which commands are affected by it. (I say "intentionally" because it is already open but without any advertising and partially hidden behind the names "scroll" this-and-that. > > Instead of a Boolean option (`isearch-allow-scroll'), users > > should have an option that specifies the affected commands. > > (It could also configure any specifics for each command, if > > there are such.) > > Again, familiarise yourself with just how restricted the permissible > commands are. There's a list of criteria in isearch.el > ~L1760 (think - number of yards in a mile :-). I read that comment, and I read the code. Again, I think you are thinking only in terms of scrolling commands. The feature is in fact only about pass-through to a command, letting it run without necessarily exiting Isearch. It is just like the `C-u' pass-through, but without the `C-u'. The code is not "scroll"-specific at all, AFAICT. That said, I don't want to belabor this part. My main interest is in freeing up `C-u', which you have already agreed to. My point about the non-C-u pass-through was mainly to say that it is already there, and it has nothing, a priori, to do with scrolling. That its predefined use might currently be limited to scrolling does not mean that the code actually recognizes scrolling. Likewise, if it turns out that no one will ever want to use it for any command other than scrolling. The code itself is agnostic - scrolling-blind (AFAICT). > > 4. Why are there currently _two_ different properties that > > turn on this sensitivity (i.e., "scrolling")? From the > > code comments: > > > ;; ... property called `isearch-scroll'. > > ;; If a command's symbol has the value t for this property > > ;; or for the `scroll-command' property, it is a scrolling > > ;; command. > > I haven't a clue. I've no idea who put `scroll-command' in or why. I presume that it is for scrolling commands, outside of any Isearch context. > > This means that if someone adds property `scroll-command' > > for some command then it automatically acts as if s?he > > also added property `isearch-scroll'. Why couple these > > two things? Why assume that every `scroll-command' command > > is also one for which Isearch should allow scrolling. > > Pretty much all standard commands that can be "scrolling" commands > already are. Let me know if there are any I have missed. I know. My question was why. But I don't really care. My point was that these are two different things that need not be automatically coupled. They can instead be explicitly coupled if that's a good idea. IOW, instead of having Isearch automatically recognize property `scroll-command', just use property `isearch-scroll' for all pertinent commands (even if they already have property `scroll-command'). Again, though. I don't want to insist on using pass-through for non-scrolling commands. I don't really care about that. I would like to see `C-u' passed through - that's the main point. Either systematically or optionally, but if optionally then separately from allowing scrolling. Passing `C-u' through to a command (e.g. `isearch-query-replace') really has nothing to do, logically, with allowing scrolling. Users who would like to allow `C-u' pass-through should not also have to allow scrolling. That's my main point, and I think you agree with that much. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-09 23:07 ` Drew Adams @ 2011-09-10 0:58 ` Stefan Monnier 2011-09-10 7:48 ` Drew Adams ` (2 more replies) 2011-09-10 2:03 ` Stephen J. Turnbull ` (2 subsequent siblings) 3 siblings, 3 replies; 59+ messages in thread From: Stefan Monnier @ 2011-09-10 0:58 UTC (permalink / raw) To: Drew Adams; +Cc: 'Alan Mackenzie', emacs-devel > I meant that it is not _necessarily_ about scrolling. I understand that that > was the original motivation, and it remains an important use case (for people > who want scrolling). Actually, it's more than that: its intention is about scrolling. You can abuse it, but some people like pass-through for some set of commands but not for others, so isearch-allow-scroll is meant to control that for scrolling commands. We all agree that the fact that C-u got folded into it is definitely a misfeature in this respect. Maybe what you want is a new option `isearch-pass-through-categories', which would be a list of symbol properties, so any command who has a non-nil value for one of those properties is allowed to run without exiting isearch. Then `scroll-command' becomes one possible element of isearch-pass-through-categories. > It is true, AFAICT. Nothing prevents you from putting property > `isearch-scroll' on *any* command, to get Isearch to pass through > to it. But you still only have one boolean value to control what commands to pass through. So what would you name this boolean option? `isearch-a-few-more-commands-run-within-isearch'? What if people want pass-through for scrolling commands but not for your new command? Stefan ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 0:58 ` Stefan Monnier @ 2011-09-10 7:48 ` Drew Adams 2011-09-10 11:28 ` Alan Mackenzie 2011-09-10 11:47 ` Juri Linkov 2 siblings, 0 replies; 59+ messages in thread From: Drew Adams @ 2011-09-10 7:48 UTC (permalink / raw) To: 'Stefan Monnier'; +Cc: 'Alan Mackenzie', emacs-devel > some people like pass-through for some set of commands > but not for others Exactly the point I made. > so isearch-allow-scroll is meant > to control that for scrolling commands. Doesn't follow ("so"). "Some set of commands" vs "others" is more general than "scrolling commands" vs "others". Well, you can certainly say that it was "meant" to control this only for scrolling commands, but that's not what it does. It controls it for any command. Turn on the option, `put' the property on the command symbol - and Bob's your uncle. Again, I don't really care much whether the existing, general code is recognized as being in fact general and not scrolling-specific. I don't really care much whether the names, doc strings, and comments get changed to reflect this reality. That "misnomer" part of the `Subject:' was really mentioned in passing, in case you do want to do something about it - an FYI. My real wish is that `C-u' be separated out. The rest I don't really care much about. I do not have any particular commands, scrolling or otherwise, in my back pocket that I want Isearch to allow without necessarily exiting. But I can certainly see that, as you say, "some people [might] like pass-through for some set of commands but not for others". And today (a) this some-vs-others is couched as scrolling-vs-others. And more importantly, (b) the only way for users ("some people") to specify which commands they want in each camp is to put or remove a symbol property (the only two properties for this act the same wrt Isearch). > We all agree that the fact that C-u got folded into it is definitely > a misfeature in this respect. Good to hear. That's really the misfeature I'd like to see fixed. Consider the rest an FYI, if you like. > Maybe what you want is a new option `isearch-pass-through-categories', > which would be a list of symbol properties, so any command who has > a non-nil value for one of those properties is allowed to run without > exiting isearch. > > Then `scroll-command' becomes one possible element of > isearch-pass-through-categories. OK by me. Doesn't really change too much, though. We already have such a list (`scroll-command', `isearch-scroll'); it just isn't customizable/extensible. But yes, that is along the lines of what I suggested (in my point #3). My suggestion was to not use only symbol properties for this - to have a user option that specifies the allowed commands. Grouping into categories would be fine too. But in that case, why not let users do their own grouping (and not just by using symbol properties). If you do open up to different symbol properties, then that would allow a bit more flexibility, I suppose. But a user who wants one category (e.g. foobar commands) but not another (e.g. scrolling commands) still needs to go around removing the unwanted property from one set of commands (e.g. scrolling) and adding the wanted property for another set of commands. Anyway, again, I don't really care much one way or the other about this part. My real concern is to allow `C-u' pass-through to be separate from command pass-through. And preferably to allow users (separate) control over `C-u' pass-through (for any users who might prefer the current behavior of `C-u' exiting Isearch). I personally don't need such control, but I think it would be good for Emacs to give users that choice. _If_ no changes are made wrt command pass-through (not `C-u' pass-through), then a secondary concern/FYI is to make the doc and names reflect the current reality, which is that the feature _in fact_, even if not by intention, is _not_ limited to scrolling. > > It is true, AFAICT. Nothing prevents you from putting property > > `isearch-scroll' on *any* command, to get Isearch to pass through > > to it. > > But you still only have one boolean value to control what commands to > pass through. So what would you name this boolean option? > `isearch-a-few-more-commands-run-within-isearch'? > What if people want pass-through for scrolling commands but > not for your new command? That was precisely my point (point #3, again). Users should be able to control (fine-tune) which commands are passed through, and preferably using Customize, not just symbol properties. Currently it is all-or-none: all commands that have the property or none of them. Option `isearch-allow-scroll' is a Boolean. It would be better for it to list (specify) the allowed commands. You could still let libraries etc. use symbol properties, and have the default value of the option pick up all such (loaded or autoloaded) command symbols. So no, "developers of custom scroll commands [need not] know about isearch" [ST]. They would just do what they do now: add property `scroll-command'. The option default value would pick them all up. Yes, if a user does customize the option then s?he will not pick up any such default commands added afterward, but that is an inherent problem with option default values. (There are ways around that problem, but probably not worth using here.) What is important is that such a fine-grained option lets users opt out of some such commands without tracking down every symbol having `scroll-command' or `isearch-allow-scroll' and changing property values to fit. Anyway, if no change is made, so that we still have only a Boolean option, then yes, about the only improvement available without changing the design/implementation would be to rename things, including the Boolean option, to be a bit clearer. That option is just a general command pass-through, not a scrolling command pass-through. If renaming is the only change you want to make, then call it `isearch-allow-command', `isearch-command-pass-through', `isearch-inhibit-exit' [ST] (but it does _not_ prevent the command from exiting isearch), `isearch-allow-no-exit', or some such. Even such a vague name would be better than giving the impression that it is only about scrolling. Because several issues and possibilities have been discussed, let me repeat one more time which one I really care about: separating (a) `C-u' pass-through from (b) command pass-through. Today these are hard-coupled in the (misnamed) single option `isearch-allow-scroll'. I would be OK with either always allowing `C-u' pass-through or giving users the option (a separate option or option value from allowing command pass-through). ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 0:58 ` Stefan Monnier 2011-09-10 7:48 ` Drew Adams @ 2011-09-10 11:28 ` Alan Mackenzie 2011-09-10 16:44 ` Drew Adams 2011-09-10 11:47 ` Juri Linkov 2 siblings, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-10 11:28 UTC (permalink / raw) To: Stefan Monnier; +Cc: Drew Adams, emacs-devel Hi, Stefan. On Fri, Sep 09, 2011 at 08:58:42PM -0400, Stefan Monnier wrote: > > I meant that it is not _necessarily_ about scrolling. I understand that that > > was the original motivation, and it remains an important use case (for people > > who want scrolling). > Actually, it's more than that: its intention is about scrolling. > You can abuse it, but some people like pass-through for some set of > commands but not for others, so isearch-allow-scroll is meant to control > that for scrolling commands. > We all agree that the fact that C-u got folded into it is definitely > a misfeature in this respect. I do not agree with this. ;-) The prefix arg is an essential part of the command with which one might exit isearch. > Maybe what you want is a new option `isearch-pass-through-categories', > which would be a list of symbol properties, so any command who has > a non-nil value for one of those properties is allowed to run without > exiting isearch. > Then `scroll-command' becomes one possible element of > isearch-pass-through-categories. > > It is true, AFAICT. Nothing prevents you from putting property > > `isearch-scroll' on *any* command, to get Isearch to pass through > > to it. > But you still only have one boolean value to control what commands to > pass through. This isn't quite true either. The current isearch-scroll property must be t (not merely non-nil) at the moment. This leaves other non-nil values to specify other behaviour. This was deliberate. > So what would you name this boolean option? > `isearch-a-few-more-commands-run-within-isearch'? What if people want > pass-through for scrolling commands but not for your new command? > Stefan -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 11:28 ` Alan Mackenzie @ 2011-09-10 16:44 ` Drew Adams 0 siblings, 0 replies; 59+ messages in thread From: Drew Adams @ 2011-09-10 16:44 UTC (permalink / raw) To: 'Alan Mackenzie', 'Stefan Monnier'; +Cc: emacs-devel > > We all agree that the fact that C-u got folded into it is definitely > > a misfeature in this respect. > > I do not agree with this. ;-) The prefix arg is an essential part of > the command with which one might exit isearch. I think what Stefan meant here - at least what I would say, is what you already agreed to: d>> 2. I would like to see us separate the treatment of a prefix d>> arg - whether it gets passed it through to a command or it d>> exits Isearch - from the other uses/effects of this option. a> a> I agree, that would be a good idea. It wouldn't take very much work. IOW, IIUC, you, Stefan, and I have already agreed that passing `C-u' through would be a good idea, independently of `isearch-allow-scroll' and "scrolling" commands. The fact that scrolling commands might always need to _also_ enjoy `C-u' pass-through is a different matter. That seems to be what you're saying here. But that wasn't the point. The point was that all commands should enjoy the same `C-u' pass-through privilege - which I believe you've already agreed to. > > But you still only have one boolean value to control what > > commands to pass through. > > This isn't quite true either. The current isearch-scroll > property must be t (not merely non-nil) at the moment. This > leaves other non-nil values to specify other behaviour. This > was deliberate. Well, OK. Today it's a Boolean. Tomorrow it could let you specify more. That was one of my points: let's let it let you specify just which commands (or categories of commands) Isearch should pass through. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 0:58 ` Stefan Monnier 2011-09-10 7:48 ` Drew Adams 2011-09-10 11:28 ` Alan Mackenzie @ 2011-09-10 11:47 ` Juri Linkov 2011-09-10 12:13 ` Alan Mackenzie 2 siblings, 1 reply; 59+ messages in thread From: Juri Linkov @ 2011-09-10 11:47 UTC (permalink / raw) To: Stefan Monnier; +Cc: 'Alan Mackenzie', Drew Adams, emacs-devel > Maybe what you want is a new option `isearch-pass-through-categories', > which would be a list of symbol properties, so any command who has > a non-nil value for one of those properties is allowed to run without > exiting isearch. > > Then `scroll-command' becomes one possible element of > isearch-pass-through-categories. I think this would be the best thing to do. And to add a new property that doesn't exit Isearch regardless of the value of `isearch-allow-scroll'. And put it on all universal argument commands `universal-argument', `negative-argument', `digit-argument', i.e.: ;; Universal argument commands (put 'universal-argument 'isearch-inhibit-exit t) (put 'negative-argument 'isearch-inhibit-exit t) (put 'digit-argument 'isearch-inhibit-exit t) that will do TRT by default for commands unrelated to scrolling. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 11:47 ` Juri Linkov @ 2011-09-10 12:13 ` Alan Mackenzie 0 siblings, 0 replies; 59+ messages in thread From: Alan Mackenzie @ 2011-09-10 12:13 UTC (permalink / raw) To: Juri Linkov; +Cc: Stefan Monnier, Drew Adams, emacs-devel Hi, Juri. On Sat, Sep 10, 2011 at 02:47:08PM +0300, Juri Linkov wrote: > > Maybe what you want is a new option `isearch-pass-through-categories', > > which would be a list of symbol properties, so any command who has > > a non-nil value for one of those properties is allowed to run without > > exiting isearch. > > Then `scroll-command' becomes one possible element of > > isearch-pass-through-categories. > I think this would be the best thing to do. And to add > a new property that doesn't exit Isearch regardless of the value of > `isearch-allow-scroll'. And put it on all universal argument commands > `universal-argument', `negative-argument', `digit-argument', i.e.: Please everybody, this whole thing is balooning out of control. What everybody seems to be forgetting is that this feature can only be used with commands which: 1. Don't change the buffer being isearched through; 2. Don't move point; 3. Don't swap to another buffer, window or frame; 4. Don't mess with isearch's state (e.g. with search-regexp functions). This is really a TINY number of commands, mostly to do with scrolling, changing window arrangement, and the prefix arg. Any other command would screw up the isearch horribly. > ;; Universal argument commands > (put 'universal-argument 'isearch-inhibit-exit t) > (put 'negative-argument 'isearch-inhibit-exit t) > (put 'digit-argument 'isearch-inhibit-exit t) > that will do TRT by default for commands unrelated to scrolling. I agree these three commands should be separated out. I've already supplied a rough patch for this. But for any more additional complexity, we should have a firm use case. Complexity without reason is a Bad Thing. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-09 23:07 ` Drew Adams 2011-09-10 0:58 ` Stefan Monnier @ 2011-09-10 2:03 ` Stephen J. Turnbull 2011-09-10 11:10 ` Alan Mackenzie 2011-09-11 10:39 ` Alan Mackenzie 3 siblings, 0 replies; 59+ messages in thread From: Stephen J. Turnbull @ 2011-09-10 2:03 UTC (permalink / raw) To: Drew Adams; +Cc: 'Alan Mackenzie', emacs-devel Drew Adams writes: > Right, but my real point is not about the names but about freeing > up the two pass-through behaviors (one for specific commands, the > other for `C-u') from their coupling to scrolling. Alan's point is that this is a YAGNI. It's incumbent on you to show it's actually a YIDNI ("yes, I *do* need it" in this concrete use case). [Perhaps you've already done that, but with all the repetition and philosophical BS, and disingenuous claims about not wanting to belabor dead horses that were bred and born earlier in your own post before you beat them into submission with freshly cooked linguine, I don't remember any more, and tl;wr2x ("too long; won't read two times").] > And even if that were also the case, nothing in fact prevents using > an inappropriate command this way. There are lots of inappropriate things that can be done with Emacsen. Most are in the class "you did WHAT? (mutter mutter you idiot)", most of the rest are "oh; well, don't do that, then", and a few are in the class of "attractive nuisance". Only the last class should be checked for. > Dunno. That would probably be OK for me, but I can imagine RMS or > others chiming in that they are used to having `C-u' immediately > exit Isearch. Having an option means not disturbing the general, > traditional behavior. Despite what I wrote above, this is not on the face of it a YAGNI. On the other hand, it doesn't need to be a customization at first. Only once it appears that there are many users who do like the behavior, and many who don't, does it need to be a visible customization. > Currently, it is all or nothing: all scroll commands plus any > others that might have property `isearch-scroll' or else none of > them. Er, isn't that precisely why this is enabled via a property? If you really need flexible control, you could turn the value into a context descriptor (in XEmacs, a "specifier"; more generally, an alist with keys some kind of test and values boolean). (See above for "YAGNI and YIDNI", though.) > Especially if we open this up to intentionally be about > pass-through in general and not just scrolling, users should have a > way to easily pick and choose which commands are affected by it. Not so fast. "Easy pick-and-choose" for users is definitely a YAGNI on the face of it. Use case? > > > Instead of a Boolean option (`isearch-allow-scroll'), users > > > should have an option that specifies the affected commands. Bad idea. You already have the property, and this proposed option requires developers of custom scroll commands (etc) to know about isearch, which really would be unfortunate. > > > This means that if someone adds property `scroll-command' > > > for some command then it automatically acts as if s?he > > > also added property `isearch-scroll'. Why couple these > > > two things? Why assume that every `scroll-command' command > > > is also one for which Isearch should allow scrolling. > > > > Pretty much all standard commands that can be "scrolling" commands > > already are. Let me know if there are any I have missed. > > I know. My question was why. Because the feature really *is* about scrolling, not just about some scroll commands inter alia. Some users use isearch in a way that is facilitated by scrolling commands which don't exit[1] isearch mode. It would be really really annoying if *some* of your (perhaps custom) scrolling commands worked but *others* did not. *This is a general property of scrolling commands*: they're all useful, or not, in the same sets of contexts for any given user. Rather than force users to add their custom commands to all such contexts, the 'scroll-command property makes it possible to get scrolling command behavior in all contexts, including ones you don't know about and haven't been written yet anyhow. > IOW, instead of having Isearch automatically recognize property > `scroll-command', just use property `isearch-scroll' for all > pertinent commands (even if they already have property > `scroll-command'). To belabor that point, that's a bad idea. *If* there are other classes like scrolling commands that the user really thinks of as a single parametrized command (ie, (defun scroll-command (direction distance target-of-point) ...)), they should get their own property so that users can set that property on custom commands in that class and automatically get appropriate behavior in any context that respects that property. Then for the miscellaneous commands, the `isearch-scroll' property is useful (it should be renamed to something like `isearch-inhibit-exit'). Footnotes: [1] Please don't call this "pass-through" in the code. It's not clear what is being "passed" or what it goes "through" or what "catches" it once it "gets through". ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-09 23:07 ` Drew Adams 2011-09-10 0:58 ` Stefan Monnier 2011-09-10 2:03 ` Stephen J. Turnbull @ 2011-09-10 11:10 ` Alan Mackenzie 2011-09-10 16:43 ` Drew Adams 2011-09-11 10:39 ` Alan Mackenzie 3 siblings, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-10 11:10 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel Hi, Drew. A bit of clarification: On Fri, Sep 09, 2011 at 04:07:02PM -0700, Drew Adams wrote: > That's my point. Like those commands, I want to make use of this `C-u' feature. > But I do not want to also allow scrolling during Isearch. [ .... ] > > What would you suggest? What does the option really do, in your > > judgement? Scrolling is an essential part of the option. > AFAICT, it does two things: > 1. It invokes any command that has property `isearch-scroll' or `scroll-command' > on its symbol - without necessarily exiting Isearch. NO NO NO!!! A "scrolling command" is a command which MOST DEFINITELY DOESN'T exit the isearch. This is the definition of "scrolling command" in isearch. With this in mind, please think through everything you've written. [ .... ] > 2. It passes a prefix arg through to any key (its command) that follows it. Bear in mind that C-u `universal-argument' is a scrolling command in its own right. So we can construe what you're asking for thusly: to have an option for a subset of scrolling commands to be executable in isearch > Neither of these has anything to do with scrolling, necessarily. Change the > names to remove `scroll' and you will see that. [ .... ] > (And the code that gives the scrolling commands their Isearch behavior should > not even be in isearch.el, IMO.) I'm not sure what you mean by this. Their "isearch behaviour" is part of isearch. These commands operate precisely the same way, regardless of whether they're called from isearch or not. [ .... ] > > > 1b. For another thing (i.e., forgetting about `C-u'), *any* > > > command can benefit from the same Isearch feature as a > > > scrolling command. It suffices to put a non-nil > > > `isearch-scroll' property on the command symbol. > > This isn't true. > It is true, AFAICT. Nothing prevents you from putting property `isearch-scroll' > on *any* command, to get Isearch to pass through to it. The current isearch, with isearch-allow-scroll set, will pass a C-u through to the next command regardless of whether that command is a scrolling command. > > Only commands which don't foul up the isearch can be > > permitted to use the feature. Only a few commands meet the criteria. > > `universal-argument' is such a command. > (It would be up to the command they are passed through to to decide whether to > exit. That would be something entirely new. It might involve such a command returning t/nil to instruct isearch to exit or not. But that would be a horrible kludge. (Every command being adjusted to do this? What about other uses of the return value? There are an awful lot of commands) > Granted that users might not want to mess around with the scrolling commands > (whether via `put' or Customize), perhaps you will recognize that a user might > want to not have Isearch pass through to some command that library `foo' thinks > it is a great idea to pass through to by default. You mean "pass through a C-u"? I don't see this at all. Perhaps you have a specific use case in mind. > > Again, familiarise yourself with just how restricted the permissible > > commands are. There's a list of criteria in isearch.el > > ~L1760 (think - number of yards in a mile :-). > I read that comment, and I read the code. You haven't given any hint that you've really understood these restrictions. Imagine a quasi-scrolling command that breaks one of them. Say, for example, it moves point. You would then be in the middle of an isearch with point not at the head of the current search string. I'm not saying that it wouldn't be possible to extend the semantics of isearch to make this valid, but it would be difficult. At least it might be technically possible but it most assuredly wouldn't be politically possible. > That said, I don't want to belabor this part. My main interest is in freeing up > `C-u', which you have already agreed to. [ .... ] > I would like to see `C-u' passed through - that's the main point. Either > systematically or optionally, but if optionally then separately from allowing > scrolling. Try out this patch; I think it does what you want. (It's obviously very rough code, in desperate need of refactoring, but it might work.) *** isearch.el~ 2011-09-04 15:31:05.000000000 +0000 --- isearch.el 2011-09-10 10:58:02.000000000 +0000 *************** *** 1966,1976 **** (apply 'isearch-unread keylist) (isearch-edit-string)) ;; Handle a scrolling function. ! ((and isearch-allow-scroll ! (progn (setq key (isearch-reread-key-sequence-naturally keylist)) ! (setq keylist (listify-key-sequence key)) ! (setq main-event (aref key 0)) ! (setq scroll-command (isearch-lookup-scroll-key key)))) ;; From this point onwards, KEY, KEYLIST and MAIN-EVENT hold a ;; complete key sequence, possibly as modified by function-key-map, ;; not merely the one or two event fragment which invoked --- 1966,1985 ---- (apply 'isearch-unread keylist) (isearch-edit-string)) ;; Handle a scrolling function. ! ((or ! (and isearch-allow-scroll ! (progn (setq key (isearch-reread-key-sequence-naturally keylist)) ! (setq keylist (listify-key-sequence key)) ! (setq main-event (aref key 0)) ! (setq scroll-command (isearch-lookup-scroll-key key)))) ! (progn ! (setq key (isearch-reread-key-sequence-naturally keylist) ! keylist (listify-key-sequence key) ! main-event (aref key 0) ! scroll-command (key-binding key)) ! (or (eq scroll-command 'universal-argument) ! (eq scroll-command 'negative-argument) ! (eq scroll-command 'digit-argument)))) ;; From this point onwards, KEY, KEYLIST and MAIN-EVENT hold a ;; complete key sequence, possibly as modified by function-key-map, ;; not merely the one or two event fragment which invoked -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 11:10 ` Alan Mackenzie @ 2011-09-10 16:43 ` Drew Adams 2011-09-10 19:04 ` Alan Mackenzie 0 siblings, 1 reply; 59+ messages in thread From: Drew Adams @ 2011-09-10 16:43 UTC (permalink / raw) To: 'Alan Mackenzie'; +Cc: emacs-devel > > AFAICT, it does two things: > > > 1. It invokes any command that has property > `isearch-scroll' or `scroll-command' > > on its symbol - without necessarily exiting Isearch. > > NO NO NO!!! A "scrolling command" is a command which MOST DEFINITELY > DOESN'T exit the isearch. This is the definition of > "scrolling command" in isearch. With this in mind, please think > through everything you've written. Well, yes and no. Yes, in general Isearch tries to prevent exit. But if a command wants to exit, it can do so: (defun foo () (interactive) (isearch-done) (message "WWWWWWWW")(sleep-for 2) (forward-char 2)) That's what I do now, to exit Isearch and invoke Icicles search. In this case, I use only `C-u' pass-through, not command pass-through. ;; Bound to `S-TAB' in Isearch. (defun icicle-search-w-isearch-string (&optional use-context-p) "Icicles-search the buffer using an Isearch string chosen by completion. The string you choose is used as the Icicles search context. You can navigate among its occurrences or search within those occurrences for a subpattern. If option `isearch-allow-scroll' is non-nil then a prefix arg changes the behavior, as follows: 1. You are prompted for an Icicles search-context regexp. 2. You are prompted for an Isearch string, which you choose using completion. It is copied to the `kill-ring'. 3. You can yank that string anytime during Icicles search, to search for it within the contexts defined by the regexp matches." (interactive "P") (isearch-done) (if (not use-context-p) (icicle-search (point-min) (point-max) (icicle-isearch-complete-past-string) t) (let ((regexp (icicle-search-read-context-regexp))) (kill-new (icicle-isearch-complete-past-string)) (icicle-search (point-min) (point-max) regexp t)))) > > 2. It passes a prefix arg through to any key (its command) > that follows it. > > Bear in mind that C-u `universal-argument' is a scrolling > command in its own right. So we can construe what you're > asking for thusly: to have an option for a subset of scrolling > commands to be executable in isearch If you like. I really don't care how you characterize it, as long as it is understood. Users of a command such as `icicle-search-w-isearch-string' should not need to also allow _scrolling_ for Isearch, just to allow such a command to work from Isearch, picking up the prefix arg. IOW, I would like to be able to remove this part of the command's doc string: "If option `isearch-allow-scroll' is non-nil". This command has nothing to do with scrolling within Isearch. Absolutely nothing. > > Neither of these has anything to do with scrolling, necessarily. > > Change the names to remove `scroll' and you will see that. > > [ .... ] > > > (And the code that gives the scrolling commands their > > Isearch behavior should not even be in isearch.el, IMO.) > > I'm not sure what you mean by this. It's a detail - not important. IMO, it might be better to put this kind of code at the place where the command is defined, and not in isearch.el: (put 'recenter 'isearch-scroll t) But I certainly won't argue the point. > Their "isearch behaviour" is part of isearch. These commands > operate precisely the same way, regardless of > whether they're called from isearch or not. The fact that you want some particular command to not exit Isearch is part of the behavior you want for _that command_. Yes, it's the part of the behavior that is within an Isearch context... so it's a choice. I would probably put the `put' where the command is defined and not where Isearch is defined. But it's a choice. The same kind of thing arises for decisions about where to put thing-at-point properties: at the point of the function's definition, or in thingatpt.el? And so on. We can perhaps agree to disagree about this. > > > > 1b. For another thing (i.e., forgetting about `C-u'), *any* ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ > > > > command can benefit from the same Isearch feature as a > > > > scrolling command. It suffices to put a non-nil > > > > `isearch-scroll' property on the command symbol. > > > > > This isn't true. > > > > It is true, AFAICT. Nothing prevents you from putting > > property `isearch-scroll' on *any* command, to get Isearch > > to pass through to it. > > The current isearch, with isearch-allow-scroll set, will pass a C-u > through to the next command regardless of whether that command is a > scrolling command. You changed the subject. (1b) is about passing a _command_ through, not passing `C-u' through (see: "forgetting about `C-u'", above). But wrt what you say: Yes, `C-u' is passed through regardless of whether the command is a "scrolling" command. I do not put property `isearch-scroll' (or `scroll-command') on command `icicle-search-w-isearch-string'. And it works. But what is important (to me) is that users must turn on `isearch-allow-scroll' to enable the `C-u' pass-through. They should not have to. I myself do not want scrolling within Isearch (I want `C-v' to exit Isearch, for example), yet I want to be able to use `C-u S-TAB' from within Isearch. > > > Only commands which don't foul up the isearch can be > > > permitted to use the feature. Only a few commands meet > > > the criteria. `universal-argument' is such a command. > > > (It would be up to the command they are passed through to > > to decide whether to exit. > > That would be something entirely new. It might involve such a command > returning t/nil to instruct isearch to exit or not. But that > would be a horrible kludge. One person's horrible kludge is another's feature. ;-) But as I say, I personally don't have a need (so far) for command pass-through. `C-u' pass-through would be enough, for me. The point here was that the code _already_ is general and not in any way limited to "scrolling", in spite of the "scrolling" vocabulary used to describe it. Nothing prevents a "scrolling command" (that is, a command with property `isearch-scroll') from exiting Isearch - it is up to the command. > (Every command being adjusted to do this? What "every command"? I'm simply describing what the code already does. I'm not describing some wishlist feature. > What about other uses of the return value? There are an awful lot of commands) No idea what you're on about here. I think you have perhaps misunderstood me. > > Granted that users might not want to mess around with the > > scrolling commands (whether via `put' or Customize), perhaps > > you will recognize that a user might want to not have Isearch > > pass through to some command that library `foo' thinks > > it is a great idea to pass through to by default. > > You mean "pass through a C-u"? No, this is still part of (1b): _command_ pass-through, not `C-u' pass-through. The point of that sentence is to say that _users_ should have the control, not some library foo.el that might baptise some command `foo' as a "scrolling" command (i.e., pass-through). A user should be able to allow pass-through for some commands and not others. Today, s?he can do that only by allowing all of them (non-nil `isearch-allow-scroll') and then removing `isearch-scroll' or `scroll-command' properties from the commands s?he does not want to pass through. > > That said, I don't want to belabor this part. My main > > interest is in freeing up `C-u', which you have already agreed to. > [...] > > I would like to see `C-u' passed through - that's the main > > point. Either systematically or optionally, but if optionally > > then separately from allowing scrolling. > > Try out this patch; I think it does what you want. I don't think so. Am I missing something? (defun foo (arg) (interactive "P") (isearch-done) (message "arg: %S" arg)(sleep-for 2) (forward-char 2)) (define-key isearch-mode-map "\C-f" 'foo) Leave `isearch-allow-scroll' nil. Now search and hit `C-u C-f'. AFAICT, the `C-u' exits Isearch. It is not passed through to `foo'. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 16:43 ` Drew Adams @ 2011-09-10 19:04 ` Alan Mackenzie 2011-09-10 20:22 ` PJ Weisberg 2011-09-11 0:47 ` Drew Adams 0 siblings, 2 replies; 59+ messages in thread From: Alan Mackenzie @ 2011-09-10 19:04 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel Hi, Drew. On Sat, Sep 10, 2011 at 09:43:23AM -0700, Drew Adams wrote: > > NO NO NO!!! A "scrolling command" is a command which MOST DEFINITELY > > DOESN'T exit the isearch. This is the definition of > > "scrolling command" in isearch. With this in mind, please think > > through everything you've written. > Well, yes and no. Yes, in general Isearch tries to prevent exit. Dash it, Drew, you can try a man's patience. It was me who programmed the device, me who first used "scrolling command", so I get to define what it means. I know you don't like the term, but if you can't bring yourself to use it as I've defined it, please suggest another term for it. If we can't agree on terminology, then there's not much point trying to carry out a discussion. > But if a command wants to exit, it can do so: > (defun foo () > (interactive) > (isearch-done) > (message "WWWWWWWW")(sleep-for 2) > (forward-char 2)) > That's what I do now, to exit Isearch and invoke Icicles search. In this case, > I use only `C-u' pass-through, not command pass-through. I'm kind of with Stephen at the moment. What exactly do you mean by "command pass-through"? > ;; Bound to `S-TAB' in Isearch. OK. Things bound in the isearch-mode-map are a different kettle of fish entirely from scrolling commands. > (defun icicle-search-w-isearch-string (&optional use-context-p) > (interactive "P") > (isearch-done) > (if (not use-context-p) > (icicle-search (point-min) (point-max) > (icicle-isearch-complete-past-string) t) > (let ((regexp (icicle-search-read-context-regexp))) > (kill-new (icicle-isearch-complete-past-string)) > (icicle-search (point-min) (point-max) regexp t)))) [ .... ] > > I'm not sure what you mean by this. > It's a detail - not important. IMO, it might be better to put this kind of code > at the place where the command is defined, and not in isearch.el: > (put 'recenter 'isearch-scroll t) > But I certainly won't argue the point. Ah right, got you. I thought you were talking about the executable code dealing with the property, not the setting of it. > > Their "isearch behaviour" is part of isearch. These commands > > operate precisely the same way, regardless of > > whether they're called from isearch or not. > The fact that you want some particular command to not exit Isearch is part of > the behavior you want for _that command_. I couldn't disagree more, if we're talking about something like `recenter-top-bottom'. If we're talking about a command bound in isearch-mode-map, like `icicle-s-w-i-s', then yes. > > > > > 1b. For another thing (i.e., forgetting about `C-u'), *any* > ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ > > > > > command can benefit from the same Isearch feature as a > > > > > scrolling command. It suffices to put a non-nil > > > > > `isearch-scroll' property on the command symbol. > > > > This isn't true. > > > It is true, AFAICT. Nothing prevents you from putting > > > property `isearch-scroll' on *any* command, to get Isearch > > > to pass through to it. > > The current isearch, with isearch-allow-scroll set, will pass a C-u > > through to the next command regardless of whether that command is a > > scrolling command. > You changed the subject. (1b) is about passing a _command_ through, not passing > `C-u' through (see: "forgetting about `C-u'", above). I don't know what you mean. What is passing a command through what to what? > But what is important (to me) is that users must turn on `isearch-allow-scroll' > to enable the `C-u' pass-through. They should not have to. I myself do not > want scrolling within Isearch (I want `C-v' to exit Isearch, for example), yet I > want to be able to use `C-u S-TAB' from within Isearch. We're agreed on this point. My patch was trying to achieve that. > The point here was that the code _already_ is general and not in any way limited > to "scrolling", in spite of the "scrolling" vocabulary used to describe it. > Nothing prevents a "scrolling command" (that is, a command with property > `isearch-scroll') from exiting Isearch - it is up to the command. The definition of "scrolling command" prevents it. It would be profoundly bad programming practice for a random command to manipulate the internals of isearch. For a command on the isearch-mode-map (which cannot be a "scrolling command") it's a different matter. [ .... ] > The point of that sentence is to say that _users_ should have the control, not > some library foo.el that might baptise some command `foo' as a "scrolling" > command (i.e., pass-through). > A user should be able to allow pass-through for some commands and not others. Why? With the exception of the prefix-arg commands, you haven't made any strong case for this. Can you give an example of two scrolling commands, one of which a user would strongly want, the other strongly not want? > Today, s?he can do that only by allowing all of them (non-nil > `isearch-allow-scroll') and then removing `isearch-scroll' or `scroll-command' > properties from the commands s?he does not want to pass through. That is surely enough. I can't conceive of any situation where the binary choice is inadequate. What commands might a user want to separate out? > > Try out this patch; I think it does what you want. > I don't think so. Am I missing something? No. I must have been missing something. > (defun foo (arg) > (interactive "P") > (isearch-done) > (message "arg: %S" arg)(sleep-for 2) > (forward-char 2)) > (define-key isearch-mode-map "\C-f" 'foo) > Leave `isearch-allow-scroll' nil. > Now search and hit `C-u C-f'. > AFAICT, the `C-u' exits Isearch. It is not passed through to `foo'. OK. It was worth a try. :-) Anyhow, we're in feature freeze at the moment, so until Emacs 24 is split off onto a branch, there's nowhere for fresh code to go. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 19:04 ` Alan Mackenzie @ 2011-09-10 20:22 ` PJ Weisberg 2011-09-10 23:06 ` Stephen J. Turnbull 2011-09-11 0:47 ` Drew Adams 1 sibling, 1 reply; 59+ messages in thread From: PJ Weisberg @ 2011-09-10 20:22 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Drew Adams, emacs-devel@gnu.org [-- Attachment #1: Type: text/plain, Size: 1533 bytes --] On Saturday, September 10, 2011, Alan Mackenzie <acm@muc.de> wrote: > Hi, Drew. > > On Sat, Sep 10, 2011 at 09:43:23AM -0700, Drew Adams wrote: >> > NO NO NO!!! A "scrolling command" is a command which MOST DEFINITELY >> > DOESN'T exit the isearch. This is the definition of >> > "scrolling command" in isearch. With this in mind, please think >> > through everything you've written. > >> Well, yes and no. Yes, in general Isearch tries to prevent exit. > > Dash it, Drew, you can try a man's patience. It was me who programmed > the device, me who first used "scrolling command", so I get to define > what it means. I know you don't like the term, but if you can't bring > yourself to use it as I've defined it, please suggest another term for > it. If we can't agree on terminology, then there's not much point trying > to carry out a discussion. The problem is that you've defined "scrolling command" to mean something that has nothing to do with scrolling (i.e., commands which MOST DEFINITELY DON'T exit isearch). This leads to ridiculous conclusions such as "C-u `universal-argument' is a scrolling command in its own right." > I'm kind of with Stephen at the moment. What exactly do you mean by > "command pass-through"? Awkward phrasing, but if you read Drew's post it's fairly clear what he meant: `C-u' "passes through" if it passes a prefix argument to the next command (its normal purpose) without exiting isearch. So, a command "passes through" if it also works normally without exiting isearch. -- -PJ [-- Attachment #2: Type: text/html, Size: 1893 bytes --] ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 20:22 ` PJ Weisberg @ 2011-09-10 23:06 ` Stephen J. Turnbull 0 siblings, 0 replies; 59+ messages in thread From: Stephen J. Turnbull @ 2011-09-10 23:06 UTC (permalink / raw) To: PJ Weisberg; +Cc: Alan Mackenzie, Drew Adams, emacs-devel@gnu.org PJ Weisberg writes: > The problem is that you've defined "scrolling command" to mean something > that has nothing to do with scrolling (i.e., commands which MOST DEFINITELY > DON'T exit isearch). No, that's completely wrong: there must be no buffer changes, no point movement, some other conditions. Exiting isearch or not is not part of the definition of "scrolling command". The fact that the current defintion doesn't mention "movement" of anything is a bit odd, indeed, but such things are occasionally useful. One might want to define an additional class of commands that satisfy those restrictions but aren't scrolling commands (ie, adjusting the position of the window with respect to the buffer). If so, define the classes (including adjusting the definition of "scrolling command") and adjust the code to recognize them. But: > This leads to ridiculous conclusions such as "C-u > `universal-argument' is a scrolling command in its own right." `universal-argument' is a meta-command, of which there are very few, so adding it (and other such meta-commands) ad hoc to "scrolling commands" might be the pragmatic way to handle it. What other commands conform to the restrictions that Alan stated? Of those, which would you like to add to the class that inhibit isearch's normal exit behavior? Are there whole classes of them that users would like to enable (or disable!) as a group, or a bunch of isolated commands that different users are likely to express varied willingness to enable them? ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-10 19:04 ` Alan Mackenzie 2011-09-10 20:22 ` PJ Weisberg @ 2011-09-11 0:47 ` Drew Adams 1 sibling, 0 replies; 59+ messages in thread From: Drew Adams @ 2011-09-11 0:47 UTC (permalink / raw) To: 'Alan Mackenzie'; +Cc: emacs-devel > > Well, yes and no. Yes, in general Isearch tries to prevent exit. > > Dash it, Drew, you can try a man's patience. It was me who programmed > the device, me who first used "scrolling command", so I get to define > what it means. I know you don't like the term, I have nothing against the term. If that's what it does. My (minor/FYI/heads-up) about the terminology was simply this: I don't think that the code actually enforces anything about scrolling. I understand that scrolling was the motivation and is still your intention. But IIUC (and I could be wrong) the actual behavior does not look at scrolling - it looks only at whether a given command has the property `isearch-scroll' or `scroll-command'. > but if you can't bring yourself to use it as I've defined it, > please suggest another term for it. I suggested a few alternatives, actually, and I even gave a nod to one that ST suggested (although I don't think it is accurate). But I don't really care about this. Call it what you like. > If we can't agree on terminology, then there's not much > point trying to carry out a discussion. So let's agree. You win. And in fact I've used your terminology since the beginning, although I did put it in quotes: "scrolling command". > > But if a command wants to exit, it can do so: > > > (defun foo () > > (interactive) > > (isearch-done) > > (message "WWWWWWWW")(sleep-for 2) > > (forward-char 2)) > > > That's what I do now, to exit Isearch and invoke Icicles > > search. In this case, I use only `C-u' pass-through, not > > command pass-through. > > What exactly do you mean by "command pass-through"? I mean that I do not put property `isearch-scroll' or `scroll-command' on my command, so it does not get treated as a "scrolling command". What I do do is take advantage of the fact that if `isearch-allow-scroll' is non-nil then a command invoked from Isearch can have a prefix arg passed to it (instead of exiting Isearch). And what I am asking for is to let users take advantage of this "`C-u' pass-through" _without_ also having to set `isearch-allow-scroll' to non-nil and consequently open the flood gates to scrolling within Isearch. IOW, I want to be able to pass a prefix arg to a command that I invoke from Isearch, without having to allow scrolling. End of story - you can forget the rest if it's distracting you from that request. > > ;; Bound to `S-TAB' in Isearch. > > OK. Things bound in the isearch-mode-map are a different > kettle of fish entirely from scrolling commands. That's the kettle I'm actually interested in, personally. > > (defun icicle-search-w-isearch-string (&optional use-context-p) > > (interactive "P") > > (isearch-done) > > (if (not use-context-p) > > (icicle-search (point-min) (point-max) > > (icicle-isearch-complete-past-string) t) > > (let ((regexp (icicle-search-read-context-regexp))) > > (kill-new (icicle-isearch-complete-past-string)) > > (icicle-search (point-min) (point-max) regexp t)))) > > > > Their "isearch behaviour" is part of isearch. These commands > > > operate precisely the same way, regardless of > > > whether they're called from isearch or not. > > > The fact that you want some particular command to not exit > > Isearch is part of the behavior you want for _that command_. > > I couldn't disagree more, if we're talking about something like > `recenter-top-bottom'. If we're talking about a command bound in > isearch-mode-map, like `icicle-s-w-i-s', then yes. Well, we can disagree. And to me it's a detail, anyway. If it were I, I would specify `recenter-top-bottom's Isearch behavior, etc. at the place where the command is defined. And to me it doesn't matter which keymap(s) (if any) the command is bound in. I gave the analogy of thing-at-point behavior. Another analogy is `delete-selection' behavior. Sure, delete-selection behavior is currently specified for some commands in delsel.el, and thing-at-point behavior is specified for some thing types in thingatpt.el. But if you want to specify such behavior for your command `toto', are you going to perform surgery on delsel.el, isearch.el, and thingatpt.el? No, you're probably going to add the `put's that specify such behavior to your library toto.el. That's all. And I would probably just organize things like that from the start - if it were I. But I'm not saying that Emacs needs to move such `put's out of delsel.el, isearch.el, etc. and into the libraries that define the commands whose behavior those `put's help contribute to defining. Let's forget about this disagreement. > > > > > > 1b. For another thing (i.e., forgetting about `C-u'), *any* > > ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ > > > > > > command can benefit from the same Isearch feature as a > > > > > > scrolling command. It suffices to put a non-nil > > > > > > `isearch-scroll' property on the command symbol. > > > > > > This isn't true. > > > > > It is true, AFAICT. Nothing prevents you from putting > > > > property `isearch-scroll' on *any* command, to get Isearch > > > > to pass through to it. > > > > The current isearch, with isearch-allow-scroll set, will > > > pass a C-u through to the next command regardless of whether > > > that command is a scrolling command. > > > You changed the subject. (1b) is about passing a _command_ > > through, not passing `C-u' through (see: "forgetting about `C-u'", above). > > I don't know what you mean. What is passing a command > through what to what? Forget the expression, if it's not clear. What I meant was applying property `isearch-scroll' or `scroll-command' to a command's symbol. The resultant behavior is what I was calling command pass-through. It is something different from the `C-u' "pass-through" that happens _without_ using such a property, just by setting option `isearch-allow-scroll' to non-nil. I suppose I should not have tried to talk about both features in the same mail, but in my defense it is not I who mixed these two different creatures together. ;-) I tried to distinguish them and address each of them separately, but apparently I did not succeed in making myself clear. > > But what is important (to me) is that users must turn on > > `isearch-allow-scroll' to enable the `C-u' pass-through. > > They should not have to. I myself do not > > want scrolling within Isearch (I want `C-v' to exit > > Isearch, for example), yet I want to be able to use > > `C-u S-TAB' from within Isearch. > > We're agreed on this point. My patch was trying to achieve that. I'm glad we agree on the one thing I really care about. The rest was meant mainly as an FYI that I think things could be cleaned up a bit - but I don't really care if they are. > > Nothing prevents a "scrolling command" (that is, a command > > with property `isearch-scroll') from exiting Isearch - it is up > > to the command. > > The definition of "scrolling command" prevents it. What part of my `foo' example above (not the one below) was not clear? Try it. Put property `isearch-scroll' on `foo' (making it a "scrolling command" in your eyes), bind `foo' to a global key (e.g. (global-set-key "\C-f" 'foo)), and invoke it from Isearch. For me it exits with no problem. What am I missing? Where's the mysterious prevention? > It would be profoundly bad programming practice for a random command > to manipulate the internals of isearch. For a command on the > isearch-mode-map (which cannot be a "scrolling command") it's a > different matter. Well, I won't argue it strongly, but I disagree. The feature that you so much wanted to add to Isearch for scrolling commands might just as well be used by some other command that does something just as benign. But you would anyway no doubt see any such command through scrolling-colored glasses, and baptize it kosher (ouch! sorry for such a meta4mix). > > A user should be able to allow pass-through for some > > commands and not others. > > Why? With the exception of the prefix-arg commands, you > haven't made any strong case for this. Can you give an > example of two scrolling commands, one of which a user would > strongly want, the other strongly not want? No, sorry, I just don't care. The only case I really care about is the prefix-arg behavior. If you don't see that the current code is not really about scrolling (or, if you prefer, if I don't see that it really IS only about scrolling), then that's OK with me - let's leave it at that. We agree about the important part: free `C-u'! > > Today, s?he can do that only by allowing all of them (non-nil > > `isearch-allow-scroll') and then removing `isearch-scroll' > > or `scroll-command' properties from the commands s?he does not > > want to pass through. > > That is surely enough. I can't conceive of any situation where the > binary choice is inadequate. What commands might a user want > to separate out? Dunno, Alan. And don't care. If there is some user who wants to allow `recenter' but not `scroll-up' I guess we'll never know. You obviously like to allow the whole lot, and I like to disallow the whole lot. And as I said, I don't foresee my defining any "scrolling" commands that I will want to allow in Isearch, so we can leave it as is. > > > Try out this patch; I think it does what you want. > > I don't think so. Am I missing something? > No. I must have been missing something. > > > (defun foo (arg) > > (interactive "P") > > (isearch-done) > > (message "arg: %S" arg)(sleep-for 2) > > (forward-char 2)) > > (define-key isearch-mode-map "\C-f" 'foo) > > > Leave `isearch-allow-scroll' nil. > > Now search and hit `C-u C-f'. > > > AFAICT, the `C-u' exits Isearch. It is not passed through to `foo'. > > OK. It was worth a try. :-) And thanks for the try. I'm glad we agree that this is desirable. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-09 23:07 ` Drew Adams ` (2 preceding siblings ...) 2011-09-10 11:10 ` Alan Mackenzie @ 2011-09-11 10:39 ` Alan Mackenzie 2011-09-11 16:54 ` Drew Adams 3 siblings, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-11 10:39 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel Hi, Drew, On Fri, Sep 09, 2011 at 04:07:02PM -0700, Drew Adams wrote: > I would like to see `C-u' passed through - that's the main point. > Either systematically or optionally, but if optionally then separately > from allowing scrolling. Here's a better patch. I've tested it more than the previous attempt. *** isearch.el 2011-09-04 15:31:05.000000000 +0000 --- isearch.100911.el 2011-09-11 10:26:12.000000000 +0000 *************** *** 1966,1976 **** (apply 'isearch-unread keylist) (isearch-edit-string)) ;; Handle a scrolling function. ! ((and isearch-allow-scroll ! (progn (setq key (isearch-reread-key-sequence-naturally keylist)) ! (setq keylist (listify-key-sequence key)) ! (setq main-event (aref key 0)) ! (setq scroll-command (isearch-lookup-scroll-key key)))) ;; From this point onwards, KEY, KEYLIST and MAIN-EVENT hold a ;; complete key sequence, possibly as modified by function-key-map, ;; not merely the one or two event fragment which invoked --- 1966,1981 ---- (apply 'isearch-unread keylist) (isearch-edit-string)) ;; Handle a scrolling function. ! ((progn ! (setq key (isearch-reread-key-sequence-naturally keylist) ! keylist (listify-key-sequence key) ! main-event (aref key 0)) ! (or (and isearch-allow-scroll ! (setq scroll-command (isearch-lookup-scroll-key key))) ! (let (overriding-terminal-local-map) ! (setq scroll-command (key-binding key)) ! (memq scroll-command ! '(universal-argument negative-argument digit-argument))))) ;; From this point onwards, KEY, KEYLIST and MAIN-EVENT hold a ;; complete key sequence, possibly as modified by function-key-map, ;; not merely the one or two event fragment which invoked -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-11 10:39 ` Alan Mackenzie @ 2011-09-11 16:54 ` Drew Adams 2011-09-11 17:30 ` Alan Mackenzie 0 siblings, 1 reply; 59+ messages in thread From: Drew Adams @ 2011-09-11 16:54 UTC (permalink / raw) To: 'Alan Mackenzie'; +Cc: emacs-devel > > I would like to see `C-u' passed through - that's the main point. > > Either systematically or optionally, but if optionally then > > separately from allowing scrolling. > > Here's a better patch. I've tested it more than the previous attempt. Thank you, Alan. Seems to work. Even works with a sequence such as `C-1 C-- C-2', which passes -12 as it should, but which is relatively unknown. I tested this case because I noticed that you did not include `universal-argument-minus' in your test. But that is covered OK anyway, I guess because of the default ([t]) binding for `universal-argument-other-key'. Can this patch please be installed? Or are there people who prefer that `C-u' exit Isearch? If there are, then can we please have a user option for this choice? Thx. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-11 16:54 ` Drew Adams @ 2011-09-11 17:30 ` Alan Mackenzie 2011-09-11 18:53 ` Drew Adams 0 siblings, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-11 17:30 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel Hi, Drew. On Sun, Sep 11, 2011 at 09:54:17AM -0700, Drew Adams wrote: > > > I would like to see `C-u' passed through - that's the main point. > > > Either systematically or optionally, but if optionally then > > > separately from allowing scrolling. > > Here's a better patch. I've tested it more than the previous attempt. > Thank you, Alan. Seems to work. Great stuff! > Even works with a sequence such as `C-1 C-- C-2', which passes -12 as it should, > but which is relatively unknown. I tested this case because I noticed that you > did not include `universal-argument-minus' in your test. But that is covered OK > anyway, I guess because of the default ([t]) binding for > `universal-argument-other-key'. `univeral-argument-minus' isn't used anymore. The C-- is now handled by `negative-argument'. > Can this patch please be installed? Or are there people who prefer that `C-u' > exit Isearch? If there are, then can we please have a user option for this > choice? Here's another version of the patch, this time with `isearch-allow-prefix'. Its doc string isn't all that great; perhaps you can improve it. As for installing it, it's fine by me, but you'd have to negotiate with Stefan, since we're in feature freeze. Before installing, there really ought to be a mention of the feature in the Emacs manual. As a matter of interest, the code does assume scrolling, sort of. After a "scrolling command" the code checks that the search string is within the window, and scrolls it back in if it isn't. > Thx. *** isearch.el 2011-09-04 15:31:05.000000000 +0000 --- isearch.100911.el 2011-09-11 17:14:27.000000000 +0000 *************** *** 1817,1822 **** --- 1817,1830 ---- :type 'boolean :group 'isearch) + (defcustom isearch-allow-prefix nil + "Whether prefix arguments are allowed during incremental search. + If non-nil, entering a prefix argument will not terminate the + search. This option is ignored \(presumed t) when + `isearch-allow-scroll' is set." + :type 'boolean + :group 'isearch) + (defun isearch-string-out-of-window (isearch-point) "Test whether the search string is currently outside of the window. Return nil if it's completely visible, or if point is visible, *************** *** 1966,1976 **** (apply 'isearch-unread keylist) (isearch-edit-string)) ;; Handle a scrolling function. ! ((and isearch-allow-scroll ! (progn (setq key (isearch-reread-key-sequence-naturally keylist)) ! (setq keylist (listify-key-sequence key)) ! (setq main-event (aref key 0)) ! (setq scroll-command (isearch-lookup-scroll-key key)))) ;; From this point onwards, KEY, KEYLIST and MAIN-EVENT hold a ;; complete key sequence, possibly as modified by function-key-map, ;; not merely the one or two event fragment which invoked --- 1974,1991 ---- (apply 'isearch-unread keylist) (isearch-edit-string)) ;; Handle a scrolling function. ! ((progn ! (setq key (isearch-reread-key-sequence-naturally keylist) ! keylist (listify-key-sequence key) ! main-event (aref key 0)) ! (or (and isearch-allow-scroll ! (setq scroll-command (isearch-lookup-scroll-key key))) ! (and isearch-allow-prefix ! (let (overriding-terminal-local-map) ! (setq scroll-command (key-binding key)) ! (memq scroll-command ! '(universal-argument ! negative-argument digit-argument)))))) ;; From this point onwards, KEY, KEYLIST and MAIN-EVENT hold a ;; complete key sequence, possibly as modified by function-key-map, ;; not merely the one or two event fragment which invoked -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-11 17:30 ` Alan Mackenzie @ 2011-09-11 18:53 ` Drew Adams 2011-09-12 2:46 ` Richard Stallman 0 siblings, 1 reply; 59+ messages in thread From: Drew Adams @ 2011-09-11 18:53 UTC (permalink / raw) To: 'Alan Mackenzie'; +Cc: emacs-devel > `univeral-argument-minus' isn't used anymore. The C-- is now > handled by `negative-argument'. Huh? (defvar universal-argument-map (let ((map (make-sparse-keymap))) ... (define-key map [?-] 'universal-argument-minus) ... (define-key map [kp-subtract] 'universal-argument-minus) ...)) > > Can this patch please be installed? Or are there people > > who prefer that `C-u' exit Isearch? If there are, then can > > we please have a user option for this choice? > > Here's another version of the patch, this time with > `isearch-allow-prefix'. Its doc string isn't all that great; > perhaps you can improve it. I suggest "prefix-arg", not just "prefix", in the option name. There are lots of prefixes of different kinds in Emacs. I suggest that the default value allow `C-u' pass-through, not prevent it. It sounded like those weighing in so far on this all agreed that this should be the (new) behavior. I suggest turning it around: `isearch-prefix-arg-terminates' or `isearch-prefix-arg-terminates-search' (with default value nil, allowing pass-through). Easier to document, for one thing: "Non-nil means that a prefix argument terminates search. Ignored (treated as nil) if `isearch-allow-scroll' is non-nil." To me that's simpler and clearer. (It is misleading to say that a prefix arg is "allowed" - it is always allowed. The question is whether it gets passed to the command or it terminates search immediately.) Putting it this way also leaves open the possibility that termination might still occur if the value is nil (e.g. if the command itself chooses to exit). IOW, nil does not definitively prevent termination. (Yes, I know, it is not the `C-u' but the command that would terminate. Still, it's clearer not to state that a nil value prevents termination.) > As for installing it, it's fine by me, but you'd have to > negotiate with Stefan, since we're in feature freeze. Nothing to negotiate. He and Yidong can decide based on what's already been discussed. > Before installing, there really ought to be a mention of the > feature in the Emacs manual. Dunno about that. But if the new behavior is to allow `C-u' pass-through, then this would be a user-visible change and should be mentioned in NEWS. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-11 18:53 ` Drew Adams @ 2011-09-12 2:46 ` Richard Stallman 2011-09-12 9:36 ` Alan Mackenzie 2011-09-12 14:59 ` Drew Adams 0 siblings, 2 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-12 2:46 UTC (permalink / raw) To: Drew Adams; +Cc: acm, emacs-devel I think C-u should exit isearch. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-12 2:46 ` Richard Stallman @ 2011-09-12 9:36 ` Alan Mackenzie 2011-09-13 1:39 ` Richard Stallman 2011-09-12 14:59 ` Drew Adams 1 sibling, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-12 9:36 UTC (permalink / raw) To: Richard Stallman; +Cc: Drew Adams, emacs-devel Hi, Richard. On Sun, Sep 11, 2011 at 10:46:56PM -0400, Richard Stallman wrote: > I think C-u should exit isearch. Presumably you'd be OK if the stay-in-isearch behaviour was guarded by an option (default off)? In practice, there won't be too much difference, since the C-u will be applied to the next (non-isearch) command anyway. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-12 9:36 ` Alan Mackenzie @ 2011-09-13 1:39 ` Richard Stallman 2011-09-13 14:27 ` Alan Mackenzie 0 siblings, 1 reply; 59+ messages in thread From: Richard Stallman @ 2011-09-13 1:39 UTC (permalink / raw) To: Alan Mackenzie; +Cc: drew.adams, emacs-devel Presumably you'd be OK if the stay-in-isearch behaviour was guarded by an option (default off)? The change will be inconvenient for users in general, not just for me. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-13 1:39 ` Richard Stallman @ 2011-09-13 14:27 ` Alan Mackenzie 2011-09-13 20:05 ` Richard Stallman 0 siblings, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-13 14:27 UTC (permalink / raw) To: Richard Stallman; +Cc: drew.adams, emacs-devel On Mon, Sep 12, 2011 at 09:39:40PM -0400, Richard Stallman wrote: > Presumably you'd be OK if the stay-in-isearch behaviour was guarded by > an option (default off)? > The change will be inconvenient for users in general, not just for me. I don't think there will be any inconvenience at all. Unless the user sets the option, isearch will behave exactly as it has done. > -- > Dr Richard Stallman -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-13 14:27 ` Alan Mackenzie @ 2011-09-13 20:05 ` Richard Stallman 2011-09-13 21:04 ` Drew Adams 0 siblings, 1 reply; 59+ messages in thread From: Richard Stallman @ 2011-09-13 20:05 UTC (permalink / raw) To: Alan Mackenzie; +Cc: drew.adams, emacs-devel I don't think there will be any inconvenience at all. Unless the user sets the option, isearch will behave exactly as it has done. If the default is the current behavior, I guess the other option can't hurt. I could not understand from this text > Presumably you'd be OK if the stay-in-isearch behaviour was guarded by > an option (default off)? what the default would be. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-13 20:05 ` Richard Stallman @ 2011-09-13 21:04 ` Drew Adams 2011-09-13 22:52 ` Juri Linkov 0 siblings, 1 reply; 59+ messages in thread From: Drew Adams @ 2011-09-13 21:04 UTC (permalink / raw) To: rms, 'Alan Mackenzie'; +Cc: emacs-devel > I don't think there will be any inconvenience at all. > Unless the user sets the option, isearch will behave > exactly as it has done. > > If the default is the current behavior, I guess the other > option can't hurt. As a famous person is wont to say, why not poll the users about the default behavior? We can at least discuss it here. (But the important thing is of course to give users the option.) Unlike Richard, I am in favor of passing `C-u' through (e.g. to a command on `isearch-mode-map') by default, that is, _not_ making it exit Isearch. Yes, that would be a change from past behavior. It would have the advantage that a library can bind a command in `isearch-mode-map', and its users need not customize the new Isearch option in order to let that command receive `C-u' during Isearch. They would not need to customize anything - the command/key would just work as advertised, including wrt a prefix arg. Users of such a library/command have presumably already made the choice to use it. Why should the library have to add to the command's doc that if you want to use a prefix argument with it (in Isearch) then you have to customize option `isearch-blah'? Where else do we not allow a command on a keymap to see a prefix arg used with its key? Why should this not be the default behavior for Isearch, too? To me, this is all the more important because, as some have pointed out in the past, `isearch-mode-map' is already pretty full. Letting a command bound in that map use a prefix arg has the effect of putting multiple commands on the same key, distinguished by the prefix arg. That's a good thing. I suspected from the beginning that Richard might want `C-u' to exit Isearch (he has indicated before that he generally likes Control keys to exit), which is why I proposed making the behavior fix optional. Until Richard spoke up, my impression was that the consensus of those speaking about the issue seemed to be to let `C-u' pass through (not exit Isearch), by default. Maybe, maybe not. At any rate, Alan's first patch presumably tried to implement that behavior (without any user choice), but when he added the option in his second patch, he made the default behavior exit Isearch. It should still be an open question, so far, what the default behavior will be. The only arguments I've seen are (a) what I say above versus (b) tradition (no change in the default behavior). That is essentially (a) providing consistency with other keymaps versus (a) keeping the same inconsistency we've enjoyed in the past. Any other arguments wrt the default value? ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-13 21:04 ` Drew Adams @ 2011-09-13 22:52 ` Juri Linkov 2011-09-14 0:32 ` Daniel Colascione 0 siblings, 1 reply; 59+ messages in thread From: Juri Linkov @ 2011-09-13 22:52 UTC (permalink / raw) To: Drew Adams; +Cc: 'Alan Mackenzie', rms, emacs-devel > Any other arguments wrt the default value? Another argument for not exiting isearch with C-u by default is that some isearch commands accept the C-u argument and change their behavior accordingly depending on `current-prefix-arg' like `isearch-yank-char', `isearch-del-char', `isearch-query-replace', `isearch-query-replace-regexp', `isearch-occur', but currently users can't use C-u to access their full functionality without customizing `isearch-allow-scroll' to t. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-13 22:52 ` Juri Linkov @ 2011-09-14 0:32 ` Daniel Colascione 2011-09-14 0:41 ` Drew Adams 0 siblings, 1 reply; 59+ messages in thread From: Daniel Colascione @ 2011-09-14 0:32 UTC (permalink / raw) To: Juri Linkov; +Cc: 'Alan Mackenzie', rms, Drew Adams, emacs-devel [-- Attachment #1: Type: text/plain, Size: 805 bytes --] On 9/13/2011 3:52 PM, Juri Linkov wrote: >> Any other arguments wrt the default value? > > Another argument for not exiting isearch with C-u by default > is that some isearch commands accept the C-u argument and change > their behavior accordingly depending on `current-prefix-arg' like > `isearch-yank-char', `isearch-del-char', `isearch-query-replace', > `isearch-query-replace-regexp', `isearch-occur', but currently users > can't use C-u to access their full functionality without customizing > `isearch-allow-scroll' to t. > Also, there are plenty of ways to exit isearch other than C-u. I can't remember ever using C-u to exit isearch, in fact, and if the prefix argument is still applied to any command that _does_ exit isearch, I see no problem changing the default behavior. [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 258 bytes --] ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-14 0:32 ` Daniel Colascione @ 2011-09-14 0:41 ` Drew Adams 2011-09-14 14:10 ` Richard Stallman 0 siblings, 1 reply; 59+ messages in thread From: Drew Adams @ 2011-09-14 0:41 UTC (permalink / raw) To: 'Daniel Colascione', 'Juri Linkov' Cc: 'Alan Mackenzie', rms, emacs-devel > Also, there are plenty of ways to exit isearch other than C-u. I can't > remember ever using C-u to exit isearch, in fact, and if the prefix > argument is still applied to any command that _does_ exit > isearch, Yes, it is. > I see no problem changing the default behavior. Good to hear. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-14 0:41 ` Drew Adams @ 2011-09-14 14:10 ` Richard Stallman 2011-09-14 14:35 ` PJ Weisberg 2011-09-14 14:44 ` Drew Adams 0 siblings, 2 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-14 14:10 UTC (permalink / raw) To: Drew Adams; +Cc: juri, acm, dan.colascione, emacs-devel It is not an issue of how many "ways to exit isearch" there are. It is an issue of how many commands you need to remember WON'T exit the search. The idea of isearch is that control characters exit, except for a short list of a few. But that list has been growing. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-14 14:10 ` Richard Stallman @ 2011-09-14 14:35 ` PJ Weisberg 2011-09-15 4:11 ` Richard Stallman 2011-09-14 14:44 ` Drew Adams 1 sibling, 1 reply; 59+ messages in thread From: PJ Weisberg @ 2011-09-14 14:35 UTC (permalink / raw) Cc: emacs-devel@gnu.org [-- Attachment #1: Type: text/plain, Size: 509 bytes --] On Wednesday, September 14, 2011, Richard Stallman <rms@gnu.org> wrote: > It is not an issue of how many "ways to exit isearch" there are. It > is an issue of how many commands you need to remember WON'T exit the > search. The idea of isearch is that control characters exit, except > for a short list of a few. But that list has been growing. But does it make sense to think of C-u as a command in itself? It's *always* used in conjunction with another command, which may exit isearch or not. -- -PJ [-- Attachment #2: Type: text/html, Size: 617 bytes --] ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-14 14:35 ` PJ Weisberg @ 2011-09-15 4:11 ` Richard Stallman 0 siblings, 0 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-15 4:11 UTC (permalink / raw) To: PJ Weisberg; +Cc: emacs-devel But does it make sense to think of C-u as a command in itself? It's *always* used in conjunction with another command, which may exit isearch or not. It's a character you can type, which can either exit isearch or not. I think we already have too many characters that have a special meaning in Isearch. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-14 14:10 ` Richard Stallman 2011-09-14 14:35 ` PJ Weisberg @ 2011-09-14 14:44 ` Drew Adams 2011-09-18 2:52 ` Richard Stallman 1 sibling, 1 reply; 59+ messages in thread From: Drew Adams @ 2011-09-14 14:44 UTC (permalink / raw) To: rms; +Cc: juri, acm, dan.colascione, emacs-devel > It is an issue of how many commands you need to remember > WON'T exit the search. That there are many commands bound to keys in Isearch is a plus, not a minus - they are there to make Isearch more useful. Yes, as in Emacs generally, more key bindings can mean more remembering. That's what `C-s C-h' is for. > The idea of isearch _The idea of isearch_, or just one of several, possibly competing goals? > is that control characters exit, except > for a short list of a few. But that list has been growing. That just means that you can do more in Isearch - a good thing. Yes, having more key bindings means a potential downside of further taxing a user's memory. Tradeoff. No different from any other mode (or pseudo-mode - Isearch is essentially modal) that binds keys. At any rate, this feature is not about adding any command/key bindings to the Isearch default map. It is about treating Isearch normally wrt a prefix arg. And you will be able to opt out easily. Don't you wish you could opt out just as easily for all the other control keys that no longer exit Isearch? ;-) At least here all you have to do is set an option value. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-14 14:44 ` Drew Adams @ 2011-09-18 2:52 ` Richard Stallman 2011-09-19 19:08 ` chad 0 siblings, 1 reply; 59+ messages in thread From: Richard Stallman @ 2011-09-18 2:52 UTC (permalink / raw) To: Drew Adams; +Cc: juri, acm, dan.colascione, emacs-devel That there are many commands bound to keys in Isearch is a plus, not a minus - they are there to make Isearch more useful. Yes, as in Emacs generally, more key bindings can mean more remembering. That's what `C-s C-h' is for. I think you've missed the crucial point about special Isearch commands. With ordinary Emacs commands, if you don't know about them and you never use them, they do not affect you. Thus, there is no drawback to having thousands of them. However, when a control character is special in Isearch and you don't know it, it will bite you. You will type it while in an Isearch, expecting it to have its usual meaning, and it will do something else instead. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-18 2:52 ` Richard Stallman @ 2011-09-19 19:08 ` chad 2011-09-20 15:16 ` Richard Stallman 0 siblings, 1 reply; 59+ messages in thread From: chad @ 2011-09-19 19:08 UTC (permalink / raw) To: rms; +Cc: juri, acm, dan.colascione, Drew Adams, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1036 bytes --] On Sep 17, 2011, at 7:52 PM, Richard Stallman wrote: > > I think you've missed the crucial point about special Isearch commands. > > With ordinary Emacs commands, if you don't know about them and you never > use them, they do not affect you. Thus, there is no drawback to having > thousands of them. > > However, when a control character is special in Isearch and you don't > know it, it will bite you. You will type it while in an Isearch, > expecting it to have its usual meaning, and it will do something else > instead. Do you think the usual meaning of C-u is ``exit the modal thing I'm doing now''? The only time I've ever wanted to use C-u in isearch, it either preceded a command that would have exited isearch on its own, or I wanted to isearch for 6 `-'s, and I did not want it to exit isearch (and was confused when it did). I don't see how a ``user expectation'' argument will ever support making C-u exit isearch. If it's just a matter of a learned interaction, that's different. I hope that helps, *Chad [-- Attachment #2: Type: text/html, Size: 1523 bytes --] ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-19 19:08 ` chad @ 2011-09-20 15:16 ` Richard Stallman 2011-09-20 19:17 ` Michael Welsh Duggan 0 siblings, 1 reply; 59+ messages in thread From: Richard Stallman @ 2011-09-20 15:16 UTC (permalink / raw) To: chad; +Cc: juri, acm, dan.colascione, drew.adams, emacs-devel > However, when a control character is special in Isearch and you don't > know it, it will bite you. You will type it while in an Isearch, > expecting it to have its usual meaning, and it will do something else > instead. Do you think the usual meaning of C-u is ``exit the modal thing I'm doing now''? Please don't attack straw men. Emacs normally doesn't even have such "modal things" anyway. What it normally has is major modes that are specified in a buffer. It is not good that we are turning Isearch into something of that nature by adding so many commands that are special in it. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-20 15:16 ` Richard Stallman @ 2011-09-20 19:17 ` Michael Welsh Duggan 2011-09-20 19:59 ` Dani Moncayo 0 siblings, 1 reply; 59+ messages in thread From: Michael Welsh Duggan @ 2011-09-20 19:17 UTC (permalink / raw) To: rms; +Cc: dan.colascione, emacs-devel, juri, acm, chad, drew.adams Richard Stallman <rms@gnu.org> writes: > > However, when a control character is special in Isearch and you don't > > know it, it will bite you. You will type it while in an Isearch, > > expecting it to have its usual meaning, and it will do something else > > instead. > > Do you think the usual meaning of C-u is ``exit the modal thing I'm > doing now''? > > Please don't attack straw men. Emacs normally doesn't even have such > "modal things" anyway. What it normally has is major modes that are > specified in a buffer. > > It is not good that we are turning Isearch into something of that > nature by adding so many commands that are special in it. Since C-u is always a prefix character, would it make sense to you for it not to quit isearch if the character that follows a C-u opt/number prefix is a key sequence that is currently in use by isearch, and for it to quit Isearch and pass the prefix on to the non-isearch command otherwise? In this case, `C-u C-n' would exit isearch and move down 4 lines, whereas `C-u n' would add four "n"s to the current search string. -- Michael Welsh Duggan (md5i@md5i.com) ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-20 19:17 ` Michael Welsh Duggan @ 2011-09-20 19:59 ` Dani Moncayo 2011-09-21 1:22 ` Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 59+ messages in thread From: Dani Moncayo @ 2011-09-20 19:59 UTC (permalink / raw) To: Michael Welsh Duggan Cc: dan.colascione, rms, emacs-devel, juri, acm, chad, drew.adams > Since C-u is always a prefix character, would it make sense to you for > it not to quit isearch if the character that follows a C-u opt/number > prefix is a key sequence that is currently in use by isearch, and for it > to quit Isearch and pass the prefix on to the non-isearch command > otherwise? > > In this case, `C-u C-n' would exit isearch and move down 4 lines, whereas > `C-u n' would add four "n"s to the current search string. FWIW: Several people have expressed this idea, with which I agree. C-u should do nothing by itself (and that includes not exiting Isearch, of course). Its only effect should be to provide a prefix argument to the next command, to extend its behavior. I hope it helps. -- Dani Moncayo ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-20 19:59 ` Dani Moncayo @ 2011-09-21 1:22 ` Stefan Monnier 2011-09-21 14:51 ` Richard Stallman 2011-09-21 9:04 ` Alan Mackenzie 2011-09-21 14:50 ` Richard Stallman 2 siblings, 1 reply; 59+ messages in thread From: Stefan Monnier @ 2011-09-21 1:22 UTC (permalink / raw) To: Dani Moncayo Cc: Michael Welsh Duggan, dan.colascione, rms, emacs-devel, juri, acm, chad, drew.adams > FWIW: Several people have expressed this idea, with which I agree. > C-u should do nothing by itself (and that includes not exiting > Isearch, of course). Its only effect should be to provide a prefix > argument to the next command, to extend its behavior. I tend to agree. Stefan ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 1:22 ` Stefan Monnier @ 2011-09-21 14:51 ` Richard Stallman 2011-09-21 15:01 ` Dani Moncayo ` (2 more replies) 0 siblings, 3 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-21 14:51 UTC (permalink / raw) To: Stefan Monnier Cc: md5i, dan.colascione, emacs-devel, juri, dmoncayo, acm, yandros, drew.adams > FWIW: Several people have expressed this idea, with which I agree. > C-u should do nothing by itself (and that includes not exiting > Isearch, of course). Its only effect should be to provide a prefix > argument to the next command, to extend its behavior. I tend to agree. This reasoning is based on thinking of Isearch as a kind of a mode, but that's exactly what we should avoid. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 14:51 ` Richard Stallman @ 2011-09-21 15:01 ` Dani Moncayo 2011-09-21 15:10 ` Drew Adams 2011-09-21 16:35 ` Stephen J. Turnbull 2 siblings, 0 replies; 59+ messages in thread From: Dani Moncayo @ 2011-09-21 15:01 UTC (permalink / raw) To: rms Cc: md5i, dan.colascione, emacs-devel, juri, Stefan Monnier, acm, yandros, drew.adams Hi Richard, > > FWIW: Several people have expressed this idea, with which I agree. > > C-u should do nothing by itself (and that includes not exiting > > Isearch, of course). Its only effect should be to provide a prefix > > argument to the next command, to extend its behavior. > > I tend to agree. > > This reasoning is based on thinking of Isearch as a kind of a mode, > but that's exactly what we should avoid. My reasoning goes beyond Isearch. It is a way of thinking about C-u as a universal command which always does exactly the same thing: Collect a numeric prefix argument for the next command to process, and do nothing beyond that. -- Dani Moncayo ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 14:51 ` Richard Stallman 2011-09-21 15:01 ` Dani Moncayo @ 2011-09-21 15:10 ` Drew Adams 2011-09-21 16:35 ` Stephen J. Turnbull 2 siblings, 0 replies; 59+ messages in thread From: Drew Adams @ 2011-09-21 15:10 UTC (permalink / raw) To: rms, 'Stefan Monnier' Cc: md5i, dan.colascione, emacs-devel, juri, dmoncayo, acm, yandros > > FWIW: Several people have expressed this idea, with > > which I agree. C-u should do nothing by itself (and > > that includes not exiting Isearch, of course). Its > > only effect should be to provide a prefix > > argument to the next command, to extend its behavior. > > I tend to agree. > > This reasoning is based on thinking of Isearch as a kind of a mode, > but that's exactly what we should avoid. What we "should avoid", if anything, is preventing a command bound in `isearch-mode-map' from receiving a prefix arg, i.e., making `C-u' always exit Isearch. Let's not get into how modal Isearch really is or should be - it's not necessary (or very useful) here. You would agree that it is possible for out-of-the-box Emacs, and for users, to bind commands to keys in `isearch-mode-map'. Whether Isearch is or should be truly modal is not as important as letting those commands act normally - including receiving a prefix arg. You can bind keys in the map to commands that exit Isearch, and you can bind keys to commands that do not choose to exit Isearch - no problem. But why should a command bound in the Isearch keymap not even receive its prefix arg and decide its own fate? You have your preference, and we can agree to disagree about this. You want `C-u' to exit Isearch and I do not want it to. I want to let the command it precedes ("prefix") decide, as always in Emacs. Some might agree with you; others might agree with me. More importantly, I think you have already agreed to giving _users_ the choice, via an option. Let's decide which behavior should be the default (have `C-u' exit Isearch or not), and let's add an option to let users override that default behavior. End of story. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 14:51 ` Richard Stallman 2011-09-21 15:01 ` Dani Moncayo 2011-09-21 15:10 ` Drew Adams @ 2011-09-21 16:35 ` Stephen J. Turnbull [not found] ` <E1R6Tii-0000zy-Jw@f!! encepost.gnu.org> 2011-09-21 20:48 ` Richard Stallman 2 siblings, 2 replies; 59+ messages in thread From: Stephen J. Turnbull @ 2011-09-21 16:35 UTC (permalink / raw) To: rms Cc: md5i, dan.colascione, emacs-devel, juri, Stefan Monnier, dmoncayo, acm, yandros, drew.adams Richard Stallman writes: > > FWIW: Several people have expressed this idea, with which I agree. > > C-u should do nothing by itself (and that includes not exiting > > Isearch, of course). Its only effect should be to provide a prefix > > argument to the next command, to extend its behavior. > > I tend to agree. > > This reasoning is based on thinking of Isearch as a kind of a mode, > but that's exactly what we should avoid. Why? That's like saying, "thinking of Shovel as a kind of a digging implement" is exactly what we should avoid! I am not saying we should have gratuitious modality in Emacs. I'm saying that if we have unavoidable modality, we should not kid ourselves. In the present Isearch implementation, I see no way to disabuse users of the naive intuition that one "enters" and "exits" Isearch. The minibuffer activates and deactivates, and so does an idiosyncratic form of highlighting in the buffer. The behavior of the minibuffer is itself changed, since the cursor does *not* jump to the minibuffer as it normally does. Normally self-inserting characters become motion commands. If that last is not modal, what is? In any case, my own intuition happens to be the opposite of yours. I see the *current* behavior of C-u as being very much affected by the modality of Isearch, and it bothers me. When I type C-u in any other situation, Emacs quietly waits until I type something else. It does not immediately make any perceptible change to the Emacs environment. But when using Isearch, C-u visibly disturbs state, ie, the state of the search. From this point of view, the whole point of Alan's changes (and of Drew's suggestion as well) is to *reduce* the modality of isearch. With Alan's option *on*, scrolling commands now work as they do elsewhere in Emacs: the visible portion of the buffer at hand changes, without disturbing the state of the buffer or the search. With Drew's option *on*, C-u now works as it does elsewhere in Emacs, providing additional context to the next command, without disturbing the state of the buffer or the search. It seems to me that both of these changes make Emacs as a whole less modal, not more so. And I agree that making Emacs less modal is a good thing. As for the other bindings in isearch-mode, I agree that even the relatively few we have now do increase the modality of Isearch, and I'm of mixed feelings about almost all of them (especially C-w and C-y, which are both most useful to me personally, but also require the most effort of me to overcome muscle memory). However, I see such bindings as a very different issue from the more subtle changes of which Alan and Drew wish to avail themselves. ^ permalink raw reply [flat|nested] 59+ messages in thread
[parent not found: <E1R6Tii-0000zy-Jw@f!! encepost.gnu.org>]
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 16:35 ` Stephen J. Turnbull [not found] ` <E1R6Tii-0000zy-Jw@f!! encepost.gnu.org> @ 2011-09-21 20:48 ` Richard Stallman 2011-09-21 21:13 ` Drew Adams ` (2 more replies) 1 sibling, 3 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-21 20:48 UTC (permalink / raw) To: Stephen J. Turnbull Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, acm, yandros, drew.adams > This reasoning is based on thinking of Isearch as a kind of a mode, > but that's exactly what we should avoid. Why? That's like saying, "thinking of Shovel as a kind of a digging implement" is exactly what we should avoid! "Digging implement" describes a purpose. The purpose of Isearch is searching; if you called it a "searching feature", that would be undeniable, and the analogy to "digging implement" would be valid. Whether something is a mode is a question about how people understand its interface. Isearch is not supposed to be a mode. It is supposed to be a command which searches for the printing character string you type, and you can edit the search string in simple limited ways. Unrelated editing commands end searcch and do their normal editing. The only control characters that originally didn't exit the Isearch were C-r and C-s -- which are the commands to enter Isearch. Then I added M-y, which was ok because M-y would always be an error if it exited an Isearch (since the previous command was not a yank). But then people started making other commands special, destroying the clear simplicity. As a result of those, Isearch is now more complex and people start to think of it as a mode. Thus, they propose changes that make it more like a mode, and make it even more complex, and even less of a command that searches for the printing character string you type. >From this point of view, the whole point of Alan's changes (and of Drew's suggestion as well) is to *reduce* the modality of isearch. With Alan's option *on*, scrolling commands now work as they do elsewhere in Emacs: the visible portion of the buffer at hand changes, without disturbing the state of the buffer or the search. I never noticed Alan's proposal, but now that I see what it is, I am against it. It is very common to use C-v to exit an Isearch. This change would be a painful surprise. The idea that being in a search is a state that commands "shouldn't disturb" is the result of thinking of it as a mode. It is normal for editing commands to stop searching and edit instead. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 20:48 ` Richard Stallman @ 2011-09-21 21:13 ` Drew Adams 2011-09-22 13:58 ` Richard Stallman 2011-10-08 21:13 ` Drew Adams 2011-09-22 5:33 ` Stephen J. Turnbull 2011-09-22 10:35 ` Alan Mackenzie 2 siblings, 2 replies; 59+ messages in thread From: Drew Adams @ 2011-09-21 21:13 UTC (permalink / raw) To: rms, 'Stephen J. Turnbull' Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, acm, yandros > From this point of view, the whole point of Alan's > changes (and of Drew's suggestion as well) is to *reduce* > the modality of isearch. With Alan's option *on*, scrolling > commands now work as they do elsewhere in Emacs: the visible > portion of the buffer at hand changes, without disturbing the > state of the buffer or the search. > > I never noticed Alan's proposal, Alan's "proposal" wrt scrolling is not a proposal. It has been part of Emacs since 2003/2/24, according to a comment in isearch.el. Blame its admission on the Emacs maintainer back then, I guess. ;-) > but now that I see what it is, I am > against it. It is very common to use C-v to exit an Isearch. This > change would be a painful surprise. It is a user _option_, and by default the behavior is the one you prefer. (FWIW, I prefer the same behavior as you for this: `C-v' exits Isearch.) > The idea that being in a search is a state that commands "shouldn't > disturb" is the result of thinking of it as a mode. It is normal > for editing commands to stop searching and edit instead. And editing commands are perfectly free to do that. No one says that commands "shouldn't disturb" searching. And commands do so and will continue to do so, even with the new proposal wrt `C-u'. Such commands are not bound to keys in `isearch-mode-map', so they will exit Isearch (and take their `C-u' with them. ;-)). This is about creating a user _option_ to allow commands that are bound to keys in `isearch-mode-map' to receive the prefix arg that a user tries to give them. That's all. And you have already agreed to adding this option. What remains to decide is the default value of the option. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 21:13 ` Drew Adams @ 2011-09-22 13:58 ` Richard Stallman 2011-10-08 21:13 ` Drew Adams 1 sibling, 0 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-22 13:58 UTC (permalink / raw) To: Drew Adams Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, acm, stephen, yandros Alan's "proposal" wrt scrolling is not a proposal. It has been part of Emacs since 2003/2/24, according to a comment in isearch.el. Blame its admission on the Emacs maintainer back then, I guess. ;-) It is a user _option_, and by default the behavior is the one you prefer. (FWIW, I prefer the same behavior as you for this: `C-v' exits Isearch.) Since the default was not change, I have nothing against it. I may have been the one to approve it, at that period. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 21:13 ` Drew Adams 2011-09-22 13:58 ` Richard Stallman @ 2011-10-08 21:13 ` Drew Adams 1 sibling, 0 replies; 59+ messages in thread From: Drew Adams @ 2011-10-08 21:13 UTC (permalink / raw) To: rms, 'Stephen J. Turnbull' Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, acm, yandros ping > This is about creating a user _option_ to allow commands that > are bound to keys in `isearch-mode-map' to receive the prefix > arg that a user tries to give them. That's all. > > And you [RMS] have already agreed to adding this option. > What remains to decide is the default value of the option. Everyone in the thread seems to have agreed that the option should be added. Alan provided patch for it. Can we have this done in Emacs 24 please? If you don't change the default behavior there is no impact on users who do not customize the option, and the code is essentially the same (no surprises). ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 20:48 ` Richard Stallman 2011-09-21 21:13 ` Drew Adams @ 2011-09-22 5:33 ` Stephen J. Turnbull 2011-09-22 13:59 ` Richard Stallman 2011-09-22 10:35 ` Alan Mackenzie 2 siblings, 1 reply; 59+ messages in thread From: Stephen J. Turnbull @ 2011-09-22 5:33 UTC (permalink / raw) To: rms Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, acm, yandros, drew.adams Richard Stallman writes: > Whether something is a mode is a question about how people understand > its interface. Indeed. Guess what? My fingers use isearch as you originally intended; I don't use *any* non-printing characters to invoke isearch- specific commands except C-s, C-r, BKSP, and RET (you missed those last two, I think they have always been available with isearch- specific behavior). Nevertheless, I *understand* isearch as modal. > It is normal for editing commands to stop searching and edit > instead. You made an exception for BKSP. That one bothers me a lot. Much of the time, it "should" stop searching and edit the buffer, but it doesn't. Of course, there's no way for Emacs to know which I meant, so I have to accept that modality. OTOH, it would be abnormal for RET to stop searching and self-insert; its current meaning of "accept the search (= just stay at the found text)" is just right. Those two keystrokes alone are enough to evoke a perception of modality in me. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-22 5:33 ` Stephen J. Turnbull @ 2011-09-22 13:59 ` Richard Stallman 0 siblings, 0 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-22 13:59 UTC (permalink / raw) To: Stephen J. Turnbull Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, acm, yandros, drew.adams Indeed. Guess what? My fingers use isearch as you originally intended; I don't use *any* non-printing characters to invoke isearch- specific commands except C-s, C-r, BKSP, and RET (you missed those last two, I think they have always been available with isearch- specific behavior). RET was originally entered into the search string, and that was quite useful. DEL was the only character that edited the search string, since many programs use DEL to do that. ESC was the original way to explicitly exit without doing anything else. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 20:48 ` Richard Stallman 2011-09-21 21:13 ` Drew Adams 2011-09-22 5:33 ` Stephen J. Turnbull @ 2011-09-22 10:35 ` Alan Mackenzie 2011-09-22 21:44 ` Richard Stallman 2 siblings, 1 reply; 59+ messages in thread From: Alan Mackenzie @ 2011-09-22 10:35 UTC (permalink / raw) To: Richard Stallman Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, Stephen J. Turnbull, yandros, drew.adams Hi, Richard. On Wed, Sep 21, 2011 at 04:48:40PM -0400, Richard Stallman wrote: > Whether something is a mode is a question about how people understand > its interface. > Isearch is not supposed to be a mode. It is supposed to be a command > which searches for the printing character string you type, and you can > edit the search string in simple limited ways. Unrelated editing > commands end searcch and do their normal editing. > The only control characters that originally didn't exit the Isearch > were C-r and C-s -- which are the commands to enter Isearch. Yes. But such a "feature pure" Isearch wouldn't serve users' needs very well, particularly in such a rich environment as Emacs. > Then I added M-y, which was ok because M-y would always be an error if > it exited an Isearch (since the previous command was not a yank). Ah. _NOW_ I understand why `isearch-yank-kill' is on M-y. :-) (At least, was on M-y.) > But then people started making other commands special, destroying the > clear simplicity. As a result of those, Isearch is now more complex > and people start to think of it as a mode. Thus, they propose changes > that make it more like a mode, and make it even more complex, and even > less of a command that searches for the printing character string you > type. I use Isearching almost constantly, and expect most users do too. I'd be unhappy and less productive if its many features (I think I use most of them) were not there. In fact, I'd write them if they weren't. ;-) > >From this point of view, the whole point of Alan's changes (and of > Drew's suggestion as well) is to *reduce* the modality of isearch. > With Alan's option *on*, scrolling commands now work as they do > elsewhere in Emacs: the visible portion of the buffer at hand > changes, without disturbing the state of the buffer or the search. > I never noticed Alan's proposal, but now that I see what it is, I am > against it. With all due respect, what you said back in 2003 (on the 1st March) was: "I have no objections to it if it is disabled by default.". Then, I thought it should have been enabled by default. Now I see that it shouldn't be. > It is very common to use C-v to exit an Isearch. This change would be > a painful surprise. It would. That is why it needs an option setting for this to happen. I think that, likewise, `isearch-allow-prefix' should be nil by default. > The idea that being in a search is a state that commands "shouldn't > disturb" is the result of thinking of it as a mode. It is normal > for editing commands to stop searching and edit instead. Is scrolling "editing" here? I would have said no, since it doesn't change the buffer and doesn't move point. > -- > Dr Richard Stallman -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-22 10:35 ` Alan Mackenzie @ 2011-09-22 21:44 ` Richard Stallman 2011-09-22 22:23 ` PJ Weisberg 0 siblings, 1 reply; 59+ messages in thread From: Richard Stallman @ 2011-09-22 21:44 UTC (permalink / raw) To: Alan Mackenzie Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, stephen, yandros, drew.adams > The idea that being in a search is a state that commands "shouldn't > disturb" is the result of thinking of it as a mode. It is normal > for editing commands to stop searching and edit instead. Is scrolling "editing" here? I would have said no, since it doesn't change the buffer and doesn't move point. You're making a distinction I didn't intend, so we are talking past each other. When I said "editing commands" I meant "anything other than inserting text." The rule is that they exit Isearch. There have always been exceptions, but they were few. The more exceptions there are, the harder it is to remember how to use Isearch. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-22 21:44 ` Richard Stallman @ 2011-09-22 22:23 ` PJ Weisberg 2011-09-23 12:30 ` Richard Stallman 0 siblings, 1 reply; 59+ messages in thread From: PJ Weisberg @ 2011-09-22 22:23 UTC (permalink / raw) To: rms Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, Alan Mackenzie, stephen, yandros, drew.adams On Thu, Sep 22, 2011 at 2:44 PM, Richard Stallman <rms@gnu.org> wrote: > > The idea that being in a search is a state that commands "shouldn't > > disturb" is the result of thinking of it as a mode. It is normal > > for editing commands to stop searching and edit instead. > > Is scrolling "editing" here? I would have said no, since it doesn't > change the buffer and doesn't move point. > > You're making a distinction I didn't intend, so we are talking past > each other. > > When I said "editing commands" I meant "anything other than inserting > text." The rule is that they exit Isearch. There have always been > exceptions, but they were few. > > The more exceptions there are, the harder it is to remember how to use > Isearch. Are you arguing that isearch non-exiting commands shouldn't exist, or that they shouldn't be able to take a prefix argument? The former makes more sense, but having C-u exit isearch only accomplishes the latter. -PJ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-22 22:23 ` PJ Weisberg @ 2011-09-23 12:30 ` Richard Stallman 0 siblings, 0 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-23 12:30 UTC (permalink / raw) To: PJ Weisberg Cc: md5i, dan.colascione, emacs-devel, juri, monnier, dmoncayo, acm, stephen, yandros, drew.adams Are you arguing that isearch non-exiting commands shouldn't exist, or that they shouldn't be able to take a prefix argument? Neither. I am saying that the non-printing characters that are exceptions to the rule should be as few as possible. (The rule is that they exit Isearch and then execute normally.) I think the existing exceptions are already so numerous as to constitute a nuisance. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-20 19:59 ` Dani Moncayo 2011-09-21 1:22 ` Stefan Monnier @ 2011-09-21 9:04 ` Alan Mackenzie 2011-09-21 9:27 ` Dani Moncayo ` (2 more replies) 2011-09-21 14:50 ` Richard Stallman 2 siblings, 3 replies; 59+ messages in thread From: Alan Mackenzie @ 2011-09-21 9:04 UTC (permalink / raw) To: Dani Moncayo Cc: Michael Welsh Duggan, dan.colascione, rms, emacs-devel, juri, chad, drew.adams Hi, everybody. On Tue, Sep 20, 2011 at 09:59:22PM +0200, Dani Moncayo wrote: > > Since C-u is always a prefix character, would it make sense to you for > > it not to quit isearch if the character that follows a C-u opt/number > > prefix is a key sequence that is currently in use by isearch, and for it > > to quit Isearch and pass the prefix on to the non-isearch command > > otherwise? > > In this case, `C-u C-n' would exit isearch and move down 4 lines, whereas > > `C-u n' would add four "n"s to the current search string. Since when has adding four identical characters into a search string been useful? Maybe "))))" whilst programming elisp, and there is a (long) place name in Wales with four consecutive 'l's. But really? :-) > FWIW: Several people have expressed this idea, with which I agree. > C-u should do nothing by itself (and that includes not exiting > Isearch, of course). C-u is bound to a command, namely `universal-argument', and we do our users a disservice if we try to pretend otherwise. > Its only effect should be to provide a prefix argument to the next > command, to extend its behavior. No. When in isearch, it first exits isearch and then generates the prefix argument (4). It exits isearch like (almost) any other non-character keysequence does. What is now going down is that C-u will _sometimes_ exit isearch, sometimes not. This is going to leave a squidgy uncomfortable feeling in the stomach of anybody who thinks about it, yet hasn't explicitly enabled this behaviour. isearch-allow-scroll isn't enabled by default, so why should isearch-enable-prefix, which is almost (but not quite) as radical a departure from classical Emacs, be? The anomaly we're stumbling over here is the (almost?) unique status of isearch as a modal (in the vi sense) behaviour in Emacs. > I hope it helps. > -- > Dani Moncayo -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 9:04 ` Alan Mackenzie @ 2011-09-21 9:27 ` Dani Moncayo 2011-09-21 9:29 ` chad 2011-09-21 13:22 ` Drew Adams 2 siblings, 0 replies; 59+ messages in thread From: Dani Moncayo @ 2011-09-21 9:27 UTC (permalink / raw) To: Alan Mackenzie Cc: Michael Welsh Duggan, dan.colascione, rms, emacs-devel, juri, chad, drew.adams >> FWIW: Several people have expressed this idea, with which I agree. >> C-u should do nothing by itself (and that includes not exiting >> Isearch, of course). > > C-u is bound to a command, namely `universal-argument', and we do our > users a disservice if we try to pretend otherwise. I don't pretend otherwise, at all. What you say does not conflict with my point, AFAIU. >> Its only effect should be to provide a prefix argument to the next >> command, to extend its behavior. > > No. When in isearch, it first exits isearch and then generates the > prefix argument (4). It exits isearch like (almost) any other > non-character keysequence does. I'm sorry, but I fail to see the need for C-u to do something (exit Isearch) prematurely. As I said, I would be much better to wait for the "real" command before deciding what to do. That makes a lot more sense to me. YMMV. -- Dani Moncayo ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 9:04 ` Alan Mackenzie 2011-09-21 9:27 ` Dani Moncayo @ 2011-09-21 9:29 ` chad 2011-09-21 13:22 ` Drew Adams 2 siblings, 0 replies; 59+ messages in thread From: chad @ 2011-09-21 9:29 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Emacs devel On Sep 21, 2011, at 2:04 AM, Alan Mackenzie wrote: > Hi, everybody. > > Since when has adding four identical characters into a search string been > useful? Maybe "))))" whilst programming elisp, and there is a (long) > place name in Wales with four consecutive 'l's. But really? :-) As I mentioned, my actual experience with emacs: I've tried to use it to isearch for strings of several `-' characters (which were basically record separators), and was surprised when C-u quit isearch. The case I mentioned uses 6 `-'s; the other cases I see (less frequently lately) use either 33 `-'s or 66 `;'s. I've never wanted C-u to quit isearch. Richard commented that special-casing C-u might turn isearch into a `modal thing' (my term). I think the majority of people believe that it has always been such a thing, and that is its primary value. Perhaps there are people who want to be able to exit isearch by inserting a number of identical characters at point, but it certainly seems strange to me (hardly surprising, since I already said I was unpleasantly surprised by it). I hope that helps, *Chad ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-21 9:04 ` Alan Mackenzie 2011-09-21 9:27 ` Dani Moncayo 2011-09-21 9:29 ` chad @ 2011-09-21 13:22 ` Drew Adams 2 siblings, 0 replies; 59+ messages in thread From: Drew Adams @ 2011-09-21 13:22 UTC (permalink / raw) To: 'Alan Mackenzie', 'Dani Moncayo' Cc: 'Michael Welsh Duggan', dan.colascione, rms, emacs-devel, juri, 'chad' AFAICT, we are all agreed with the proposal to put this under user control, by providing an option. Richard (and possibly others?) disagrees that the default value of the option should let `C-u' pass through - he prefers that the default value exit Isearch. But he has agreed with giving users the option. At this point, my concern is that we get the option into Emacs now, regardless of the default value. Can we please commit Alan's patch before the pretest? Use whatever default value you want, but let's please let users control this now. Thx. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-20 19:59 ` Dani Moncayo 2011-09-21 1:22 ` Stefan Monnier 2011-09-21 9:04 ` Alan Mackenzie @ 2011-09-21 14:50 ` Richard Stallman 2 siblings, 0 replies; 59+ messages in thread From: Richard Stallman @ 2011-09-21 14:50 UTC (permalink / raw) To: Dani Moncayo Cc: md5i, dan.colascione, emacs-devel, juri, acm, yandros, drew.adams > In this case, `C-u C-n' would exit isearch and move down 4 lines, whereas > `C-u n' would add four "n"s to the current search string. That would be useful once in a blue moon, and annoying more often. There are probably people who expect C-u n to exit the search and insert 4 n's. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use free telephony http://directory.fsf.org/category/tel/ ^ permalink raw reply [flat|nested] 59+ messages in thread
* RE: `isearch-allow-scroll' - a misnomer and a bad design 2011-09-12 2:46 ` Richard Stallman 2011-09-12 9:36 ` Alan Mackenzie @ 2011-09-12 14:59 ` Drew Adams 1 sibling, 0 replies; 59+ messages in thread From: Drew Adams @ 2011-09-12 14:59 UTC (permalink / raw) To: rms; +Cc: acm, emacs-devel RMS> I think C-u should exit isearch. Bingo. Exactly what I suspected: AM> Need it be an option? Why not just let C-u through no matter what? da> da> Dunno. That would probably be OK for me, but I can imagine RMS da> or others chiming in that they are used to having `C-u' da> immediately exit Isearch. Having an option means not disturbing da> the general, traditional behavior. So much for: st> it doesn't need to be a customization at first. Only st> once it appears that there are many users who do like the st> behavior, and many who don't, does it need to be a visible st> customization. RMS is not "many", but I think the point has been made. If we allow `C-u' pass-through then we should also allow users to turn it off. The next question is what the default value should be. I'd vote for pass-through by default, but I don't feel strongly about that. ^ permalink raw reply [flat|nested] 59+ messages in thread
end of thread, other threads:[~2011-10-08 21:13 UTC | newest] Thread overview: 59+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-09-09 20:38 `isearch-allow-scroll' - a misnomer and a bad design Drew Adams 2011-09-09 21:52 ` Alan Mackenzie 2011-09-09 23:07 ` Drew Adams 2011-09-10 0:58 ` Stefan Monnier 2011-09-10 7:48 ` Drew Adams 2011-09-10 11:28 ` Alan Mackenzie 2011-09-10 16:44 ` Drew Adams 2011-09-10 11:47 ` Juri Linkov 2011-09-10 12:13 ` Alan Mackenzie 2011-09-10 2:03 ` Stephen J. Turnbull 2011-09-10 11:10 ` Alan Mackenzie 2011-09-10 16:43 ` Drew Adams 2011-09-10 19:04 ` Alan Mackenzie 2011-09-10 20:22 ` PJ Weisberg 2011-09-10 23:06 ` Stephen J. Turnbull 2011-09-11 0:47 ` Drew Adams 2011-09-11 10:39 ` Alan Mackenzie 2011-09-11 16:54 ` Drew Adams 2011-09-11 17:30 ` Alan Mackenzie 2011-09-11 18:53 ` Drew Adams 2011-09-12 2:46 ` Richard Stallman 2011-09-12 9:36 ` Alan Mackenzie 2011-09-13 1:39 ` Richard Stallman 2011-09-13 14:27 ` Alan Mackenzie 2011-09-13 20:05 ` Richard Stallman 2011-09-13 21:04 ` Drew Adams 2011-09-13 22:52 ` Juri Linkov 2011-09-14 0:32 ` Daniel Colascione 2011-09-14 0:41 ` Drew Adams 2011-09-14 14:10 ` Richard Stallman 2011-09-14 14:35 ` PJ Weisberg 2011-09-15 4:11 ` Richard Stallman 2011-09-14 14:44 ` Drew Adams 2011-09-18 2:52 ` Richard Stallman 2011-09-19 19:08 ` chad 2011-09-20 15:16 ` Richard Stallman 2011-09-20 19:17 ` Michael Welsh Duggan 2011-09-20 19:59 ` Dani Moncayo 2011-09-21 1:22 ` Stefan Monnier 2011-09-21 14:51 ` Richard Stallman 2011-09-21 15:01 ` Dani Moncayo 2011-09-21 15:10 ` Drew Adams 2011-09-21 16:35 ` Stephen J. Turnbull [not found] ` <E1R6Tii-0000zy-Jw@f!! encepost.gnu.org> 2011-09-21 20:48 ` Richard Stallman 2011-09-21 21:13 ` Drew Adams 2011-09-22 13:58 ` Richard Stallman 2011-10-08 21:13 ` Drew Adams 2011-09-22 5:33 ` Stephen J. Turnbull 2011-09-22 13:59 ` Richard Stallman 2011-09-22 10:35 ` Alan Mackenzie 2011-09-22 21:44 ` Richard Stallman 2011-09-22 22:23 ` PJ Weisberg 2011-09-23 12:30 ` Richard Stallman 2011-09-21 9:04 ` Alan Mackenzie 2011-09-21 9:27 ` Dani Moncayo 2011-09-21 9:29 ` chad 2011-09-21 13:22 ` Drew Adams 2011-09-21 14:50 ` Richard Stallman 2011-09-12 14:59 ` Drew Adams
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).