[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: How do I highlight word at point?
From: |
Drew Adams |
Subject: |
RE: How do I highlight word at point? |
Date: |
Sun, 19 Oct 2008 15:16:15 -0700 |
> here's what i would want to have ideally:
> press a key, expand selection to the current word, press again, expand
> to the next semantic unit (with respect to the current lang/mode),
> press again, expand further.
>
> This idea is borrowed from Mathematica's IDE (aka the Front End).
> I have wrote full description of this feature, see:
> http://xahlee.org/emacs/syntax_tree_walk.html
>
> I have a draft version for over a year now:
>
> (defun mark-semantic-unit ()
> "Select a semantic unit.
> Select a word under cursor. "word" here means alphanumeric sequence
> plus "_" or "-".
>
> When this function is run for the first time and there is no active
> region, then it selects the current word (i.e. sequence of
> alphanumerics plus hyphen or underscore).
> When the function is run again, or if there is a region, it extends
> the selection to the next level of enclosing delimiters."
> (interactive)
> (require 'thingatpt)
> (let ((deactivate-mark nil))
> (if (or (and (eq last-command this-command))
> (and transient-mark-mode mark-active))
> (let ((e1 (region-beginning)) (e2 (region-end)) b1 b2)
> (goto-char (- e1 0))
> (skip-chars-backward "^<>("{[?<\"'")
> (setq b1 (point))
> (goto-char (+ e2 0))
> (skip-chars-forward "^<>)"}]?>\"'")
> (setq b2 (point))
> (set-mark b1))
> (cond
> ( (looking-at "\\_<")
> (setq pt (point))
> (push-mark pt nil t)
> (forward-symbol 1))
> (t
> (forward-symbol -1)
> (setq pt (point))
> (push-mark pt nil t)
> (forward-symbol 1))))))
>
> this version works when your cursor is inside a matching pair. For
> example, if your cursor is at A in: (something here A and that)
> then invoke twice it'll select the whole paren.
>
> However, it doesn't work when the cursor is in a screwed nested
> position. For example: (something here A (and) that)
> if your cursor is at A, invoke twice won't get the whole outer paren,
> because the code doesn't track nested parens, it only looks for chars
> in a dumb way.
>
> Ideally, this mark-semantic-unit should just extend a semantic unit,
> where what's considered a semantic unit depends on the language. But
> this i imagine would be rather a non-trivial problem. I am not sure
> emacs's syntax table system is rich enough to be used for this.
>
> So, taking a step back, i tried to have the code just extending to
> outer matching pairs. (effectively a extend-semantic-unit for lisp) I
> think now i can make this code work by using the sexp navigation
> functions. I should code this soon.
>
> If anyone can implement this, or better yet, write a proper extend-
> semantic-unit for langs with C like syntax (C++,java,javascript),
> that'd be a killer feature i think.
I'm not sure that it would help you toward what you want to do, but you might
look at `thing-cmds.el'. It has some commands for selecting successive things of
different types.
http://www.emacswiki.org/emacs/ThingAtPointCommands.
See also perhaps:
http://www.emacswiki.org/emacs/MarkCommands#mark-a-word-or-thing.
- Re: How do I highlight word at point?, (continued)
Re: How do I highlight word at point?, Francis Moreau, 2008/10/29
Re: How do I highlight word at point?, Scott Frazer, 2008/10/30
Re: How do I highlight word at point?, Xah, 2008/10/19
- Re: How do I highlight word at point?, Nikolaj Schumacher, 2008/10/19
- Message not available
- Re: How do I highlight word at point?, Xah, 2008/10/19
- RE: How do I highlight word at point?,
Drew Adams <=
- Re: How do I highlight word at point?, Nikolaj Schumacher, 2008/10/19
- Message not available
- Re: How do I highlight word at point?, Xah, 2008/10/20
- Re: How do I highlight word at point?, Nikolaj Schumacher, 2008/10/20
- Message not available
- Re: How do I highlight word at point?, Xah, 2008/10/20
- Re: How do I highlight word at point?, Nikolaj Schumacher, 2008/10/21
RE: How do I highlight word at point?, Drew Adams, 2008/10/19
Re: How do I highlight word at point?, htbest2000, 2008/10/21