On 28.11.2007, at 15:47, Thomas Aylott - subtleGradient wrote:
Yes, I've been wanting a proper way to get the REAL cursor location forever. Just check out what I'm doing inside the Support/lib/ codecompletion.rb to get the actual cursor location no matter if you have a selection or if the selection was started from the left or the right, etc...
I did it that way:
get the caret position or if a selection is done take the start point: [TM_INPUT_START_LINE is only set for a selection]
if defined "TM_INPUT_START_LINE" line = "TM_INPUT_START_LINE" - 1 line_index = "TM_INPUT_START_LINE_INDEX" else line = "TM_LINE_NUMBER" - 1 line_index = "TM_LINE_INDEX" end
get the real caret position (in bytes but depends on the regexp engine): 1) via regexp: THE_ENTIRE_TEXT =~ /((.*\n){line})(.{line_index})/ TEXT_BEFORE_CARET = "$1$3"; CARET_POSITION = length (TEXT_BEFORE_CARET)
[Perl crashes here for a very large text chunk; Ruby is fine]
2) count \n + line_index CARET_POSITION = 0 count = line; while(count--){ CARET_POSITION = index(THE_ENTIRE_TEXT,"\n", CARET_POSITION) CARET_POSITION++ } CARET_POSITION = CARET_POSITION + line_index
or others
I already replaced the version in Experimental with this version and added the contents only version too. Is that one good enough or will you be updatingthe contents version too?
I attached a slightly modified version of "Select Balanced (HT|X)ML Tags". I cleaned the code, improved the error handling (e.g. if HTML::Parser is not installed); Tool Tip if nothing is found or there is a mismatch.
Based on that "Select Balanced (HT|X)ML Tags" macro I will post a new (and more robust) version of "Select Content of Balanced (HT|X)ML Tags" (hopefully tomorrow). Maybe I will have some time to write a macro for "Select Balanced (HT|X)ML Tags backwards" like yours using UNDO.
Best,
--Hans