View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002388 | Plugins | LuaMacro / Macro Browser | public | 2013-04-20 08:43 | 2017-10-23 10:29 |
Reporter | JohnDoe | Assigned To | shmuel | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | assigned | Resolution | reopened | ||
Product Version | 3.0 | ||||
Summary | 0002388: При ошибках сообщения системы на русском могут не отображаться | ||||
Description | http://forum.farmanager.com/viewtopic.php?p=104529#p104529 >Это системное сообщение. Винда его посылает в 1251, а LuaMacro ожидает UTF-8 и обламывается. Надо подумать, что можно сделать. | ||||
Steps To Reproduce | lm:post require"cio".buffersize{width=cio.buffersize().width-1} Если ширина буфера равна ширине окна, то возникает ошибка | ||||
Tags | No tags attached. | ||||
|
Попробуйте заменить функцию ErrMsg в luamacro.lua на приведенную ниже (потребуется перезагрузка Фара). local ErrMsg = function(msg,title) if type(msg)=="string" and not msg:utf8valid() then local wstr = win.MultiByteToWideChar(msg, win.GetACP(), "e") msg = wstr and win.Utf16ToUtf8(wstr) or msg end far.Message(msg,title or "LuaMacro",nil,"wl") end |
|
Проверено на Windows XP, работает. |
|
LuaMacro build 328. |
|
http://forum.farmanager.com/viewtopic.php?p=118968#p118968 В качестве msg часто выступает строка, возвращаемая функциями loadfile или pcall. В начале сообщения указывается имя файла. Проблема в том, что длинные пути усекаются до определённой длины, и в результате может получится невалидный UTF-8. |
|
Можно пытаться фиксить msg, возвращаемые loadfile/pcall до передачи в ErrMsg. local function fixUtf8(msg) local success,pos = msg:utf8valid() if not success and string.sub(msg,1,pos)=="..." then return "..."..string.sub(msg,pos+2,-1) end end Использовать как-то так: local f, msg = loafile(....) ErrMsg (fixUtf8(msg) or msg) |
|
Надо наверно проверять, что проблемное место в начале обрезанного имени. local function fixUtf8(msg) local a,b = string.find(msg,"%.%.%.[^:]+") if not a then return end a = a+3 local pos = a while 0==select(2,string.sub(msg,pos,b):utf8valid()) do pos = pos+1 end return pos>a and pos<b and "..."..string.sub(msg,pos,-1) end |
|
И снова напоролся на ту же проблему http://forum.farmanager.com/viewtopic.php?p=146579#p146579 В дополнение к уже изложенному появились такие мысли: 1) Строка, которая может оказаться ANSI, возможна только при ошибках времени исполнения, а при синтаксических ошибках никакая эвристика не нужна. 2) Итоговое сообщение об ошибке включает также traceback. Перекодировать из ANSI нужно только само сообщение, до слияния с traceback. |
|
Готов представить свои предложения в виде патча, как только кто-либо из разработчиков выразит готовность его рассмотреть. |
Date Modified | Username | Field | Change |
---|---|---|---|
2013-04-20 08:43 | JohnDoe | New Issue | |
2014-05-04 09:55 | shmuel | Note Added: 0012332 | |
2014-05-04 10:27 | DrKnS | Project | Far Manager => Plugins |
2014-05-05 09:30 | JohnDoe | Note Added: 0012340 | |
2014-05-05 12:31 | shmuel | Note Added: 0012343 | |
2014-05-05 12:31 | shmuel | Status | new => closed |
2014-05-05 12:31 | shmuel | Assigned To | => shmuel |
2014-05-05 12:31 | shmuel | Resolution | open => fixed |
2014-05-19 13:21 | JohnDoe | Note Added: 0012416 | |
2014-05-19 13:21 | JohnDoe | Status | closed => feedback |
2014-05-19 13:21 | JohnDoe | Resolution | fixed => reopened |
2014-05-19 13:26 | shmuel | Status | feedback => assigned |
2014-05-19 13:36 | JohnDoe | Note Added: 0012417 | |
2014-05-19 14:43 | JohnDoe | Note Added: 0012418 | |
2014-10-02 13:08 | shmuel | Relationship added | related to 0002817 |
2017-10-22 13:45 | JohnDoe | Note Added: 0015728 | |
2017-10-23 10:29 | JohnDoe | Note Added: 0015736 |