diff options
author | 2009-06-19 18:40:56 -0400 | |
---|---|---|
committer | 2009-06-19 18:40:56 -0400 | |
commit | 1098df588c20599cc3b2d66e87630615a321d17b (patch) | |
tree | aa014792e8eb7a7955f1768ce1d5f1ade4f0b5ca /core | |
parent | fb758ea341c45b4358f53fe1c945d235de08703c (diff) | |
download | textadept-1098df588c20599cc3b2d66e87630615a321d17b.tar.gz textadept-1098df588c20599cc3b2d66e87630615a321d17b.zip |
Use before_switch and after_switch events for buffers and views.
Moved C code for saving/restoring state when switching buffers to Lua. Also
added saving of folding state.
Diffstat (limited to 'core')
-rw-r--r-- | core/.textadept.lua | 2 | ||||
-rw-r--r-- | core/.view.lua | 2 | ||||
-rw-r--r-- | core/events.lua | 57 | ||||
-rw-r--r-- | core/ext/mime_types.lua | 2 | ||||
-rw-r--r-- | core/ext/pm/buffer_browser.lua | 4 | ||||
-rw-r--r-- | core/ext/pm/ctags_browser.lua | 2 | ||||
-rw-r--r-- | core/file_io.lua | 4 |
7 files changed, 57 insertions, 16 deletions
diff --git a/core/.textadept.lua b/core/.textadept.lua index cd0a4553..0f2b02d9 100644 --- a/core/.textadept.lua +++ b/core/.textadept.lua @@ -46,7 +46,7 @@ function new_buffer() end --- -- Goes to the specified view. --- Activates the 'view_switch' signal. +-- Activates the 'view_*_switch' signal. -- @param n A relative or absolute view index. -- @param absolute Flag indicating if n is an absolute index or not. function goto_view(n, absolute) end diff --git a/core/.view.lua b/core/.view.lua index 2214463f..6cdb4336 100644 --- a/core/.view.lua +++ b/core/.view.lua @@ -32,7 +32,7 @@ function view:unsplit() end --- -- Goes to the specified buffer in the indexed view. --- Activates the 'buffer_switch' signal. +-- Activates the 'buffer_*_switch' signals. -- @param n A relative or absolute buffer index. -- @param absolute Flag indicating if n is an absolute index or not. function view:goto_buffer(n, absolute) end diff --git a/core/events.lua b/core/events.lua index ab664f87..a6060ab9 100644 --- a/core/events.lua +++ b/core/events.lua @@ -50,9 +50,11 @@ module('textadept.events', package.seeall) -- Textadept events: -- buffer_new() -- buffer_deleted() --- buffer_switch() +-- buffer_before_switch() +-- buffer_after_switch() -- view_new() --- view_switch() +-- view_before_switch() +-- view_after_switch() -- quit() -- Note: when adding a quit handler, it must be inserted at index 1 because -- the default quit handler returns true, which ignores all subsequent @@ -163,14 +165,20 @@ end function buffer_deleted() return handle('buffer_deleted') end -function buffer_switch() - return handle('buffer_switch') +function buffer_before_switch() + return handle('buffer_before_switch') +end +function buffer_after_switch() + return handle('buffer_after_switch') end function view_new() return handle('view_new') end -function view_switch() - return handle('view_switch') +function view_before_switch() + return handle('view_before_switch') +end +function view_after_switch() + return handle('view_after_switch') end function quit() return handle('quit') @@ -398,13 +406,46 @@ add_handler('buffer_new', set_title(buffer) end) -add_handler('buffer_switch', +add_handler('buffer_before_switch', + function() -- save buffer properties + local buffer = buffer + -- Save view state. + buffer._anchor = buffer.anchor + buffer._current_pos = buffer.current_pos + buffer._first_visible_line = buffer.first_visible_line + -- Save fold state. + buffer._folds = {} + local folds = buffer._folds + local level, expanded = buffer.fold_level, buffer.fold_expanded + local header_flag = textadept.constants.SC_FOLDLEVELHEADERFLAG + local test = 2 * header_flag + for i = 0, buffer.line_count do + if level[i] % test >= header_flag and not expanded[i] then + folds[#folds + 1] = i + end + end + end) + +add_handler('buffer_after_switch', + function() -- restore buffer properties + local buffer = buffer + if not buffer._folds then return end + -- Restore fold state. + for _, i in ipairs(buffer._folds) do buffer:toggle_fold(i) end + -- Restore view state. + buffer:set_sel(buffer._anchor, buffer._current_pos) + buffer:line_scroll(0, + buffer:visible_from_doc_line(buffer._first_visible_line) - + buffer.first_visible_line) + end) + +add_handler('buffer_after_switch', function() -- updates titlebar and statusbar set_title(buffer) update_ui() end) -add_handler('view_switch', +add_handler('view_after_switch', function() -- updates titlebar and statusbar set_title(buffer) update_ui() diff --git a/core/ext/mime_types.lua b/core/ext/mime_types.lua index cb9012eb..43ee2f9d 100644 --- a/core/ext/mime_types.lua +++ b/core/ext/mime_types.lua @@ -93,5 +93,5 @@ end textadept.events.add_handler('file_opened', handle_new) textadept.events.add_handler('file_saved_as', handle_new) -textadept.events.add_handler('buffer_switch', set_lexer) +textadept.events.add_handler('buffer_after_switch', set_lexer) textadept.events.add_handler('view_new', set_lexer) diff --git a/core/ext/pm/buffer_browser.lua b/core/ext/pm/buffer_browser.lua index d1fa4295..4f2390d3 100644 --- a/core/ext/pm/buffer_browser.lua +++ b/core/ext/pm/buffer_browser.lua @@ -75,8 +75,8 @@ textadept.events.add_handler('buffer_new', update_view) textadept.events.add_handler('buffer_deleted', update_view) textadept.events.add_handler('save_point_reached', update_view) textadept.events.add_handler('save_point_left', update_view) -textadept.events.add_handler('buffer_switch', update_view) -textadept.events.add_handler('view_switch', update_view) +textadept.events.add_handler('buffer_after_switch', update_view) +textadept.events.add_handler('view_after_switch', update_view) local function set_cursor() if matches(textadept.pm.entry_text) then diff --git a/core/ext/pm/ctags_browser.lua b/core/ext/pm/ctags_browser.lua index 23556f68..b7c3e76e 100644 --- a/core/ext/pm/ctags_browser.lua +++ b/core/ext/pm/ctags_browser.lua @@ -249,5 +249,5 @@ local function update_view() end textadept.events.add_handler('file_opened', update_view) textadept.events.add_handler('buffer_deleted', update_view) -textadept.events.add_handler('buffer_switch', update_view) +textadept.events.add_handler('buffer_after_switch', update_view) textadept.events.add_handler('save_point_reached', update_view) diff --git a/core/file_io.lua b/core/file_io.lua index fec1cc5e..11436cbb 100644 --- a/core/file_io.lua +++ b/core/file_io.lua @@ -476,5 +476,5 @@ local function update_modified_file() end end end -textadept.events.add_handler('buffer_switch', update_modified_file) -textadept.events.add_handler('view_switch', update_modified_file) +textadept.events.add_handler('buffer_after_switch', update_modified_file) +textadept.events.add_handler('view_after_switch', update_modified_file) |