Far.Cfg_Get

Здесь обсуждается всё, что касается макросов.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Far.Cfg_Get

Post by Smitis »

Latest post of the previous page:

Ну зачем же так жёстко! Тем более нет возможности заранее проверить, есть такой параметр или нет.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

Ну как же нет, когда есть.
Far.Cfg_Get позволяет получить только значение известного параметра.
И если параметр не найден, то это не просто так вам, а чёткий сигнал исправить макрос.

Update
http://bugs.farmanager.com/view.php?id=2705
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Far.Cfg_Get

Post by Smitis »

Гипотетическая ситуация: необходимо прочитать новый параметр (в новой версии ФАРа) и при этом сохранить работоспособность со старыми версиями. Вместо того, чтобы просто прочитать параметр и увидеть, есть значение или нет, придётся ещё и проверять версию ФАРа
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

Или pcall.
Но как по мне, то версия фара надёжнее.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Re: Far.Cfg_Get

Post by LAT »

Т.е. искать в changelog'е, с какой версии появился или исчез тот или иной параметр, и хардкодить в макросе версию FAR'а только для того, чтобы макрос работал? Как-то неспортивно это...
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Far.Cfg_Get

Post by Shmuel »

Пока изменения билда 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.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

(1)
На мантисе я предлагал указывать одну строку, а не (key, name).
Это на мой взгляд практичнее, потому что мы никогда не оперируем этими параметрами отдельно.
Как там оно физически в базе не имеет значения, тем более это макрофункция, а не функция АПИ.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

(2)
На мантисе я предлагал возвращать одно значение.
Это не функция апи, мне незачем в макросе анализировать успех/неудачу.
Это макрофункция, достаточно фатальной ошибки, я просто открою макрофайл и исправлю.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

(3)
bool3 -> 0,1,2 преобразуются соответственно в false,true,nil
Или вместо nil возвращать строку "other"
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Far.Cfg_Get

Post by Shmuel »

John Doe wrote:На мантисе я предлагал указывать одну строку, а не (key, name).
Это на мой взгляд практичнее, потому что мы никогда не оперируем этими параметрами отдельно.
Как там оно физически в базе не имеет значения, тем более это макрофункция, а не функция АПИ.
Не знаю, кто это мы, и где пример оперирования не отдельно.
Это, возможно, даст небольшое удобство, но учитывая, что key и name могут иметь точки внутри, теоретически возможны накладки:
Interface.Completion, Append
и
Interface, Completion.Append
дают одно и то же.
На мантисе я предлагал возвращать одно значение.
Используйте assert.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

(4)
tp: string ("bool", "bool3", "string", "int64")
Может быть стоит ориентироваться на представление этой информации в редакторе конфигурации (far:config)?
Вижу там "boolean" а не "bool", и "3-state", а не "bool3", "integer" вместо "int64"
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Far.Cfg_Get

Post by Shmuel »

John Doe wrote:(4)
tp: string ("bool", "bool3", "string", "int64")
Может быть стоит ориентироваться на представление этой информации в редакторе конфигурации (far:config)?
Вижу там "boolean" а не "bool", и "3-state", а не "bool3", "integer" вместо "int64"
Можно изменить.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Far.Cfg_Get

Post by Shmuel »

John Doe wrote:(2)
На мантисе я предлагал возвращать одно значение.
Это не функция апи, мне незачем в макросе аназизировать успех/неудачу.
Это макрофункция, достаточно фатальной ошибки, я просто открою макрофайл и исправлю.
Возможно, сделаю, как вы предлагаете.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

Shmuel wrote:Не знаю, кто это мы, и где пример оперирования не отдельно.
В справке же.
Вообще у пользователя всего лишь 2 источника информации о наименовании параметров:
1) индекс файла помощи
2) редактор конфигурации (far:config)
В обоих случаях мы видим слитное написание.
Shmuel wrote:Это, возможно, даст небольшое удобство, но учитывая, что key и name могут иметь точки внутри, теоретически возможны накладки:
Разделы могут содержать точки, параметры нет. Так принято сейчас, и врядли изменится в будущем, исходя хотя бы из предудущего тезиса.
Но если есть сомнения, давайте сделаем оба варианта (т.е. первый параметр будет опционален).
Shmuel wrote:
На мантисе я предлагал возвращать одно значение.
Используйте assert.
Просто не хотелось перегружать функцию бесполезными наворотами.
Мне сложно придумать сценарий, где необходимо было бы обработать неуспех иначе чем редактированием макрофайла.
И как бы там ни было, всегда можно применить pcall.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Far.Cfg_Get

Post by Shmuel »

Так это выглядит сейчас:

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()).
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Far.Cfg_Get

Post by John Doe »

Спасибо, то что надо.
Post Reply

Return to “Обсуждение макросов”