DonationCoder.com forum
 
Read-only archive. This is a static copy of the DonationCoder.com forum. Reading and searching work as before; logging in, posting and private messages do not.
Archive of 2026-10-21 · About this archive · Main site

Author Topic: A Macro+Tool config for ultraedit for procesing blocks of text externally  (Read 24,442 times)

mouser

  • First Author
  • Administrator
  • Joined in 2005
  • *****
  • Posts: 40,931
    • Gathering Badge
    • Plugin Coding Medal
    • Participated in NANY Challenge Seventeen Times
    • Cody Award
    • Coding Snacks
    • Volunteers/Staff
Here is the combination of MACRO and TOOL that i use to let me select a block of text in a file and process it by an external exe program, capture the output and paste it back replacing the originally selected text.
The key feature of this technique is that it allows you to use an easy undo to undo the change (Ctrl+Z) and preserves your place in the file after the operation.
The sample tool below runs the open source Astyle exe (C++ coder formatter) on the selected block, and is configured to implement whitesmith style c++ indentation (http://en.wikipedia.org/wiki/Indent_style#Whitesmiths_style), which i love.

MyAstyle MACRO
-------------------------
Code
InsertMode
ColumnModeOff
HexOff
UnixReOff
Copy 
NewFile
Paste 
SaveAs "C:\Temp\Astyle.tmp"
CloseFile
RunTool "MyAstyle"
Open "C:\Temp\Astyle.tmp"
SelectAll
Copy 
CloseFile
ToggleBookmark
Paste 
Open "C:\Temp\Astyle.tmp.orig"
SelectAll
Copy 
CloseFile
PreviousBookmarkSelect
ToggleBookmark



MyAstyle TOOL Configuration:
-----------------------------
Code
COMMANDLINE -> D:\Libraries\astyle\astyle.exe --mode=c --indent-brackets --brackets=break --indent=tab --one-line=keep-blocks --one-line=keep-statements C:\Temp\Astyle.tmp
WORKINGDIR  -> C:\Temp\
MENUITEMNAME-> MyAstyle
DONT CHECK "CAPTURE OUTPUT" - this has the exe write output to a file.

if your exe outputs to stdout, then you should check "capture output" and modify the macro and remove the lines from the first Open to the subsequent Closefile.
« Last Edit: July 11, 2005, 07:13 PM by mouser »

Jussi Jumppanen

  • Member
  • Joined in 2005
  • **
  • Posts: 35
Here is the combination of MACRO and TOOL that i use to let me select a block of text in a file and process it by an external exe program, capture the output and paste it back replacing the originally selected text.

Just out of curiosity I whippped up this Zeus Lua macro which performs the same task :)

Code
--
--        Name: Astyle Macro
--      Author: Jussi Jumppanen
--    Language: Lua Macro
-- Description: A simple Lua macro that takes the currently selected
--              text, saves it to the c:\temp\astlye.tmp file, runs it
--              through the astyle.exe utility, then pastes the result
--              back into the cdocument.
--
--  How To Run: Save to style.lua in the zScript directory.
--
--              All Zeus macros can be run using the macro execute menu
--              item or they can be bound to the keyboard or can be
--              attached to the macro drop down or popup menus.
--
function key_macro()
  -- macro only works for read/write documents
  if is_read_only() == 1 then
    message("The current document is marked as read only!")
    beep()
    return
  end

  -- macro needs some marked text
  if (is_marked() == 0) then
    message("To use this macro you need to first mark some text.")
    beep()
    return 1
  end

  -- get the current marked text
  local marked_text = macro_tag("$M")

  -- file that will be created
  local file_name = "c:\\temp\\astyle.tmp"

  -- open the temp file in binary write mode
  local file_out = io.open(file_name, "w+b")

  if file_out ~= nil then
    -- write the text to file
    file_out:write(marked_text)
    file_out:close()

    -- command line to be run
    local command = "astyle.exe --mode=c --indent-brackets --brackets=break --indent=tab --one-line=keep-blocks --one-line=keep-statements " ..  file_name

    -- command options: wait for tool to finish
    local flags = 32

    -- run command which should display a DOS window
    if system(command , 0, flags) == 0 then
       -- open the temp file in text reading mode
       local file_in = io.open(file_name, "r+t")

       if file_in ~= nil then
          local result = ""

          -- read in the file
          for line in file_in:lines() do
            result = result .. line .. "\r\n"
          end

          -- close the input
          file_in:close()

          -- add the result to the clipboard
          set_clipboard_text(result)

          -- paste the result into the document deleting the original text
          MarkPaste()
      else
        -- failed to open file
        message_box(1, "Error opening the '" .. file_name .. "' results file.")
      end
    else
      -- failed to run tool 
      message_box(1, command .. "\nError running program!'")
    end
  else
    -- failed to create file
    message_box(1, "Error creating the '" .. file_name .. "' file.")
  end
end

key_macro()
« Last Edit: September 15, 2005, 10:54 PM by Jussi Jumppanen »

Original address: https://www.donationcoder.com/forum/index.php?topic=516.0