Scite Numbered Bookmarks

lua-users home
wiki

Much of my youth was spent using the Borland development tools, and they would use ctrl+K 1 to set the first bookmark, and Ctrl+Q 1 to go to that bookmark, etc. Although my prefered style is the SciTE default (F2 to move to next bookmark), some people may find this useful.

It is an example of how to create custom bookmarks with characters with Scintilla, and how to manage objects on a per-file basis using OnOpen and OnSwitchFile.

This script uses the SciteExtMan loader for convenience, although I hope it should be clear how to do it using straight SciTE/Lua scripting.

-- borland.lua

-- Defines borland-style numbered bookmarks.

-- Put this in your extman scite_lua directory.



scite_Command {

  'ctrl-k|do_ctrl_command k|Ctrl+K',

  'ctrl-q|do_ctrl_command q|Ctrl+Q',  

} 



local gMarksMap = {}

local gMarks



scite_OnOpen(function(f)

  gMarksMap[f] = {}

 end)



scite_OnSwitchFile(function(f)

 gMarks = gMarksMap[f]



end)



function current_line()

    return editor:LineFromPosition(editor.CurrentPos)+1

end



local markers_defined = false

local base = 9



function define_markers()

  local zero = string.byte('0')

  for i = 1,9 do

      editor:MarkerDefine(i+base,SC_MARK_CHARACTER + zero + i)

  end

  markers_defined = true

end



function do_ctrl_command(key)

    editor:BeginUndoAction()

    scite_OnChar('once',function (ch)

       editor:EndUndoAction()

       editor:Undo()

       local num = tonumber(ch)

       local mark = num and gMarks[num]

       local line = current_line()

       if key == 'k' and num then

          if not markers_defined then define_markers() end

          if mark then -- clear mark

             gMarks[num] = nil

             editor:MarkerDelete(line-1,num+base)

          else

             gMarks[num] = line

             editor:MarkerAdd(line-1,num+base)

          end

       elseif key == 'q' and mark then

            editor:GotoLine(mark-1)

       end

       return true

     end)

end     






RecentChanges · preferences
edit · history
Last edited August 31, 2006 6:35 pm GMT (diff)