From mboxrd@z Thu Jan  1 00:00:00 1970
Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail
From: Jean Louis <bugs@gnu.support>
Newsgroups: gmane.emacs.help
Subject: How not to share `local-set-key' with all other buffers in the same
 major mode?
Date: Fri, 02 Apr 2021 11:32:42 +0300
Message-ID: <courier.000000006066D6B2.00001C01@stw1.rcdrun.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214";
	logging-data="21345"; mail-complaints-to="usenet@ciao.gmane.io"
To: Help GNU Emacs <help-gnu-emacs@gnu.org>
Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Fri Apr 02 10:33:52 2021
Return-path: <help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org>
Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org
Original-Received: from lists.gnu.org ([209.51.188.17])
	by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
	(Exim 4.92)
	(envelope-from <help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org>)
	id 1lSFFX-0005QY-KG
	for geh-help-gnu-emacs@m.gmane-mx.org; Fri, 02 Apr 2021 10:33:51 +0200
Original-Received: from localhost ([::1]:34702 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org>)
	id 1lSFFW-0003w7-MR
	for geh-help-gnu-emacs@m.gmane-mx.org; Fri, 02 Apr 2021 04:33:50 -0400
Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:42824)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <support1@rcdrun.com>)
 id 1lSFF9-0003vj-8G
 for help-gnu-emacs@gnu.org; Fri, 02 Apr 2021 04:33:28 -0400
Original-Received: from stw1.rcdrun.com ([217.170.207.13]:45175)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <support1@rcdrun.com>)
 id 1lSFF7-00067O-6b
 for help-gnu-emacs@gnu.org; Fri, 02 Apr 2021 04:33:26 -0400
Original-Received: from localhost ([::ffff:41.202.241.58])
 (AUTH: PLAIN securesender, TLS: TLS1.3,256bits,ECDHE_RSA_AES_256_GCM_SHA384)
 by stw1.rcdrun.com with ESMTPSA
 id 000000000001E1DB.000000006066D6B2.00001C01; Fri, 02 Apr 2021 01:32:50 -0700
Received-SPF: pass client-ip=217.170.207.13; envelope-from=support1@rcdrun.com;
 helo=stw1.rcdrun.com
X-Spam_score_int: -16
X-Spam_score: -1.7
X-Spam_bar: -
X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9,
 HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-BeenThere: help-gnu-emacs@gnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Users list for the GNU Emacs text editor <help-gnu-emacs.gnu.org>
List-Unsubscribe: <https://lists.gnu.org/mailman/options/help-gnu-emacs>,
 <mailto:help-gnu-emacs-request@gnu.org?subject=unsubscribe>
List-Archive: <https://lists.gnu.org/archive/html/help-gnu-emacs>
List-Post: <mailto:help-gnu-emacs@gnu.org>
List-Help: <mailto:help-gnu-emacs-request@gnu.org?subject=help>
List-Subscribe: <https://lists.gnu.org/mailman/listinfo/help-gnu-emacs>,
 <mailto:help-gnu-emacs-request@gnu.org?subject=subscribe>
Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org
Original-Sender: "help-gnu-emacs"
 <help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org>
Xref: news.gmane.io gmane.emacs.help:128803
Archived-At: <http://permalink.gmane.org/gmane.emacs.help/128803>

I would like to use editing modes as temporary view modes where I
would like to set a key like "q" or "i" temporarily, like this for
example:

(local-set-key "q" 'quit-window)

And I use it in read only mode. The binding goes in the current
buffer’s local map, which in most cases is shared with all other
buffers in the same major mode.

If the mode is Markdown then next time I enter in writeable buffer the
same key "q" remains and I need to unset it. So it is not convenient.

Would a solution for that be to make a new mode map and then invoke
new mode map when I wish to view it with special keys? All invoking I
do through functions, not manually.

Another matter is that I do dynamic `local-set-key' like following:

  (local-set-key "i" `(lambda ()
				(interactive)
				(hyperscope-view-with-mode ,id
				 ,(cond ((string= column "hlinks_description") "hlinks_text")
					((string= column "hlinks_text") "hlinks_description")
					(t (error "Cannot find column"))))))

So then if I wish to see some database entry in the buffer, I press
"i" and I see first "hlinks_description", but if I press "i" again I
will see "hlinks_text". This is very handy.

Is it possible to invoke mode dynamically, like to define a function
that defines mode, and that I call that function which would then call
the mode with specified parameters which in turn change the key
bindings as how I wish?

Jean

Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns

Sign an open letter in support of Richard M. Stallman
https://rms-support-letter.github.io/