Это ОК. Но если я НЕ устанавливаю этот флаг, я не вижу никакой разницы – открывается редактор с несуществующим файлом, то же самое, как если бы я установил этот флаг. Возникает вопрос – зачем тогда этот флаг? (может я недоиспользую какую-то полезность, которую не понимаю).FileName
Name of the file to edit. Unless EF_CREATENEW is set in the Flags parameter, must specify an existing file.
Flags
...
EF_CREATENEW
Opens a new (non-existing) file in the editor, similar to pressing Shift-F4 in FAR.
Зачем нужен EF_CREATENEW?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Зачем нужен EF_CREATENEW?
Согласно энциклопедии
Re: Зачем нужен EF_CREATENEW?
да уж, из 293 (?) сурцов плагинов что у меня есть только двое до такого додумались
\Translate\src\trans.cpp
\FARCmds\OpenCmd.cpp
\Translate\src\trans.cpp
\FARCmds\OpenCmd.cpp
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Зачем нужен EF_CREATENEW?
dolzenko_
В смысле, только в двух плагинах этот флаг используется? Или что-то другое ты имел в виду?
Хорошо бы разобраться и, если что, документацию уточнить. Но это мелочь, конечно.
В смысле, только в двух плагинах этот флаг используется? Или что-то другое ты имел в виду?
Хорошо бы разобраться и, если что, документацию уточнить. Но это мелочь, конечно.
Re: Зачем нужен EF_CREATENEW?
именноNightRoman wrote:dolzenko_
В смысле, только в двух плагинах этот флаг используется? Или что-то другое ты имел в виду?
Translate\src\trans.cpp
FARCmds\OpenCmd.cppInfo.Editor(TransFileName, GetMsg(MTranslate), 0, SizeY, -1, -1,
EF_DELETEONLYFILEONCLOSE | EF_CREATENEW | EF_DISABLEHISTORY, 0, 1);
DWORD Flags=EF_NONMODAL|EF_CREATENEW|EF_ENABLE_F6|EF_IMMEDIATERETURN;
if ( outputtofile )
Flags |= EF_DISABLEHISTORY|EF_DELETEONCLOSE;
if ( validForView(TempFileNameErr, Opt.ViewZeroFiles) )
{
wsprintf(fullcmd, "%s%s", titleErr, cmd);
Info.Editor(TempFileNameErr,outputtofile?fullcmd:NULL,0,0,-1,-1,Flags,StartLine,StartChar);
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Зачем нужен EF_CREATENEW?
Все-таки, в чем смысл флага? Документация FAR - туманная на эту тему, я интересуюсь для ясности в FAR.NET документации.
На багу де факто это не тянет, ибо никакого вреда от этого нет, но это все ж недочет и потеря времени "внимательных" читателей документации, которые, если они еще и "добросовестные" разработчики, могут проверять, что происходит при этом флаге ON\OFF.
На багу де факто это не тянет, ибо никакого вреда от этого нет, но это все ж недочет и потеря времени "внимательных" читателей документации, которые, если они еще и "добросовестные" разработчики, могут проверять, что происходит при этом флаге ON\OFF.
Re: Зачем нужен EF_CREATENEW?
По большому счету EF_CREATENEW нужен в тех случаях, если FileName пустой, не задан.
Возможно, что в процессе разработки "ОНА ПОТЕРЯЛАСЯ".
Ок. Давайте разбираться. По цепочке
АПИ флаг EF_CREATENEW при вызове ShellEditor заменяется флагом внутренним FFILEEDIT_CANNEWFILE.
FFILEEDIT_CANNEWFILE проверяется только 1 раз в FileEditor::Init()
Здесь - "если `пустое` имя или задан флаг `пустоты`, то выставим FFILEEDIT_NEW"
BlankFileName у нас получается... (там же)
хмм... а FileName в API::Editor нигде не проверяется на пустоту - пока только в этом вижу ошибку...
или вы про что?
Возможно, что в процессе разработки "ОНА ПОТЕРЯЛАСЯ".
Ок. Давайте разбираться. По цепочке
АПИ флаг EF_CREATENEW при вызове ShellEditor заменяется флагом внутренним FFILEEDIT_CANNEWFILE.
FFILEEDIT_CANNEWFILE проверяется только 1 раз в FileEditor::Init()
Code: Select all
if(BlankFileName || Flags.Check(FFILEEDIT_CANNEWFILE))
Flags.Set(FFILEEDIT_NEW);
BlankFileName у нас получается... (там же)
Code: Select all
int BlankFileName=!StrCmp(Name,UMSG(MNewFileName));
или вы про что?
We are the Borg. You will be assimilated.
So Say We All!
So Say We All!
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Зачем нужен EF_CREATENEW?
Ну примерно про это. Вот примеры на PowerShell, который через FAR.NET устанавливает или не устанавливает этот флаг
Code: Select all
# Пустое имя файла, любой флаг IsNew
# В любом случае получаем Exception calling "Open" with "0" argument(s): "Cannot open the file ''"
$e = $Far.CreateEditor()
$e.IsNew = ... # любое значение - $true или $false
$e.Open()
Code: Select all
# Непустое имя файла, любой флаг IsNew
# В любом случае открывается существующий или несуществующий файл (любое сочетание с флагом)
$e = $Far.CreateEditor()
$e.IsNew = ... # любое значение - $true или $false
$e.FileName = 'существующий или несуществующий файл'
$e.Open()
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Зачем нужен EF_CREATENEW?
Проверяю, а что именно?
При пустом имени файла ошибки нет, Фар подставит ?New File?
При непустом откроет существующий или нет файл с указанным именем.
Флаг EF_CREATENEW пофигу.
Так должно быть?
При пустом имени файла ошибки нет, Фар подставит ?New File?
При непустом откроет существующий или нет файл с указанным именем.
Флаг EF_CREATENEW пофигу.
Так должно быть?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Зачем нужен EF_CREATENEW?
Да, в такой схеме и работает. Так и задумано? Если да, то это хорошо, помню было неудобно порой имя нового файла программно придумывать (надо ж еще проверить, что такого нет, если и впрямь именно новый хотим). А флаг EF_CREATENEW тогда будет задокументирован, как неиспользуемый? Такой вариант мне нравится (и вроде это не breaking изменение, к тому же).
Другой вопрос попутно. Как бы "в заданной папке" открыть новый файл?
Варианты:
folder\?New File?
folder
не проходят:
- инвалидное имя
- нельзя редактировать папку
Другой вопрос попутно. Как бы "в заданной папке" открыть новый файл?
Варианты:
folder\?New File?
folder
не проходят:
- инвалидное имя
- нельзя редактировать папку
Re: Зачем нужен EF_CREATENEW?
так, я уже совсем запутался...
можешь сформулировать внятно - что ты хочешь?
попутно... где-то здесь, на форуме, я предлагал расширить количество флагов, чтобы Info.Editor по своему поведению был немного похож на Це-функцию fopen.
возможно тогда вот это:
можешь сформулировать внятно - что ты хочешь?
попутно... где-то здесь, на форуме, я предлагал расширить количество флагов, чтобы Info.Editor по своему поведению был немного похож на Це-функцию fopen.
возможно тогда вот это:
...пройдет.не проходят:
- инвалидное имя
- нельзя редактировать папку
We are the Borg. You will be assimilated.
So Say We All!
So Say We All!
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Зачем нужен EF_CREATENEW?
Разбираемся, чего и как хочется
*) разобраться зачем нужен флаг EF_CREATENEW и задокументироать это. Сейчас он ни на что не влияет. Если это нормально, так и документируем – флаг в настоящее время не используется.
*) иметь возможность открыть в редакторе новый файл, не задавая никакого имени (или пустое имя). Как это работает сейчас – никак, Фар выдает ошибку. Это неудобно, надо придумывать имя, а это не так просто по уму, ибо надо еще проверить, что такого файла, действительно нет.
Ты в экспериментальной версии это доработал, при пустом имени на время сеанса до сохранения Фар генерит псевдо имя ?? Файл подразумевается в текущей папке. Все ОК, но идем далее, аппетит приходит во время еды.
*) иметь возможность открыть в редакторе новый файл, не задавая имени, НО указав путь, в какой папке этот файл должен быть. Как это работает сейчас – никак, как это работает в тестовой версии – тоже никак. Логично (?) было бы просто указать путь папки и Фар пусть сообразит, что от него требуется «папка\?псевдоимя?». Но этого нет – Фар говорит «нельзя редактировать папку».
Так внятно?
*) разобраться зачем нужен флаг EF_CREATENEW и задокументироать это. Сейчас он ни на что не влияет. Если это нормально, так и документируем – флаг в настоящее время не используется.
*) иметь возможность открыть в редакторе новый файл, не задавая никакого имени (или пустое имя). Как это работает сейчас – никак, Фар выдает ошибку. Это неудобно, надо придумывать имя, а это не так просто по уму, ибо надо еще проверить, что такого файла, действительно нет.
Ты в экспериментальной версии это доработал, при пустом имени на время сеанса до сохранения Фар генерит псевдо имя ?? Файл подразумевается в текущей папке. Все ОК, но идем далее, аппетит приходит во время еды.
*) иметь возможность открыть в редакторе новый файл, не задавая имени, НО указав путь, в какой папке этот файл должен быть. Как это работает сейчас – никак, как это работает в тестовой версии – тоже никак. Логично (?) было бы просто указать путь папки и Фар пусть сообразит, что от него требуется «папка\?псевдоимя?». Но этого нет – Фар говорит «нельзя редактировать папку».
Так внятно?
- HaRT
- Moderator
- Posts: 10866
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Зачем нужен EF_CREATENEW?
Skirda
Прошу при изменениях также иметь в виду #231.
Прошу при изменениях также иметь в виду #231.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: Зачем нужен EF_CREATENEW?
NightRoman, заноси на мантис, со ссылкой на 231
We are the Borg. You will be assimilated.
So Say We All!
So Say We All!