Hello! :)

On Jan 11, 2022, at 10:42 PM, Dmitry Gutov <dgutov@yandex.ru> wrote:

Hi!

On 11.01.2022 09:45, Jon Eskin wrote:
Attached is a small patch adding command 'project-query-replace-at-point' to project.el. The command is designed to improve the ergonomics of making a project wide text replacement of a symbol at point.
Currently, if you want to make a project wide replacement of a symbol using project.el, the best options I've found are:

or
- Mark the symbol you wish to replace
- Save symbol to kill ring with 'kill-ring-save'

You don't need these two steps, do you? Just do the rest, and it should work.

- Place cursor on symbol and enter command 'project-find-regexp'
- Hit return at the next prompt to accept the default prompt
- Enter command 'xref-query-replace-in-results'
- Enter the replacement string and hit return

I agree it could use some more optimization still.

'project-query-replace-at-point' regex-quotes the symbol at point and then calls into the fileloop-initialize-replace function used by the existing project-query-replace-regexp command.
Replacing a symbol with 'project-query-replace-at-point' occurs as follows:
- Place cursor on symbol and enter command 'project-query-replace-at-point'
- Enter the replacement string and hit return
Let me know what you guys think. I haven't contributed before so please let me know if I'm doing anything incorrectly.

Sorry, yes, those two steps are not needed. My brain crossed a few wires.


If we're trying to improve project-query-replace-regexp, why not make it use the symbol at point by default?


I thought about the option of using symbol at point by default, but I noticed that the command currently uses the history variable. I wondered if some people were relying on its current behavior in a way that I didn’t anticipate (especially since I’m pretty new to all this). If so, it would be an annoying change to have to worry about whether the cursor is on a symbol when using a command you previously relied on. I wanted to try to put forth something possibly useful without breaking stuff.

You would use the same command, but would be able to press RET to have the default regexp (symbol at point) used as FROM. I don't have a patch yet, but it might be something that all callers of query-replace-read-args might benefit from.

Since I think I can understand what you’re suggesting, I would be happy to make an attempt at a patch to modify the callers of query-replace-read-args to default to a regexp quoted symbol-at-point. But no worries if you would rather have experienced eyes on it.


And you can actually do this right now:

- Enter command 'project-query-replace-regexp'
- Press M-n, having the symbol at point picked up as FROM, hit return
- Enter the replacement string and hit return

This is awesome! Did not know about that behavior, thank you for sharing!