blob: fa890ec256602b34e3f967fdf8a5dc25d8852c70 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
-- Copyright 2007-2009 Mitchell mitchell<att>caladbolg.net. See LICENSE.
local textadept = _G.textadept
local locale = _G.locale
---
-- Bookmarks for the textadept module.
-- There are several option variables used:
-- MARK_BOOKMARK: The integer mark used to identify a bookmarked line.
-- MARK_BOOKMARK_COLOR: The Scintilla color used for a bookmarked line.
module('_m.textadept.bookmarks', package.seeall)
-- options
local MARK_BOOKMARK = 1
local MARK_BOOKMARK_COLOR = 0xC08040
-- end options
---
-- Adds a bookmark to the current line.
function add()
local buffer = buffer
local line = buffer:line_from_position(buffer.current_pos)
buffer:marker_add(line, MARK_BOOKMARK)
end
---
-- Clears the bookmark at the current line.
function remove()
local buffer = buffer
local line = buffer:line_from_position(buffer.current_pos)
buffer:marker_delete(line, MARK_BOOKMARK)
end
---
-- Toggles a bookmark on the current line.
function toggle()
local buffer = buffer
local line = buffer:line_from_position(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)
end
---
-- Goes to the next bookmark in the current buffer.
function goto_next()
local buffer = buffer
local current_line = buffer:line_from_position(buffer.current_pos)
local line = buffer:marker_next(current_line + 1, 2^MARK_BOOKMARK)
if line == -1 then line = buffer:marker_next(0, 2^MARK_BOOKMARK) end
if line >= 0 then _m.textadept.editing.goto_line(line + 1) end
end
---
-- Goes to the previous bookmark in the current buffer.
function goto_prev()
local buffer = buffer
local current_line = buffer:line_from_position(buffer.current_pos)
local line = buffer:marker_previous(current_line - 1, 2^MARK_BOOKMARK)
if line == -1 then
line = buffer:marker_previous(buffer.line_count, 2^MARK_BOOKMARK)
end
if line >= 0 then _m.textadept.editing.goto_line(line + 1) end
end
buffer:marker_set_back(MARK_BOOKMARK, MARK_BOOKMARK_COLOR)
textadept.events.add_handler('view_new',
function() buffer:marker_set_back(MARK_BOOKMARK, MARK_BOOKMARK_COLOR) end)
|