>>> + (read-string >>> + prompt >>> + nil nil >>> + (if read-regexp-defaults-function >>> + (funcall read-regexp-defaults-function) >>> + (query-replace-read-from-suggestions)) >> Isn't it too strange that read-string uses the read-regexp function? >> Maybe better to add a new variable read-string-defaults-function. > > That sounds fine to me. > >> Then it could provide an option to use 'car' of >> query-replace-read-from-suggestions, and allow a custom function. > > ...less confident about this one, because read-regexp-defaults-function > doesn't do anything like that, right? It might be nice if the options > mirrored each other. > > But if it's too much of a bother right now, I could just add two > hand-written prompts with default to xref-find-references-and-replace, > without the fancy "arrow". It's not like the replacements history is going > to see too much use for this command. > > In the meantime, I think you should install your latest patch now (without > the xref.el part, since it doesn't work yet). After thinking more about this, I can't find a possible use for read-string-defaults-function, because every call of read-string provides own default value. Also using read-regexp-defaults-function in query-replace-read-from is not the right thing either - when the users already customized it for e.g. occur, it would be too unexpected when it will use a tag at point instead of from->to pairs in query-replace. Since query-replace is a very special command, the most uncontroversial thing to do for a conservative approach would be to add two specific variables (that later could be turned into options when needed):