aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authormitchell <70453897+667e-11@users.noreply.github.com>2009-06-19 18:40:56 -0400
committermitchell <70453897+667e-11@users.noreply.github.com>2009-06-19 18:40:56 -0400
commit1098df588c20599cc3b2d66e87630615a321d17b (patch)
treeaa014792e8eb7a7955f1768ce1d5f1ade4f0b5ca /core
parentfb758ea341c45b4358f53fe1c945d235de08703c (diff)
downloadtextadept-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.lua2
-rw-r--r--core/.view.lua2
-rw-r--r--core/events.lua57
-rw-r--r--core/ext/mime_types.lua2
-rw-r--r--core/ext/pm/buffer_browser.lua4
-rw-r--r--core/ext/pm/ctags_browser.lua2
-rw-r--r--core/file_io.lua4
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)