diff options
author | 2020-09-19 14:53:20 -0400 | |
---|---|---|
committer | 2020-09-19 14:53:20 -0400 | |
commit | 14e524cf217250388d374433cf6f3241f66e4e01 (patch) | |
tree | baa0c6f3c45cbd1946403a9762cadcffdb530ef7 /core | |
parent | 28a73bcf0fe6fa9cd97e50734fb243c625284a89 (diff) | |
download | textadept-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.luadoc | 2 | ||||
-rw-r--r-- | core/file_io.lua | 15 | ||||
-rw-r--r-- | core/ui.lua | 12 |
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() |