From 9ddc6a3887d4600dcdce6699fd54989f900e20ab Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Tue, 4 Dec 2012 11:46:51 -0500 Subject: Do not error when opening a nonexistent file; core/file_io.lua Thanks to Pedro Andres Aranda Gutierrez. --- core/file_io.lua | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'core/file_io.lua') diff --git a/core/file_io.lua b/core/file_io.lua index eff67008..2cdced8b 100644 --- a/core/file_io.lua +++ b/core/file_io.lua @@ -161,12 +161,15 @@ function io.open_file(utf8_filenames) if utf8_filename == buffer.filename then view:goto_buffer(i) return end end - local filename = utf8_filename:iconv(_CHARSET, 'UTF-8') + local filename, text = utf8_filename:iconv(_CHARSET, 'UTF-8'), '' local f, err = io.open(filename, 'rb') - if not f then error(err) end - local text = f:read('*all') - f:close() - if not text then return end -- filename exists, but cannot read it + if f then + text = f:read('*all') + f:close() + if not text then return end -- filename exists, but cannot read it + elseif lfs.attributes(filename) then + error(err) + end local buffer = new_buffer() -- Tries to detect character encoding and convert text from it to UTF-8. local encoding, encoding_bom = detect_encoding(text) @@ -198,7 +201,7 @@ function io.open_file(utf8_filenames) buffer:add_text(text, #text) buffer:goto_pos(0) buffer:empty_undo_buffer() - buffer.modification_time = lfs.attributes(filename).modification + buffer.mod_time = lfs.attributes(filename, 'modification') or os.time() buffer.filename = utf8_filename buffer:set_save_point() events.emit(events.FILE_OPENED, utf8_filename) @@ -230,7 +233,7 @@ local function reload(buffer) buffer:line_scroll(0, first_visible_line) buffer:goto_pos(pos) buffer:set_save_point() - buffer.modification_time = lfs.attributes(filename).modification + buffer.mod_time = lfs.attributes(filename, 'modification') end -- LuaDoc is in core/.buffer.luadoc. @@ -267,7 +270,7 @@ local function save(buffer) f:write(text) f:close() buffer:set_save_point() - buffer.modification_time = lfs.attributes(filename).modification + buffer.mod_time = lfs.attributes(filename, 'modification') if buffer._type then buffer._type = nil end events.emit(events.FILE_AFTER_SAVE, buffer.filename) end @@ -347,10 +350,10 @@ local function update_modified_file() local buffer = buffer local utf8_filename = buffer.filename local filename = utf8_filename:iconv(_CHARSET, 'UTF-8') - local attributes = lfs.attributes(filename) - if not attributes or not buffer.modification_time then return end - if buffer.modification_time < attributes.modification then - buffer.modification_time = attributes.modification + local mod_time = lfs.attributes(filename, 'modification') + if not mod_time or not buffer.mod_time then return end + if buffer.mod_time < mod_time then + buffer.mod_time = mod_time if gui.dialog('yesno-msgbox', '--title', _L['Reload?'], '--text', _L['Reload modified file?'], -- cgit v1.2.3