View Issue Details

IDProjectCategoryView StatusLast Update
0002388PluginsLuaMacro / Macro Browserpublic2017-10-23 10:29
ReporterJohnDoe Assigned Toshmuel  
PrioritynormalSeverityminorReproducibilityalways
Status assignedResolutionreopened 
Product Version3.0 
Summary0002388: При ошибках сообщения системы на русском могут не отображаться
Descriptionhttp://forum.farmanager.com/viewtopic.php?p=104529#p104529
>Это системное сообщение. Винда его посылает в 1251, а LuaMacro ожидает UTF-8 и обламывается. Надо подумать, что можно сделать.
Steps To Reproducelm:post require"cio".buffersize{width=cio.buffersize().width-1}
Если ширина буфера равна ширине окна, то возникает ошибка
TagsNo tags attached.

Relationships

related to 0002817 assignedshmuel Far Manager Крякозябры в сообщении об ошибке загрузки 

Activities

shmuel

2014-05-04 09:55

developer   bugnote:0012332

Попробуйте заменить функцию 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

JohnDoe

2014-05-05 09:30

updater   bugnote:0012340

Проверено на Windows XP, работает.

shmuel

2014-05-05 12:31

developer   bugnote:0012343

LuaMacro build 328.

JohnDoe

2014-05-19 13:21

updater   bugnote:0012416

http://forum.farmanager.com/viewtopic.php?p=118968#p118968

В качестве msg часто выступает строка, возвращаемая функциями loadfile или pcall.
В начале сообщения указывается имя файла.
Проблема в том, что длинные пути усекаются до определённой длины, и в результате может получится невалидный UTF-8.

JohnDoe

2014-05-19 13:36

updater   bugnote:0012417

Можно пытаться фиксить 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)

JohnDoe

2014-05-19 14:43

updater   bugnote:0012418

Надо наверно проверять, что проблемное место в начале обрезанного имени.

    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

JohnDoe

2017-10-22 13:45

updater   bugnote:0015728

И снова напоролся на ту же проблему http://forum.farmanager.com/viewtopic.php?p=146579#p146579

В дополнение к уже изложенному появились такие мысли:

1) Строка, которая может оказаться ANSI, возможна только при ошибках времени исполнения, а при синтаксических ошибках никакая эвристика не нужна.

2) Итоговое сообщение об ошибке включает также traceback.
Перекодировать из ANSI нужно только само сообщение, до слияния с traceback.

JohnDoe

2017-10-23 10:29

updater   bugnote:0015736

Готов представить свои предложения в виде патча, как только кто-либо из разработчиков выразит готовность его рассмотреть.

Issue History

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