From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: Fwd: Re: Inadequate documentation of silly characters on screen. Date: Thu, 19 Nov 2009 17:08:38 +0000 Message-ID: <20091119170838.GC1314@muc.de> References: <20091118191258.GA2676@muc.de> <20091119082040.GA1720@muc.de> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1258651362 10660 80.91.229.12 (19 Nov 2009 17:22:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 19 Nov 2009 17:22:42 +0000 (UTC) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Nov 19 18:22:34 2009 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1NBAiF-0002BE-Q0 for ged-emacs-devel@m.gmane.org; Thu, 19 Nov 2009 18:22:33 +0100 Original-Received: from localhost ([127.0.0.1]:58716 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NBAiF-0000US-55 for ged-emacs-devel@m.gmane.org; Thu, 19 Nov 2009 12:22:31 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NBAQ3-0001Vt-2P for emacs-devel@gnu.org; Thu, 19 Nov 2009 12:03:43 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NBAPy-0001Qg-1e for emacs-devel@gnu.org; Thu, 19 Nov 2009 12:03:42 -0500 Original-Received: from [199.232.76.173] (port=45525 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NBAPx-0001QQ-Jc for emacs-devel@gnu.org; Thu, 19 Nov 2009 12:03:37 -0500 Original-Received: from colin.muc.de ([193.149.48.1]:1948 helo=mail.muc.de) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NBAPw-0006I1-Fd for emacs-devel@gnu.org; Thu, 19 Nov 2009 12:03:36 -0500 Original-Received: (qmail 36796 invoked by uid 3782); 19 Nov 2009 17:03:34 -0000 Original-Received: from acm.muc.de (pD9E51409.dip.t-dialin.net [217.229.20.9]) by colin2.muc.de (tmda-ofmipd) with ESMTP; Thu, 19 Nov 2009 18:03:33 +0100 Original-Received: (qmail 2600 invoked by uid 1000); 19 Nov 2009 17:08:38 -0000 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.9i X-Delivery-Agent: TMDA/1.1.5 (Fettercairn) X-Primary-Address: acm@muc.de X-detected-operating-system: by monty-python.gnu.org: FreeBSD 4.6-4.9 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:117265 Archived-At: Hi, Stefan, On Thu, Nov 19, 2009 at 09:08:29AM -0500, Stefan Monnier wrote: > >> If you give us more context (i.e. more of the real code where the > >> problem show up), maybe we can tell you how to avoid it. > > OK. I have my own routine to display regexps. As a first step, I > > translate \n -> ñ, (and \t, \r, \f similarly). This is how: > > (defun translate-rnt (regexp) > > "REGEXP is a string. Translate any \t \n \r and \f characters > > to wierd non-ASCII printable characters: \t to Î (206, \xCE), \n > > to ñ (241, \xF1), \r to ® (174, \xAE) and \f to £ (163, \xA3). > > The original string is modified." > > (let (ch pos) > > (while (setq pos (string-match "[\t\n\r\f]" regexp)) > > (setq ch (aref regexp pos)) > > (aset regexp pos ; <=================== > > (cond ((eq ch ?\t) ?Î) > > ((eq ch ?\n) ?ñ) > > ((eq ch ?\r) ?®) > > (t ?£)))) > > regexp)) > Each one of those `aset' (when performed according to your wishes) would > change the byte-size of the string, so it would internally require > copying the whole string each time: aset on (multibyte) strings is very > inefficient (compared to what most people expect, not necessarily > compared to other operations). I'd recommend you use higher-level > operations since they'll work just as well and are less susceptible to > such problems: > (replace-regexp-in-string "[\t\n\r\f]" > (lambda (s) > (or (cdr (assoc s '(("\t" . "Î") > ("\n" . "ñ") > ("\r" . "®")))) > "£")) > regexp) That works 100%. Even in Emacs 23 ;-). Thanks! > Stefan -- Alan Mackenzie (Nuremberg, Germany).