diff options
author | 2009-07-09 17:03:16 -0400 | |
---|---|---|
committer | 2009-07-09 17:03:16 -0400 | |
commit | 1038b619a1d4d7c40fc6bcf109d3732e0a4d6046 (patch) | |
tree | 453554a9ccb26c485f1a8d504d4c93a84a376eb9 | |
parent | 29808b6c6224d22a2f36b1d1a573b23001a0638c (diff) | |
download | textadept-1038b619a1d4d7c40fc6bcf109d3732e0a4d6046.tar.gz textadept-1038b619a1d4d7c40fc6bcf109d3732e0a4d6046.zip |
Restore lexer, don't keep querying mime-types tables; core/ext/mime_types.lua
-rw-r--r-- | core/ext/mime_types.lua | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/core/ext/mime_types.lua b/core/ext/mime_types.lua index 6d607b6c..5b45b710 100644 --- a/core/ext/mime_types.lua +++ b/core/ext/mime_types.lua @@ -44,9 +44,26 @@ if f then end --- --- [Local function] Sets the buffer's lexer based on filename, shebang words, or --- first line pattern. -local function set_lexer() +-- [Local function] Replacement for buffer:set_lexer_language(). +-- Sets a buffer._lexer field so it can be restored without querying the +-- mime-types tables. Also if the user manually sets the lexer, it should be +-- restored. +-- @param buffer The buffer to set the lexer language of. +-- @param lang The string language to set. +local function set_lexer_language(buffer, lang) + buffer._lexer = lang + buffer:set_lexer_language_(lang) +end +textadept.events.add_handler('buffer_new', + function() + buffer.set_lexer_language_ = buffer.set_lexer_language + buffer.set_lexer_language = set_lexer_language + end) + +--- +-- [Local function] Performs actions suitable for a new buffer. +-- Sets the buffer's lexer language and loads the language module. +local function handle_new() local lexer if buffer.filename then lexer = extensions[buffer.filename:match('[^/\\.]+$')] @@ -55,10 +72,8 @@ local function set_lexer() local line = buffer:get_line(0) if line:find('^#!') then for word in line:gsub('[/\\]', ' '):gmatch('%S+') do - if shebangs[word] then - lexer = shebangs[word] - break - end + lexer = shebangs[word] + if lexer then break end end end if not lexer then @@ -71,13 +86,6 @@ local function set_lexer() end end buffer:set_lexer_language(lexer or 'container') -end - ---- --- [Local function] Performs actions suitable for a new buffer. --- Sets the buffer's lexer language and loads the language module. -local function handle_new() - set_lexer() if buffer.filename then local lang = extensions[buffer.filename:match('[^/\\.]+$')] if lang then @@ -91,7 +99,14 @@ local function handle_new() end end +--- +-- [Local function] Sets the buffer's lexer based on filename, shebang words, or +-- first line pattern. +local function restore_lexer() + buffer:set_lexer_language(buffer._lexer or 'container') +end + textadept.events.add_handler('file_opened', handle_new) textadept.events.add_handler('file_saved_as', handle_new) -textadept.events.add_handler('buffer_after_switch', set_lexer) -textadept.events.add_handler('view_new', set_lexer) +textadept.events.add_handler('buffer_after_switch', restore_lexer) +textadept.events.add_handler('view_new', restore_lexer) |