From 9c5f059926f9b194c09e066bcf8631198cf13844 Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Wed, 9 Mar 2011 19:10:37 -0500 Subject: Snapopen respects filesystem encoding; modules/textadept/snapopen.lua --- modules/textadept/snapopen.lua | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'modules/textadept') diff --git a/modules/textadept/snapopen.lua b/modules/textadept/snapopen.lua index 3f27c9f0..74c2c2fc 100644 --- a/modules/textadept/snapopen.lua +++ b/modules/textadept/snapopen.lua @@ -9,7 +9,7 @@ module('_m.textadept.snapopen', package.seeall) -- Markdown: -- ## Settings -- --- * `PATHS`: Table of default paths to search. +-- * `PATHS`: Table of default UTF-8 paths to search. -- * `DEFAULT_DEPTH`: Maximum directory depth to search (defaults to 4). -- * `MAX`: Maximum number of files to list (defaults to 1000). -- @@ -46,24 +46,26 @@ local DEPTH = DEFAULT_DEPTH local function exclude(file, filter) if not filter then return false end local string_match, string_sub = string.match, string.sub + local utf8_file = file:iconv('UTF-8', _CHARSET) for i = 1, #filter do local patt = filter[i] if string_sub(patt, 1, 1) ~= '!' then - if string_match(file, patt) then return true end + if string_match(utf8_file, patt) then return true end else - if not string_match(file, string_sub(patt, 2)) then return true end + if not string_match(utf8_file, string_sub(patt, 2)) then return true end end end return false end -- Adds a directory's contents to a list of files. --- @param dir The directory to open. +-- @param utf8_dir The UTF-8 directory to open. -- @param list The list of files to add dir's contents to. -- @param depth The current depth of nested folders. -- @param filter The filter table. -local function add_directory(dir, list, depth, filter) +local function add_directory(utf8_dir, list, depth, filter) local string_match, string_gsub, MAX = string.match, string.gsub, MAX + local dir = utf8_dir:iconv(_CHARSET, 'UTF-8') for file in lfs_dir(dir) do if not string_match(file, '^%.%.?$') then file = dir..(not WIN32 and '/' or '\\')..file @@ -81,12 +83,14 @@ end --- -- Quickly open a file in set of directories. --- @param paths A string directory path or table of directory paths to search. +-- @param utf8_paths A UTF-8 string directory path or table of UTF-8 directory +-- paths to search. -- @param filter A filter for files and folders to exclude. The filter may be -- a string or table. Each filter is a Lua pattern. Any files matching a -- filter are excluded. Prefix a pattern with '!' to exclude any files that -- do not match the filter. Directories can be excluded by adding filters to --- a table assigned to a 'folders' key in the filter table. +-- a table assigned to a 'folders' key in the filter table. All strings should +-- be UTF-8 encoded. -- @param exclusive Flag indicating whether or not to exclude PATHS in the -- search. Defaults to false. -- @param depth Number of directories to recurse into for finding files. @@ -95,17 +99,17 @@ end -- @usage _m.textadept.snapopen.open(buffer.filename:match('^.+/'), nil, true) -- @usage _m.textadept.snapopen.open(nil, '!%.lua$') -- @usage _m.textadept.snapopen.open(nil, { folders = { '%.hg' } }) -function open(paths, filter, exclusive, depth) - if not paths then paths = {} end - if type(paths) == 'string' then paths = { paths } end +function open(utf8_paths, filter, exclusive, depth) + if not utf8_paths then utf8_paths = {} end + if type(utf8_paths) == 'string' then utf8_paths = { utf8_paths } end if not filter then filter = {} end if type(filter) == 'string' then filter = { filter } end if not exclusive then - for _, path in ipairs(PATHS) do paths[#paths + 1] = path end + for _, path in ipairs(PATHS) do utf8_paths[#utf8_paths + 1] = path end end DEPTH = depth or DEFAULT_DEPTH local list = {} - for _, path in ipairs(paths) do add_directory(path, list, 1, filter) end + for _, path in ipairs(utf8_paths) do add_directory(path, list, 1, filter) end if #list >= MAX then gui.dialog('ok-msgbox', '--title', L('File Limit Exceeded'), -- cgit v1.2.3