Latest post of the previous page:
Ну зачем же так жёстко! Тем более нет возможности заранее проверить, есть такой параметр или нет.Far.Cfg_Get
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Far.Cfg_Get
Ну как же нет, когда есть.
Far.Cfg_Get позволяет получить только значение известного параметра.
И если параметр не найден, то это не просто так вам, а чёткий сигнал исправить макрос.
Update
http://bugs.farmanager.com/view.php?id=2705
Far.Cfg_Get позволяет получить только значение известного параметра.
И если параметр не найден, то это не просто так вам, а чёткий сигнал исправить макрос.
Update
http://bugs.farmanager.com/view.php?id=2705
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Far.Cfg_Get
Гипотетическая ситуация: необходимо прочитать новый параметр (в новой версии ФАРа) и при этом сохранить работоспособность со старыми версиями. Вместо того, чтобы просто прочитать параметр и увидеть, есть значение или нет, придётся ещё и проверять версию ФАРа
Разум когда-нибудь победит.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Far.Cfg_Get
Пока изменения билда 4077 свежие, хотелось бы получить обратную связь по новой функции Far.GetConfig.
Вопросы, предложения, критика - всё ОК.
Вот описание того, что сделано:
Вопросы, предложения, критика - всё ОК.
Вот описание того, что сделано:
Code: Select all
ok, val, tp = Far.GetConfig (key, name)
Параметры:
key: string
name: string
Возвращает:
ok: boolean
Это успех или неуспех операции.
В случае неуспеха, 2-е и 3-е возвращаемые значения не несут полезной информации.
val: boolean, nil, string, number, or int64
Это собственно запрашиваемая величина.
Преобразование типов между Far Manager и Lua осуществляются следующим образом:
bool -> boolean
bool3 -> 0,1,2 преобразуются соответственно в false,true,nil
string -> string
int64 -> number (если возможно преобразование без потери точности), или
userdata (int64) - величина, создаваемая библиотекой bit64.
tp: string ("bool", "bool3", "string", "int64")
Это тип оригинальной величины в Far Manager.
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Far.Cfg_Get
(1)
На мантисе я предлагал указывать одну строку, а не (key, name).
Это на мой взгляд практичнее, потому что мы никогда не оперируем этими параметрами отдельно.
Как там оно физически в базе не имеет значения, тем более это макрофункция, а не функция АПИ.
На мантисе я предлагал указывать одну строку, а не (key, name).
Это на мой взгляд практичнее, потому что мы никогда не оперируем этими параметрами отдельно.
Как там оно физически в базе не имеет значения, тем более это макрофункция, а не функция АПИ.
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Far.Cfg_Get
(2)
На мантисе я предлагал возвращать одно значение.
Это не функция апи, мне незачем в макросе анализировать успех/неудачу.
Это макрофункция, достаточно фатальной ошибки, я просто открою макрофайл и исправлю.
На мантисе я предлагал возвращать одно значение.
Это не функция апи, мне незачем в макросе анализировать успех/неудачу.
Это макрофункция, достаточно фатальной ошибки, я просто открою макрофайл и исправлю.
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Far.Cfg_Get
(3)
bool3 -> 0,1,2 преобразуются соответственно в false,true,nil
Или вместо nil возвращать строку "other"
bool3 -> 0,1,2 преобразуются соответственно в false,true,nil
Или вместо nil возвращать строку "other"
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Far.Cfg_Get
Не знаю, кто это мы, и где пример оперирования не отдельно.John Doe wrote:На мантисе я предлагал указывать одну строку, а не (key, name).
Это на мой взгляд практичнее, потому что мы никогда не оперируем этими параметрами отдельно.
Как там оно физически в базе не имеет значения, тем более это макрофункция, а не функция АПИ.
Это, возможно, даст небольшое удобство, но учитывая, что key и name могут иметь точки внутри, теоретически возможны накладки:
Interface.Completion
, Append
и
Interface
, Completion.Append
дают одно и то же.
Используйте assert.На мантисе я предлагал возвращать одно значение.
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Far.Cfg_Get
(4)
tp: string ("bool", "bool3", "string", "int64")
Может быть стоит ориентироваться на представление этой информации в редакторе конфигурации (far:config)?
Вижу там "boolean" а не "bool", и "3-state", а не "bool3", "integer" вместо "int64"
tp: string ("bool", "bool3", "string", "int64")
Может быть стоит ориентироваться на представление этой информации в редакторе конфигурации (far:config)?
Вижу там "boolean" а не "bool", и "3-state", а не "bool3", "integer" вместо "int64"
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Far.Cfg_Get
Можно изменить.John Doe wrote:(4)
tp: string ("bool", "bool3", "string", "int64")
Может быть стоит ориентироваться на представление этой информации в редакторе конфигурации (far:config)?
Вижу там "boolean" а не "bool", и "3-state", а не "bool3", "integer" вместо "int64"
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Far.Cfg_Get
Возможно, сделаю, как вы предлагаете.John Doe wrote:(2)
На мантисе я предлагал возвращать одно значение.
Это не функция апи, мне незачем в макросе аназизировать успех/неудачу.
Это макрофункция, достаточно фатальной ошибки, я просто открою макрофайл и исправлю.
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Far.Cfg_Get
В справке же.Shmuel wrote:Не знаю, кто это мы, и где пример оперирования не отдельно.
Вообще у пользователя всего лишь 2 источника информации о наименовании параметров:
1) индекс файла помощи
2) редактор конфигурации (far:config)
В обоих случаях мы видим слитное написание.
Разделы могут содержать точки, параметры нет. Так принято сейчас, и врядли изменится в будущем, исходя хотя бы из предудущего тезиса.Shmuel wrote:Это, возможно, даст небольшое удобство, но учитывая, что key и name могут иметь точки внутри, теоретически возможны накладки:
Но если есть сомнения, давайте сделаем оба варианта (т.е. первый параметр будет опционален).
Просто не хотелось перегружать функцию бесполезными наворотами.Shmuel wrote:Используйте assert.На мантисе я предлагал возвращать одно значение.
Мне сложно придумать сценарий, где необходимо было бы обработать неуспех иначе чем редактированием макрофайла.
И как бы там ни было, всегда можно применить pcall.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Far.Cfg_Get
Так это выглядит сейчас:
Code: Select all
val, tp = Far.GetConfig (keyname)
Параметры:
keyname: string
Возвращает:
val: boolean, string, number, or int64
Это значение запрашиваемой величины.
Преобразование типов между Far Manager и Lua осуществляются следующим образом:
boolean -> boolean
3-state -> 0,1,2 преобразуются соответственно в false,true,"other"
string -> string
integer -> number (если возможно преобразование без потери точности) или
userdata (int64) - величина, создаваемая библиотекой bit64.
tp: string ("boolean", "3-state", "string", "integer")
Это тип оригинальной величины в Far Manager.
Примечание:
В случае ошибки (некорректный аргумент, или Far Manager не нашёл указанной опции)
данная функция прерывает исполнение (вызывает error()).