From cb6f0241890a0949acd6b38fe30cda061868ef26 Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Tue, 23 Dec 2008 14:43:10 -0500 Subject: Use table.concat instead of multiple string concats for performance improvement. --- core/ext/keys.lua | 8 ++------ core/file_io.lua | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 19 deletions(-) (limited to 'core') diff --git a/core/ext/keys.lua b/core/ext/keys.lua index 7ac2e0b1..99c0d143 100644 --- a/core/ext/keys.lua +++ b/core/ext/keys.lua @@ -217,13 +217,9 @@ end -- of -1. This way, pcall will return false and -1, where the -1 can easily and -- efficiently be checked rather than using a string error message. try_get_cmd = function(active_table) - local str_seq = '' - for _, key_seq in ipairs(keychain) do - str_seq = str_seq..key_seq..' ' - active_table = active_table[key_seq] - end + for _, key_seq in ipairs(keychain) do active_table = active_table[key_seq] end if #active_table == 0 and next(active_table) then - textadept.statusbar_text = 'Keychain: '..str_seq + textadept.statusbar_text = 'Keychain: '..table.concat(keychain, ' ') error(-1, 0) else local func = active_table[1] diff --git a/core/file_io.lua b/core/file_io.lua index 8ce76306..21082f11 100644 --- a/core/file_io.lua +++ b/core/file_io.lua @@ -239,10 +239,10 @@ end -- $HOME/.ta_session if not specified. -- @usage textadept.io.save_session(filename) function save_session(filename) - local session = '' - local buffer_line = "buffer: %d %d %d %s\n" -- anchor, cursor, line, filename - local split_line = "%ssplit%d: %s %d\n" -- level, number, type, size - local view_line = "%sview%d: %d\n" -- level, number, doc index + local session = {} + local buffer_line = "buffer: %d %d %d %s" -- anchor, cursor, line, filename + local split_line = "%ssplit%d: %s %d" -- level, number, type, size + local view_line = "%sview%d: %d" -- level, number, doc index -- Write out opened buffers. (buffer: filename) local buffer_indices, offset = {}, 0 for idx, buffer in ipairs(textadept.buffers) do @@ -252,7 +252,7 @@ function save_session(filename) local current_pos = current and 'current_pos' or '_current_pos' local first_visible_line = current and 'first_visible_line' or '_first_visible_line' - session = session.. + session[#session + 1] = buffer_line:format(buffer[anchor] or 0, buffer[current_pos] or 0, buffer[first_visible_line] or 0, buffer.filename) buffer_indices[buffer.doc_pointer] = idx - offset @@ -265,42 +265,42 @@ function save_session(filename) local c1, c2 = split[1], split[2] local vertical, size = tostring(split.vertical), split.size local spaces = (' '):rep(level) - session = session..split_line:format(spaces, number, vertical, size) + session[#session + 1] = split_line:format(spaces, number, vertical, size) spaces = (' '):rep(level + 1) if type(c1) == 'table' then write_split(c1, level + 1, 1) else - session = session..view_line:format(spaces, 1, c1) + session[#session + 1] = view_line:format(spaces, 1, c1) end if type(c2) == 'table' then write_split(c2, level + 1, 2) else - session = session..view_line:format(spaces, 2, c2) + session[#session + 1] = view_line:format(spaces, 2, c2) end end local splits = textadept.get_split_table() if type(splits) == 'table' then write_split(splits, 0, 0) else - session = session..view_line:format('', 1, splits) + session[#session + 1] = view_line:format('', 1, splits) end -- Write out the current focused view. local current_view = view for idx, view in ipairs(textadept.views) do if view == current_view then current_view = idx break end end - session = session..("current_view: %d\n"):format(current_view) + session[#session + 1] = ("current_view: %d"):format(current_view) -- Write out other things. local size = textadept.size - session = session..("size: %d %d\n"):format( size[1], size[2] ) + session[#session + 1] = ("size: %d %d"):format( size[1], size[2] ) local pm = textadept.pm - session = session..("pm: %d %s\n"):format(pm.width, pm.entry_text) + session[#session + 1] = ("pm: %d %s"):format(pm.width, pm.entry_text) -- Write the session. local user_dir = os.getenv(not WIN32 and 'HOME' or 'USERPROFILE') if not user_dir then return end local ta_session = user_dir..'/.ta_session' local f = io.open(filename or ta_session, 'w') - if f then f:write(session) f:close() end + if f then f:write( table.concat(session, '\n') ) f:close() end end --- -- cgit v1.2.3