aboutsummaryrefslogtreecommitdiffhomepage
path: root/init.lua
diff options
context:
space:
mode:
authorGravatar mitchell <70453897+667e-11@users.noreply.github.com>2020-06-05 22:00:31 -0400
committerGravatar mitchell <70453897+667e-11@users.noreply.github.com>2020-06-05 22:00:31 -0400
commit20833c35fd6d580c934cb6c3f6e7b9a2c39ac99b (patch)
tree370beb025b4868a475efa682373968c5b7a76a95 /init.lua
parent0dc1a169161395987f28a11b9dc72ac7c04f605d (diff)
Renamed `buffer:set_theme()` to `view:set_theme()` and fixed a bug with splits.
Also improved separate themes-per-view functionality.
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua31
1 files changed, 17 insertions, 14 deletions
diff --git a/init.lua b/init.lua
index d7c9f271..a3d5bf29 100644
--- a/init.lua
+++ b/init.lua
@@ -18,35 +18,36 @@ end
textadept = require('textadept')
--- Temporary compatibility.
-setmetatable(_L, {__index = function(t, k) return rawget(t, k:gsub('_', '')) or 'No Localization:'..k end})
-setmetatable(textadept.snippets, {__index = function(t, k) return rawget(t, k:gsub('^_', '')) end})
-
--- Documentation is in core/.buffer.luadoc.
-local function set_theme(buffer, name, props)
+-- Documentation is in core/.view.luadoc.
+local function set_theme(view, name, props)
if not assert_type(name, 'string', 2):find('[/\\]') then
name = package.searchpath(name, string.format(
'%s/themes/?.lua;%s/themes/?.lua', _USERHOME, _HOME))
end
if not name or not lfs.attributes(name) then return end
if not assert_type(props, 'table/nil', 3) then props = {} end
- local orig_buffer = _G.buffer -- may not be equivalent to buffer argument
- _G.buffer = buffer
+ local orig_view = _G.view
+ if view ~= orig_view then ui.goto_view(view) end
dofile(name)
- _G.buffer = orig_buffer
for prop, value in pairs(props) do buffer.property[prop] = value end
-- Force reload of all styles since the current lexer may have defined its own
-- styles. (The LPeg lexer has only refreshed default lexer styles.)
-- Note: cannot use `buffer.set_lexer()` because it may not exist yet.
local SETLEXERLANGUAGE = _SCINTILLA.properties.lexer_language[2]
buffer:private_lexer_call(SETLEXERLANGUAGE, buffer._lexer or 'text')
+ if view ~= orig_view then ui.goto_view(orig_view) end
end
-events.connect(events.BUFFER_NEW, function() buffer.set_theme = set_theme end)
-buffer.set_theme = set_theme -- needed for the first buffer
+events.connect(events.VIEW_NEW, function() view.set_theme = set_theme end)
+view.set_theme = set_theme -- needed for the first view
-- On reset, _LOADED['lexer'] is removed. Force a reload in order for set_theme
-- to work properly.
if not arg then view:goto_buffer(buffer) end
+-- Temporary compatibility.
+setmetatable(_L, {__index = function(t, k) return rawget(t, k:gsub('_', '')) or 'No Localization:'..k end})
+setmetatable(textadept.snippets, {__index = function(t, k) return rawget(t, k:gsub('^_', '')) end})
+buffer.set_theme = function(...) view:set_theme(select(2, ...)); events.connect(events.INITIALIZED, function() ui.dialogs.msgbox{title='Compatibility issue',text='Please change your use of "buffer:set_theme()" to "view:set_theme()"'} end) end
+
-- The remainder of this file defines default buffer properties and applies them
-- to subsequent buffers. Normally, a setting like `buffer.use_tabs = false`
-- only applies to the current (initial) buffer. However, temporarily tap into
@@ -94,7 +95,7 @@ end
-- Default buffer and view settings.
local buffer, view = buffer, view
-buffer:set_theme(not CURSES and 'light' or 'term')
+view:set_theme(not CURSES and 'light' or 'term')
-- Multiple Selection and Virtual Space
buffer.multiple_selection = true
@@ -296,6 +297,8 @@ for _, mt in ipairs{buffer_mt, view_mt} do
mt.__index, mt.__newindex = mt.__orig_index, mt.__orig_newindex
end
+local SETLEXERLANGUAGE = _SCINTILLA.properties.lexer_language[2]
+
-- Sets default properties for a Scintilla document.
events.connect(events.BUFFER_NEW, function()
local buffer = _G.buffer
@@ -303,7 +306,6 @@ events.connect(events.BUFFER_NEW, function()
local SETDIRECTPOINTER = _SCINTILLA.properties.doc_pointer[2]
local SETLUASTATE = _SCINTILLA.functions.change_lexer_state[1]
local LOADLEXERLIBRARY = _SCINTILLA.functions.load_lexer_library[1]
- local SETLEXERLANGUAGE = _SCINTILLA.properties.lexer_language[2]
buffer.lexer_language = 'lpeg'
buffer:private_lexer_call(SETDIRECTFUNCTION, buffer.direct_function)
buffer:private_lexer_call(SETDIRECTPOINTER, buffer.direct_pointer)
@@ -342,5 +344,6 @@ events.connect(events.VIEW_NEW, function()
-- 'style.default' references. Styles are now stale and need refreshing. This
-- is not an issue in BUFFER_NEW since a lexer is set immediately afterwards,
-- which refreshes styles.
- buffer:set_lexer(buffer._lexer or 'text')
+ -- Note: `buffer:set_lexer()` is insufficient for some reason.
+ buffer:private_lexer_call(SETLEXERLANGUAGE, buffer._lexer or 'text')
end, 1)