Re: Bookmark features

From: Jay <robert.jay.go....at.gmail.com>
Date: Thu, 29 Apr 2010 00:35:07 -0700 (PDT)

Yesterday's code had a few bugs, here's the fixed version:

 ----------- start: bookmarks.lua -------------
-- Copyright 2007-2009 Mitchell Foral mitchell<att>caladbolg.net. See
LICENSE.

local textadept = _G.textadept
local locale = _G.locale

---
-- Bookmarks for the textadept module.
module('_m.textadept.bookmarks', package.seeall)
-- Markdown:
-- ## Settings
--
-- * `MARK_BOOKMARK`: The unique integer mark used to identify a
bookmarked
--    line.
-- * `MARK_BOOKMARK_COLOR`: The [Scintilla color][scintilla_color]
used for a
--    bookmarked line.
--
-- [scintilla_color]: http://scintilla.org/ScintillaDoc.html#colour
-- settings
MARK_BOOKMARK = 1
MARK_BOOKMARK_COLOR = 0xC08040
-- end settings
_bookmarks = {}
---
-- Adds a bookmark to the current line.
function add(line)
  local buffer = buffer
  if buffer.filename then
    local line = line or buffer:line_from_position(buffer.current_pos)
    if line < buffer.line_count then
      buffer:marker_add(line, MARK_BOOKMARK)
      _bookmarks[buffer.filename] = _bookmarks[buffer.filename] or {}
      _bookmarks[buffer.filename][line]=true
    end
  end
end
---
-- Clears the bookmark at the current line.
function remove(line)
  local buffer = buffer
  if buffer.filename then
    local line = line or buffer:line_from_position(buffer.current_pos)
    if line < buffer.line_count then
      buffer:marker_delete(line, MARK_BOOKMARK)
      _bookmarks[buffer.filename][line]=nil
    end
  end
end
---
-- Toggles a bookmark on the current line.
function toggle(line)
  local buffer = buffer
  local line = buffer:line_from_position(line or buffer.current_pos)
  local markers = buffer:marker_get(line) -- bit mask
  local bit = 2^MARK_BOOKMARK
  if markers % (bit + bit) < bit then add() else remove() end
end
---
-- Clears all bookmarks in the current buffer.
function clear()
  local buffer = buffer
  buffer:marker_delete_all(MARK_BOOKMARK)
  _bookmarks[buffer.filename]=nil
end
---
-- Goes to the next bookmark in the current buffer.
function goto_next(allbuffers, current_line, startbuffer)
  local current_line = current_line or
buffer:line_from_position(buffer.current_pos)
  local line = buffer:marker_next(current_line + 1, 2^MARK_BOOKMARK)
  if line == -1 then
    if allbuffers then
	  local startbuffer = startbuffer or buffer.doc_pointer
      view:goto_buffer(1,false) --next buffer
	  if startbuffer ~= buffer.doc_pointer then
		goto_next(allbuffers, -1, startbuffer)
	  end
    else
      line = buffer:marker_next(0, 2^MARK_BOOKMARK)
    end
  end
  if line >= 0 then
    _m.textadept.editing.goto_line(line + 1)
  end
  return true
end
---
-- Goes to the previous bookmark in the current buffer.
function goto_prev(allbuffers, current_line, startbuffer)
  local current_line = current_line or
buffer:line_from_position(buffer.current_pos)
  local line = buffer:marker_previous(current_line - 1,
2^MARK_BOOKMARK)
  if line == -1 then
    if allbuffers then
	  local startbuffer = startbuffer or buffer.doc_pointer
	  view:goto_buffer(-1,false) --next buffer
  	  if startbuffer ~= buffer.doc_pointer then
		goto_prev(allbuffers, buffer.line_count, startbuffer)
	  end
    else
      line = buffer:marker_previous(buffer.line_count,
2^MARK_BOOKMARK)
    end
  end
  if line >= 0 then
    _m.textadept.editing.goto_line(line + 1)
  end
  return true
end
if buffer then buffer:marker_set_back(MARK_BOOKMARK,
MARK_BOOKMARK_COLOR) end
textadept.events.add_handler('view_new',
  function() buffer:marker_set_back(MARK_BOOKMARK,
MARK_BOOKMARK_COLOR) end)
-- 
You received this message because you are subscribed to the Google Groups "textadept" group.
To post to this group, send email to textadept.at.googlegroups.com.
To unsubscribe from this group, send email to textadept+unsubscribe.at.googlegroups.com.
For more options, visit this group at http://groups.google.com/group/textadept?hl=en.
Received on Thu 29 Apr 2010 - 03:35:07 EDT

This archive was generated by hypermail 2.2.0 : Thu 08 Mar 2012 - 11:43:58 EST