Hi all, sorry, I was working on this last night , had the patch sorted, and then somehow my browser crashed and I couldn't get to my email. Apologies for all the delays. > Rewriting a whole new `key-translate-selection-function` function for > that is not significantly easier than rewriting a whole new > `key-translate-remove`, so I think this is firmly in the > overengineering > side of the camp. Fair enough, I've got rid of the defcustom. > You can't trust `get-text-property` here (especially since you don't > even force `completing-read` to `require-match`). > Instead you should do something like `key-parse`. Good spot. > In the case of `key-translate-remove` I don't expect the arg to be > a literal constant in the code, so "nice/uniform syntax to write the > argument value" shouldn't be a concern. 🙂 Nice, removing the defcustom makes the whole thing simpler anyway. The way it works now is that `key-select-translation' returns a string (which passes `key-valid-p'). I went with this because then it's very straightforward to pass the result to `key-translate' in `key-translate-remove'. The alternative would be to parse a key vector out of the string at the end of `key-select-translation', but then immediately convert this back into a string (a string like the one I went with in the end) in the interactive form of `key-translate-remove'. New patch attached. Hugo