EmEditor (text editor) Forum Index
   EmEditor Core Enhancement Suggestions
     Macro s & r in block column selection
Register To Post

Threaded | Newest First Previous Topic | Next Topic | Bottom
Poster Thread
Stefan
Posted on: 5/21/2012 1:27 am
Home away from home
Joined: 7/14/2008
From: Germany, EU
Posts: 285
Macro s & r in block column selection
Hi Yutaka, i have an problem with replacing text
in an column/block selection from an macro.

Tested with 11.0.5 and 11.1.7


My problem:
if i take the block selected text,
and manipulate it with an macro,
the macro works correct
but the text replacement in the document
replaces all selected lines
with the replacement of the first line only.


Example:

Having an text like
First Line
Second Line
Third Line


and an code like
sel = document.selection.text;
Lines = sel.split("\r\n");
out = "";

for(L=0,E=Lines.length; L<E; L++){
	line = Lines[L];
	out += line.replace("i", "X") + "\r\n";
}

alert(out);
document.selection.text = out;




Test 1 - works fine:
- Select the whole text with line selection mode
First Line
Second Line
Third Line
- execute the macro
- the MsgBox shows the wanted result
- the lines are correct manipulated
FXrst Line
Second LXne
ThXrd Line





Test 2 - my problem:
- Select only the first words in column selection mode
First Line
Second Line
Third Line
- execute the macro
- the MsgBox shows the wanted result
- BUT the lines in the selection are all replaced by the content of the first replacement:
FXrst Line
FXrstd Line
FXrst Line

Expected was to get:
FXrst Line
Second Line
ThXrd Line


Question:
what should i modify to let this work as indented?

I can imagine workarounds like
- pos = get the right column pos of the selection
- process each line
- - - tempA = line.substring(0,pos)
- - - tempB = line.slice(pos)
- - - manipulate tempA
- out = tempA+tempB

...but ...is that really as indented ?


.
Stefan
Posted on: 4/8/2013 2:44 am
Home away from home
Joined: 7/14/2008
From: Germany, EU
Posts: 285
Re: Macro s & r in block column selection
 
 
This is still the same with EmEditor v12.0.11.

Since Yutaka didn't response on this
I do not know if is this an bug?

If yes, can this be improved please?

If No, what would be the indicated workaround please?


Quote:

Stefan wrote:
Hi Yutaka, i have an problem with replacing text
in an column/block selection from an macro.

Tested with 11.0.5 and 11.1.7

My problem:
if i take the block selected text,
and manipulate it with an macro,
the macro works correct
but the text replacement in the document
replaces all selected lines
with the replacement of the first line only.



 
Yutaka
Posted on: 4/9/2013 5:36 pm
Webmaster
Joined: 9/28/2006
From: Redmond
Posts: 2423
Re: Macro s & r in block column selection
Hello Stefan,

I am sincerely sorry for my delayed responses, but I am spending much of time these days to develop a new major version of EmEditor.

Currently, this is the specification because macros can't paste text as a box format. The only way to work around this is using the Clipboard like this:


sel = document.selection.text;
Lines = sel.split("\r\n");
out = "";

for(L=0,E=Lines.length; L<E; L++){
	line = Lines[L];
	out += line.replace("i", "X") + "\r\n";
}

alert(out);

clipboardData.setData("BoxText", out);
document.selection.Paste(eeCopyUnicode);


I hope this helps.
Thanks!


----------------
Yutaka Emura
Developer of EmEditor
http://www.emeditor.com/

Stefan
Posted on: 4/11/2013 12:46 am
Home away from home
Joined: 7/14/2008
From: Germany, EU
Posts: 285
Re: Macro s & r in block column selection
 
 
Woohoo

That works! Many thanks.

But leads to next question:
how to determine between line and block selection?

The answer I found in the help:
EmEditor Help - EmEditor Macro Reference - Selection Object
Mode Property

So I can use code like this:

nMode = document.selection.Mode;
switch( nMode & eeModeMask ) {
case eeModeStream:
    alert( "Stream selection mode.");
	work();
	document.selection.text = out;
    break;
case eeModeLine:
    alert( "Line selection mode." );
	work();
	document.selection.text = out;
    break;
case eeModeBox:
    alert( "Vertical selection mode.");
	oldCB = clipboardData.getData("Text"); //store
	work();
	clipboardData.setData("BoxText", out);
	document.selection.Paste(eeCopyUnicode);
	clipboardData.setData("Text", oldCB); //re set
    break;
}
if( nMode & eeModeKeyboard )  alert( "And also the keyboard selection mode." );


function work(){
	sel = document.selection.text;
	Lines = sel.split("\r\n");
	out = "";
	for(L=0,E=Lines.length; L<E; L++){
		line = Lines[L];
		out += line.replace("i", "X");
		if(L<E-1)out += "\r\n";
	}
	alert(out);
}




Fun!

... I gonna try this now for my real work.


Thank you much Yutaka!


 
Threaded | Newest First Previous Topic | Next Topic | Top


Register To Post
 
English čeština Deutsch español français italiano 日本語 한국어 Русский 简体中文 繁體中文