aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authormitchell <70453897+orbitalquark@users.noreply.github.com>2020-09-19 14:53:20 -0400
committermitchell <70453897+orbitalquark@users.noreply.github.com>2020-09-19 14:53:20 -0400
commit14e524cf217250388d374433cf6f3241f66e4e01 (patch)
treebaa0c6f3c45cbd1946403a9762cadcffdb530ef7 /core
parent28a73bcf0fe6fa9cd97e50734fb243c625284a89 (diff)
downloadtextadept-14e524cf217250388d374433cf6f3241f66e4e01.tar.gz
textadept-14e524cf217250388d374433cf6f3241f66e4e01.zip
Added `events.FILE_{BEFORE,AFTER}_RELOAD` and save/restore bookmarks.
Also moved buffer state save/restore into ui module.
Diffstat (limited to 'core')
-rw-r--r--core/.buffer.luadoc2
-rw-r--r--core/file_io.lua15
-rw-r--r--core/ui.lua12
3 files changed, 20 insertions, 9 deletions
diff --git a/core/.buffer.luadoc b/core/.buffer.luadoc
index 7a70b5c4..9ad6ee0d 100644
--- a/core/.buffer.luadoc
+++ b/core/.buffer.luadoc
@@ -1781,6 +1781,8 @@ function style_of_name(buffer, style_name) end
---
-- Reloads the buffer's file contents, discarding any changes.
+-- Emits `FILE_BEFORE_RELOAD` and `FILE_AFTER_RELOAD` events if the buffer is
+-- the current one.
-- @param buffer A buffer.
-- @name reload
function reload(buffer) end
diff --git a/core/file_io.lua b/core/file_io.lua
index d45372ec..71dd5af3 100644
--- a/core/file_io.lua
+++ b/core/file_io.lua
@@ -9,6 +9,12 @@
-- Arguments:
--
-- * _`filename`_: The opened file's filename.
+-- @field _G.events.FILE_BEFORE_RELOAD (string)
+-- Emitted before reloading the current file.
+-- Emitted by [`buffer:reload()`]().
+-- @field _G.events.FILE_AFTER_RELOAD (string)
+-- Emitted after reloading the current file.
+-- Emitted by [`buffer:reload()`]().
-- @field _G.events.FILE_BEFORE_SAVE (string)
-- Emitted right before saving a file to disk.
-- Emitted by [`buffer:save()`]().
@@ -38,6 +44,8 @@ module('io')]]
-- Events.
local events, events_connect = events, events.connect
events.FILE_OPENED = 'file_opened'
+events.FILE_BEFORE_RELOAD = 'file_before_reload'
+events.FILE_AFTER_RELOAD = 'file_after_reload'
events.FILE_BEFORE_SAVE = 'file_before_save'
events.FILE_AFTER_SAVE = 'file_after_save'
events.FILE_CHANGED = 'file_changed'
@@ -153,7 +161,7 @@ end
local function reload(buffer)
if not buffer then buffer = _G.buffer end
if not buffer.filename then return end
- local pos, first_visible_line = buffer.current_pos, view.first_visible_line
+ if buffer == _G.buffer then events.emit(events.FILE_BEFORE_RELOAD) end
local f = assert(io.open(buffer.filename, 'rb'))
local text = f:read('a')
f:close()
@@ -161,10 +169,7 @@ local function reload(buffer)
buffer:set_text(text)
buffer:set_save_point()
buffer.mod_time = lfs.attributes(buffer.filename, 'modification')
- if buffer == _G.buffer then
- buffer:goto_pos(pos)
- view.first_visible_line = first_visible_line
- end
+ if buffer == _G.buffer then events.emit(events.FILE_AFTER_RELOAD) end
end
-- LuaDoc is in core/.buffer.luadoc.
diff --git a/core/ui.lua b/core/ui.lua
index 66828bc2..ef6e6ac9 100644
--- a/core/ui.lua
+++ b/core/ui.lua
@@ -347,7 +347,7 @@ events_connect(events.UPDATE_UI, function(updated)
end)
-- Save buffer properties.
-events_connect(events.BUFFER_BEFORE_SWITCH, function()
+local function save_buffer_state()
-- Save view state.
buffer._anchor, buffer._current_pos = buffer.anchor, buffer.current_pos
local n = buffer.main_selection
@@ -361,10 +361,12 @@ events_connect(events.BUFFER_BEFORE_SWITCH, function()
folds[#folds + 1], i = i, view:contracted_fold_next(i + 1)
end
buffer._folds = folds
-end)
+end
+events_connect(events.BUFFER_BEFORE_SWITCH, save_buffer_state)
+events_connect(events.FILE_BEFORE_RELOAD, save_buffer_state)
-- Restore buffer properties.
-events_connect(events.BUFFER_AFTER_SWITCH, function()
+local function restore_buffer_state()
if not buffer._folds then return end
-- Restore fold state.
for i = 1, #buffer._folds do view:toggle_fold(buffer._folds[i]) end
@@ -376,7 +378,9 @@ events_connect(events.BUFFER_AFTER_SWITCH, function()
local _top_line, top_line = buffer._top_line, view.first_visible_line
view:line_scroll(0, view:visible_from_doc_line(_top_line) - top_line)
view.x_offset = buffer._x_offset or 0
-end)
+end
+events_connect(events.BUFFER_AFTER_SWITCH, restore_buffer_state)
+events_connect(events.FILE_AFTER_RELOAD, restore_buffer_state)
-- Updates titlebar and statusbar.
local function update_bars()