From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "andreas.roehler@easy-emacs.de" Newsgroups: gmane.emacs.help Subject: Re: Understanding Word Boundaries Date: Fri, 25 Jun 2010 12:33:53 +0200 Message-ID: <4C248611.6040709@easy-emacs.de> References: 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 1277493270 31020 80.91.229.12 (25 Jun 2010 19:14:30 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 25 Jun 2010 19:14:30 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Fri Jun 25 21:14:29 2010 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 1OSELy-00013X-CZ for geh-help-gnu-emacs@m.gmane.org; Fri, 25 Jun 2010 21:14:19 +0200 Original-Received: from localhost ([127.0.0.1]:37122 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OSELv-0003RZ-Rl for geh-help-gnu-emacs@m.gmane.org; Fri, 25 Jun 2010 15:14:15 -0400 Original-Received: from [140.186.70.92] (port=44299 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OSD4f-0002Hf-Uf for help-gnu-emacs@gnu.org; Fri, 25 Jun 2010 13:52:28 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OS6Bb-0007jL-F4 for help-gnu-emacs@gnu.org; Fri, 25 Jun 2010 06:31:04 -0400 Original-Received: from moutng.kundenserver.de ([212.227.17.8]:49798) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OS6Bb-0007ZE-4E for help-gnu-emacs@gnu.org; Fri, 25 Jun 2010 06:31:03 -0400 Original-Received: from [192.168.178.27] (p5DDB1449.dip0.t-ipconnect.de [93.219.20.73]) by mrelayeu.kundenserver.de (node=mreu0) with ESMTP (Nemesis) id 0Lvfyq-1PFaD10FNk-017fyI; Fri, 25 Jun 2010 12:30:43 +0200 User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4 In-Reply-To: X-Provags-ID: V01U2FsdGVkX19oQilTJB2GBoaArg9HMozaOGDAtaG+nKye9Iz jC6kFpsFROZZhA1OJjRi9/jghLirDhuM+6/Qdtk4/dcwUo8UBW 28HyUqceNlrQT7BLXBAp3Uq+MUIRZcUFFWA6FhSk/8= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. 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:73977 Archived-At: Am 16.06.2010 12:44, schrieb Paul Drummond: > I have been an Emacs users for a few years now so definitely still a > newbie! While initially I struggled to control its power, I eventually came > round. Every issue I've had so far I've been able to fix by a quick search > in EmacsWiki, except for one frustrating and re-occurring problem that has > plagued me for years - word boundaries. > > Before Emacs I used Vim exclusively and the word boundary behaviour in Vim > *just worked* - I didn't even have to think about it. No matter what > language I used I could navigate and manipulate words without thinking about > it. The way word boundaries work in Vim is elegant and I have spent a lot > of time trying to find some elisp to replicate the behaviour in Emacs but to > no avail. > > I could write some elisp myself but I am still very new to it so it will > take a while - it's something I would like to do but I don't have time at > the moment. Regardless, an elisp solution to the problem is not the point > of this post. I want to understand why word boundaries behave the way they > do in Vanilla Emacs and I would greatly appropriate some views on this from > some Emacs Gurus! > > Every time I notice the word boundary behaviour when hacking in Emacs I > wonder to myself - "I must be missing something here. Surely, experienced > Emacs users don't just *put up* with this! Yet every forum response, blog > post, mailing-list post I have read suggests they do. This is atypical of > the Emacs community in my experience. Usually when something behaves wrong > in Emacs, it's easy to find some elisp that just fixes the problem full > stop. Yet with word-boundaries all I can find is suggestions that fix a > particular gripe but nothing that provides a general solution. > > I have loads of examples but I will mentioned just a few here to hopefully > kick-start further discussion. > > ** Example 1 > > I use org-mode for my journal and today I hit the word-boundary problem > while entering my morning journal entry - here's a contrived example of what > I entered: > > ** [10:27] Understanding Word Boundaries in Emacs > ^ > With point at the end of the word "Understanding" I hit C-w (which I bind to > backward-kill-word) and the word "Understanding" is killed as expected. But > when I hit C-w again, the point kills to the colon. Why? Why is colon a > word-boundary but the closing square bracket isn't? > > ** Example 2 > > When editing C++ files I often need to delete the "ClassName::" part when > declaring functions in the header: > > void ClassName::function(); > ^ > > With point at the start of ClassName I want to press M-d twice to delete > ClassName and :: but "::" isn't recognised as a word. In Vim I just type > "dw" twice and it *just works*. > Hi, seems not a question of word-boundaries, but a feature: as you describe, Vim says: when word-chars are under cursor, kill them. When non-word chars are there, kill until next word. Interesting. > ** Example 3 > > I have loads of problems when deleting and navigating words over multiple > lines. In the following C++ code for instance: > > Page *page = new _Page(this); > page.load(); > ^ > > When point is after "page", before the dot on the second line and I hit M-b > (backward-word) point ends up at the first opening bracket of "Page(" !!! > > Again, vim does the right thing here - pressing 'b' takes the point to the > closing bracket of Page(this) so it doesn't recognise the semi-colon as a > bracket which is intuitive and what I would expect. This is really the > point I am trying to make. I have never taken the time to understand the > behaviour of word boundaries in Vim because *it just works*. In Emacs I am > forced to think about word boundaries because Emacs keeps surprising me with > its weird behaviour! Forward-moves stop after the object, backward-moves before. When a mode defines '()' as word-characters, M-x backward-word will stop at the semi-colon at your example. Andreas > > Note: My examples happen to be C++ but I use lots of other languages too > including elisp, Clojure, JavaScript, Python and Java and the > word-boundaries seem to be wrong for all of them. > > I have tried several different elisp solutions but each one has at least one > feature that isn't quite right. Here are some links I kept, I've tried many > other solutions but don't have the links to hand: > > http://stackoverflow.com/questions/2078855/about-the-forward-and-backward-a-word-behaviour-in-emacs > http://stackoverflow.com/questions/1771102/changing-emacs-forward-word-behaviour/1772365#1772365 > > So to wrap up, the point of this post is to kick-start a discussion about > why the word boundaries in Vanilla Emacs (specifically GNU Emacs 23.1.50.1 > in my case) seem to be so awkward and unintuitive. > > Regards, > Paul Drummond >