Second Align Text macro

This forum allows you to share scripts with other Zeus users. Please do not post bug reports, feature requests or questions to this forum, but rather use it exclusively for posting scripts or for the discussion of scripts that have been posted.
Post Reply
Site Admin
Posts: 2547
Joined: Fri Aug 13, 2004 5:10 pm

Second Align Text macro

Post by jussij »

This script is based on the oriiginal align text macro:

For example assume you code looks like this where | is used to indicate the cursor location:

Code: Select all

        Some |            text
        that      is 
        all    over 
        the           place
Putting the cursor at the | location and running the macro four times gives you the nicely aligned code shown below:

Code: Select all

        Some text
        that is 
        all  over 
        the  place
This script builds on the original by allowing the user to column mark a range of lines and have all marked lines aligned in the one go.

Code: Select all

--        Name: Align  Macro 
--      Author: Omer Kircher 
-- Modified By: Jussi Jumppanen 
--    Language: Lua Macro 
-- Description: This function facilitates lining up columns of text. 
--              To use, load the macro (i.e. F9 key), position the cursor 
--              and then run macro using the Macro Execute (i.e. F8 key) 
--              Alternatively you can bind the macro to the keyboard. 
--              This version also lets you do several lines by just using 
--              the column marking to mark all the lines that need to be
--              aligned.
--              Blank spaces between the cursor and the next word will 
--              be deleted. 
--              The cursor is then moved to the next line ready for 
--              another operation. 

function key_macro() 
    -- macro only works for documents
    local document = is_document()

    -- macro only works for read/write documents.
    local locked = is_read_only()

    if (locked == 1) or (document == 0) then
        message("This macro only works for writable document files.");


    -- default to the current line
    local top   = get_line_pos()
    local range = 1
    -- save the current cursor
    -- macro only works for marked documents
    local marked = is_marked()
    if marked == 1 then
        -- get the marked text details
        top   = get_marked_top()
        left  = get_marked_left()
        range = get_marked_bottom() - top + 1

        -- move to the fist line of the marked text
        set_line_pos(top, left)

        -- remove the markings
    end -- if

    -- allign the lines selected or the current line
        -- look for a white space (32) ascii character 
        if get_char_at() == 32 then 
            -- remove the white space 

        -- position the cursor on the next line 

        range = range - 1
    until range == 0
    -- restore original cursor

    if marked == 0 then
        -- for the unmarked case position the cursor on the next line 
    end -- if


key_macro() -- run the macro
Post Reply