From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Kevin Rodgers Newsgroups: gmane.emacs.help Subject: Re: Print out my key-sequences Date: Tue, 25 May 2010 00:47:59 -0600 Message-ID: References: <4BC01100.6080602@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1274770128 11742 80.91.229.12 (25 May 2010 06:48:48 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 25 May 2010 06:48:48 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue May 25 08:48:46 2010 connect(): No such file or directory Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1OGnwR-0006LO-2i for geh-help-gnu-emacs@m.gmane.org; Tue, 25 May 2010 08:48:43 +0200 Original-Received: from localhost ([127.0.0.1]:32912 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OGnwQ-0003uT-Gf for geh-help-gnu-emacs@m.gmane.org; Tue, 25 May 2010 02:48:42 -0400 Original-Received: from [140.186.70.92] (port=50170 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OGnw0-0003uN-DI for help-gnu-emacs@gnu.org; Tue, 25 May 2010 02:48:17 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OGnvy-0004St-S7 for help-gnu-emacs@gnu.org; Tue, 25 May 2010 02:48:16 -0400 Original-Received: from lo.gmane.org ([80.91.229.12]:55762) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OGnvy-0004Si-GV for help-gnu-emacs@gnu.org; Tue, 25 May 2010 02:48:14 -0400 Original-Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1OGnvv-00065a-Lt for help-gnu-emacs@gnu.org; Tue, 25 May 2010 08:48:11 +0200 Original-Received: from c-71-237-24-138.hsd1.co.comcast.net ([71.237.24.138]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 25 May 2010 08:48:11 +0200 Original-Received: from kevin.d.rodgers by c-71-237-24-138.hsd1.co.comcast.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 25 May 2010 08:48:11 +0200 X-Injected-Via-Gmane: http://gmane.org/ connect(): No such file or directory Original-Lines: 74 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: c-71-237-24-138.hsd1.co.comcast.net User-Agent: Thunderbird 2.0.0.24 (Macintosh/20100228) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:73764 Archived-At: Andrea Crotti wrote: > Kevin Rodgers writes: > >> this-command-keys can return a vector containing elements other than >> integers (characters) e.g. symbols for function keys and mouse events. And >> the vector can contain integers that cannot be put into a string. See >> the Strings of Events node of the Emacs Lisp manual. >> >> So first you have to find a robust way of converting the result of >> this-command-keys to a string, so it can incorporated into the COMMAND >> string argument to shell-command. As Lennart suggested, key-description >> is probably the way to go. >> >> And passing an arbitrary string as an argument to a program via >> shell-command is itself risky, if it may contain a shell metacharacters >> (which seems quite likely in this case). So the string should be escaped >> using shell-quote-argument, or you could use call-process instead of >> shell-command to avoid the quoting issue. >> >> So: >> >> (defun growl-popup (msg) >> "Pop up a growl notification with MSG, or display an Emacs message. >> The \"growlnotify\" program is used if `window-system' is non-nil and >> the program is found in `exec-path'; otherwise `message' is used." >> (interactive) >> (if (and window-system (executable-find "growlnotify")) >> (shell-command (concat "growlnotify -a /Applications/Emacs.app/ -m " >> (shell-quote-argument msg))) >> (message msg))) Oops, that should be (message "%s" msg) >> (defun popup-last () >> (interactive) >> (growl-popup (key-description (this-command-keys)))) > > > That's really nice thanks, I've added it to my configuration, with also > two functions to enable/disable it. > > I have to use setq-default to disable it by the way, is that correct? > --8<---------------cut here---------------start------------->8--- > (defun growl-mode-off () > (interactive) > (setq-default pre-command-hook (remq 'popup-last pre-command-hook))) > --8<---------------cut here---------------end--------------->8--- > > Only one more problem, here I display all the keys, but I don't really > care about stuff like > "C-n", "C-p", "m" (all the keys are inserted). > > Is there any kind of distinction between simple and more complex > combinations? How about: (unless (= (length (this-command-keys-vector)) 1) ...) or: (unless (eq (lookup-key global-map (this-command-keys)) this-command) ...) or both: (unless (and (= (length (this-command-keys-vector)) 1) (eq (lookup-key global-map (this-command-keys)) this-command)) ...) -- Kevin Rodgers Denver, Colorado, USA