From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.emacs.gnus.user/18804 Path: news.gmane.org!.POSTED!not-for-mail From: Eric Abrahamsen Newsgroups: gmane.emacs.gnus.user Subject: Re: Changing language input method by addressee Date: Fri, 09 Mar 2018 15:15:16 +0800 Message-ID: <87vae5yb23.fsf@ericabrahamsen.net> References: <87lgf1vnkq.fsf@bobnewell.net> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1520579755 28280 195.159.176.226 (9 Mar 2018 07:15:55 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 9 Mar 2018 07:15:55 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) To: info-gnus-english@gnu.org Original-X-From: info-gnus-english-bounces+gegu-info-gnus-english=m.gmane.org@gnu.org Fri Mar 09 08:15:51 2018 Return-path: Envelope-to: gegu-info-gnus-english@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1euCFr-0007FJ-08 for gegu-info-gnus-english@m.gmane.org; Fri, 09 Mar 2018 08:15:51 +0100 Original-Received: from localhost ([::1]:43574 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1euCHt-0008Br-Ii for gegu-info-gnus-english@m.gmane.org; Fri, 09 Mar 2018 02:17:57 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:52263) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1euCHo-0008AC-GH for info-gnus-english@gnu.org; Fri, 09 Mar 2018 02:17:53 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1euCHj-0007Bc-F6 for info-gnus-english@gnu.org; Fri, 09 Mar 2018 02:17:52 -0500 Original-Received: from [195.159.176.226] (port=59190 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1euCHj-0007An-8G for info-gnus-english@gnu.org; Fri, 09 Mar 2018 02:17:47 -0500 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1euCFd-00070F-Pf for info-gnus-english@gnu.org; Fri, 09 Mar 2018 08:15:37 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 56 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:CfLykW4CX6MAOZRE/MmGvV/9wc8= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-BeenThere: info-gnus-english@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Announcements and discussions for GNUS, the GNU Emacs Usenet newsreader \(in English\)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: info-gnus-english-bounces+gegu-info-gnus-english=m.gmane.org@gnu.org Original-Sender: "info-gnus-english" Xref: news.gmane.org gmane.emacs.gnus.user:18804 Archived-At: Bob Newell writes: > Aloha everyone, > > I mostly correspond in English, but I have a few French correspondents > and a couple of German ones. So I wanted to automatically enter French > input mode or German input mode respectively when writing to one of > those folks. After an embarrassing amount of time I came up with > something that works. (I'm on Emacs 25.3 and corresponding Gnus, and I > use message mode, gnus-alias, and BBDB completion. Obviously, I've > anonymized the addressees.) > > -- > > (defun rjn-change-lang-by-addressee (&rest args) > (let* ((addressee (message-fetch-field "To"))) > (if addressee > (if (or > (string-match-p "french1" addressee) > (string-match-p "french2" addressee) > (string-match-p "french3" addressee) > (string-match-p "french4" addressee) > (string-match-p "french5" addressee) > (string-match-p "french6" addressee) > (string-match-p "french7" addressee) > (string-match-p "french8" addressee)) > (set-input-method "french-postfix") > (if (or > (string-match-p "german1" addressee) > (string-match-p "german2" addressee) > (string-match-p "german3" addressee)) > (set-input-method "german-postfix")))))) > > (add-hook 'message-setup-hook 'rjn-change-lang-by-addressee t) > (advice-add 'bbdb-complete-mail :after #'rjn-change-lang-by-addressee) > > -- > > But this seems excessively crude and clunky. Surely I'm not the first > person ever to do this sort of thing, but I can't find any other > examples. > > Any suggestions about doing this better, perhaps much better? A small improvement would be to store the addresses elsewhere, say in a variable, and then use `regexp-opt' on the lists to build one regexp for French and another for German. Then you can collapse your `string-match-p' calls to one per language. A better solution might involve giving your BBDB contacts a "language" xfield, holding values like "fr" or "de". Then in the message-setup-hook just retrieve the actual BBDB contact, check if it has a language xfield, and set the input method accordingly. HTH, Eric