I'm trying to do something that should be simple but doesn't work. I need to make a macro where it sets an anchor and marks all the text up until it hits a specific character. That would be the "SearchNext()" character(s). But whenever you do SearchNext() it forgets about the Mark Block that you've set.
There's got to be a way to mark and then copy where the end of the copy text is some character. Can someone tell me how to do this?
Very irritating because I only need to write a macro every couple of years or so and then I have to research and relearn the freaking macro language every time!!! Very very aggravating.
Search without losing the MarkBlock anchor
I'm trying to do something that should be simple but doesn't work. I need to make a macro where it sets an anchor and marks all the text up until it hits a specific character.
The Lua code below does something like this.
I think you have found a scripting bug. See the *** comment in the macro code below.That would be the "SearchNext()" character(s). But whenever you do SearchNext() it forgets about the Mark Block that you've set.
Let me know if this is not what you where after.
That's what the forum is forVery very aggravating.

Cheers Jussi
PS: This code was tested using the latest Zeus version.
Code: Select all
function key_macro()
-- macro only works for documents
local document = is_document()
if document > 0 then
-- ask for a user to supply a search string
local pattern = user_input("Search string:", "")
if string.len(pattern) > 0 then
local FORWARD = 0
local REVERSE = 1
local MARKED = 2
local ENTIRE = 3
local ALL = 4
-- save the current search and replace options
search_options_save()
-- setup the search
set_find_text(pattern)
set_search_option("Scope", FORWARD);
set_search_option("UseCase", 0)
set_search_option("WholeWord", 0)
set_search_option("RegExpress", 0)
-- save current location
local cursor1 = get_cursor_pos()
local line1 = get_line_pos()
-- look for the text
if SearchNext() then
-- NOTE: **** not sure why this is needed but it is ****
MarkHide()
-- save current location
cursor2 = get_cursor_pos()
line2 = get_line_pos()
-- move to the original location
set_line_pos(line1, cursor1)
-- start block mark mode from the current location
MarkBlockSet()
-- move to the original location
set_line_pos(line2, cursor2)
message("Search Pattern found.")
else
message("Search Pattern: '" .. pattern .. "' not found.")
end
-- restore the original search details
search_options_restore()
else
message("Operation cancelled by user!")
end
else
message("This macro only works for document files!")
beep()
end
end
key_macro() -- run the macro