unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: pjb@informatimago.com (Pascal J. Bourguignon)
To: help-gnu-emacs@gnu.org
Subject: Re: [ELISP] How do you turn an array of chars into a string?
Date: Sun, 01 Aug 2010 23:52:12 +0200	[thread overview]
Message-ID: <87aap6f1bn.fsf@kuiper.lan.informatimago.com> (raw)
In-Reply-To: 87wrsae07o.fsf@kzsu.stanford.edu

Joseph Brenner <doom@kzsu.stanford.edu> writes:

> The elisp manual has this example, using "kbd" to convert a (relatively)
> readable string into the "internal Emacs key representation":
>
>      (global-set-key (kbd "C-x C-\\") 'next-line)
>
>      (global-set-key [?\C-x ?\C-\\] 'next-line)
>
> What's the inverse of kbd?  

> What if you want to convert an array-of-chars
> into a string?

These are two radically different things.   

The inverse of kbd doesn't convert an array of characters into a
string, it would produce a string containing a text describing in a
human readable form the keychoard sequence.

So what do you really want?



To convert a vector of characters to a string you could use:

(require 'cl) ; all the good stuff is always in there!

(coerce [?c ?a ?t] 'string) --> "cat"

(concatenate 'string  "A " [?c ?a ?t] '(?  ?e ?a ?t ?s) " a mouse.")
--> "A cat eats a mouse."



To convert a vector of key chords into a human readable description of
it, I don't know.  But the command where-is seems to be knowing how to
do it, so let's read the source of where-is!  Here, we find a:
(mapconcat 'key-description keys ", ") therefore key-description might
be the right function.  Read the documentation.  Yes!  Notice how it
says nothing about converting vectors to string!!!

(key-description (kbd "C-x C-\\"))
 -->  "C-x C-\\"

(key-description (kbd "C-M-A-s-Z C-u 123 H-S-A-é")) 
 --> "A-C-M-s-z C-u 1 2 3 A-H-S-é"

Looks good...


> Things like this seem to work, but only for very simple chars:
>
>   (mapconcat 'string [?c ?a ?t] "")  ;; => "cat"

What is a non-simple character???


-- 
__Pascal Bourguignon__                     http://www.informatimago.com/


  reply	other threads:[~2010-08-01 21:52 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-01 17:01 [ELISP] How do you turn an array of chars into a string? Joseph Brenner
2010-08-01 21:52 ` Pascal J. Bourguignon [this message]
2010-08-01 23:07   ` Joseph Brenner
2010-08-02 21:22 ` Stefan Monnier
2010-08-02 21:55   ` Pascal J. Bourguignon
2010-08-02 22:41     ` Johan Bockgård
2010-08-02 22:57       ` Pascal J. Bourguignon
2010-08-03  9:33     ` Stefan Monnier
2010-08-03 20:57   ` Joseph Brenner
2010-08-04  9:27     ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87aap6f1bn.fsf@kuiper.lan.informatimago.com \
    --to=pjb@informatimago.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).