Re: Bookmark features

From: mitchell <mforal.n....at.gmail.com>
Date: Mon, 3 May 2010 17:41:59 -0700 (PDT)

Hi Jay, I think the following would be a good addition to the wiki :)

On Apr 29, 3:35 am, Jay <robert.jay.go....at.gmail.com> wrote:
> 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 athttp://groups.google.com/group/textadept?hl=en.

-- 
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 Mon 03 May 2010 - 20:41:59 EDT

This archive was generated by hypermail 2.2.0 : Thu 08 Mar 2012 - 11:44:00 EST