Aloha everyone, Just for completeness, here's the final result, and it's much much better. In BBDB just 'i' a 'language' field for those correspondents with whom you correspond in whatever language, and then enter the input mode, like 'french-postfix'. As long as you're using message mode and BBDB completion, this works. If you use gnu-alias, initialize that before you get to the code below, as the message-setup-hook I add should be the last in the chain.
-- (defun rjn-change-lang-by-addressee () (interactive) (let ((addressee (message-fetch-field "To")) netaddr person langpref) (if addressee (setq netaddr (cadr (mail-extract-address-components addressee)))) (if netaddr (setq person (car (bbdb-search (bbdb-records) :mail netaddr)))) (if person (setq langpref (bbdb-record-field person 'language))) (if langpref (set-input-method langpref)))) (add-hook 'message-setup-hook 'rjn-change-lang-by-addressee t) (advice-add 'bbdb-complete-mail :after #'rjn-change-lang-by-addressee) -- This could but shouldn't be simplified with multiple let* assignments, as nil fields cause error messages to be emitted in some of the functions. The serial 'if' statements cause negligible additional run time. If 'langpref' is invalid, there's a message, and that's a good thing. -- Bob Newell Honolulu, Hawai`i * Via Gnus/BBDB/Org/Emacs/Linux * _______________________________________________ info-gnus-english mailing list info-gnus-english@gnu.org https://lists.gnu.org/mailman/listinfo/info-gnus-english