Русские буквы в макросе

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Русские буквы в макросе

Post by iva »

Хочу написать макрос, который бы вызывался по нажатию "\" и в зависимости от
следующей набранной буквы выполнял те или иные действия. Для этого использую такой код

В макросе пишу все в одну строку и, естественно, кавычки экранирую "\".
Результат: Если запускаю из командной строки по macro:post @filename.lua, то проверка обоих условий в if работает правильно. Если же запускаю из редактора как макрос, то сравнение с "к" всегда дает false. В обоих случаях print(s) выдает знак вопроса, если в s русская буква.
Понимаю, что тут проблема с кодировкой (у меня в редакторе OEM). Подскажите, как ее решить?
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Русские буквы в макросе

Post by zg »

файл с макросом сохранить в кодировке utf-8.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Re: Русские буквы в макросе

Post by iva »

Спасибо. Со сравнением я пока справлялся при помощи указания кода символа, то есть вместо =="к" писал =="\170". А как быть с выводом значения строки по print, если там русские буквы?
Этот вопрос, видимо, надо писать в ликбез по lua, продублирую и там.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Re: Русские буквы в макросе

Post by iva »

Подскажите в каой кодировке работате os.execute.
Если зависит от системы, то у меня Windows 7 русская.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Русские буквы в макросе

Post by Shmuel »

iva wrote:Подскажите в каой кодировке работате os.execute.
У меня работает в ANSI-кодировке. Текст из UTF-8 в ANSI можно преобразовать так:
win.WideCharToMultiByte(win.Utf8ToUtf16(str), win.GetACP())

Функция os.execute - не юникодная. Лучше попробуйте win.ShellExecute - она юникодная.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Re: Русские буквы в макросе

Post by iva »

Спасибо. Ваша команда мне помогла.
А с win.ShellExecute я пробовал разобраться. Действие у меня нестандартное, а тогда, как я понял, его надо сначала в реестр заносить. Это для меня сложнее.
kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

не получается через lua передать прграмме фаил на чтение

Post by kosta »

Здравствуйте.Хочу чтобы html htm файлы открывались браузером links когда файл находится под курсором по ctrl+r
Написал
<code>
local function fu()
local name=APanel.Current
os.execute("%farhome%\\..\\links\\links.exe "..name)
end
Macro{
area="Shell";
key="Ctrlr";
action=fu
}
такой код работает когда имя файла на английском,когда на русском система не опознает параметры или links пишет что не может найти файл <какие то кракозябры>.html.Видно переменная name привратилась в unicode строку.Как это исправить?
Заранее спасибо.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: не получается через lua передать прграмме фаил на чтение

Post by Shmuel »

kosta wrote:такой код работает когда имя файла на английском,когда на русском система не опознает
См. два сообщения, начиная от http://forum.farmanager.com/viewtopic.p ... 65#p114865.
В той теме и задавать надо подобные вопросы.
kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta »

Спасибо команде Фар за помощь!
kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta »

Подскажите пожалуйста почему не работает lua код?
<code>
local str=win.WideCharToMultyByte(win.Utf8ToUtf16(str), win.GetACP())
os.execute(str)
</code>
Пишет:
attempt to call
field 'WideCharToMultyByte' (a nil value)
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Русские буквы в макросе

Post by Shmuel »

А у вас в имени функции одна буковка неправильная.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Русские буквы в макросе

Post by Shmuel »

Кстати, LuaJIT допускает использование UTF-8 символов в идентификаторах. Это, в частности, означает, что можно писать макросы для Фара с русскими именами переменных и функций.
kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta »

Обьясните пожалуйста ,что это за обьект win и почему не соответствуют прототипы API Windows(или соответствуют?) luafar прототипам,вот например win.WideCharToMultyByte(win.Utf8ToUtf16(str), win.GetACP()),где посмотреть как использовать
нужные win api в Luafar,а то я снимаю русское имя файла под курсором в панелях функцией local name=APanel.Current, в
name оказывается юникод и os.execute не понимает строку?
Спасибо
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Русские буквы в макросе

Post by Shmuel »

Должно быть win.WideCharToMultiByte. У вас одна неправильная буква, о чём уже было сказано.
kosta
Posts: 13
Joined: Mon 25 Nov, 2013 10:44

Re: Русские буквы в макросе

Post by kosta »

Буковка найдена. теперь все работает.Спасибо большое!
Post Reply

Return to “Нужна помощь”