PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » OpenSource » Создание инструмента для IDE


Создание инструмента для IDE

Сообщений 1 страница 7 из 7

1

Может в будущем можно написать статью, но сейчас столкнулся с тем что часто мои инструменты не работают с не сохранёнными файлами. Понятно что если нет пути, то как к нему дать доступ. Потом выяснилось что %TEMPFILE, но проблема, что для сохранённого кода нужен %FILE. Но я вспомнил что инструмент HeX0R в ком-строке имел две переменные %FILE %TEMPFILE. И вот тут до меня дошло, что если первое пустое, то берётся второе. Но опять проблема, переменные должны быть в кавычках "%FILE" "%TEMPFILE" и тогда первый получаем пустые кавычки "", а второй путь, получается засада в том, что надо параметр пустые кавычки игнорировать. В общем удалось прийти к решению.

Код:
Count = CountProgramParameters()
For i = 1 To Count
	tmp$ = ProgramParameter()
	If Asc(tmp$) And FileSize(tmp$) > 3 And Left(GetExtensionPart(tmp$), 2) = "pb"
    Break
	EndIf
Next

Здесь пустые ковычки пропускаем, проверяем что файл существует, проверяем что расширение слева начинается с "pb", а значит также захватит pbi и pbf. Как только получили путь то выпрыгиваем не проверяя дальше. То есть если с "%FILE" взяли путь то выпрыгиваем не проверяя "%TEMPFILE".

А теперь с флагом

Код:
Count = CountProgramParameters()
For i = 1 To Count
	tmp$ = ProgramParameter()
	If Not flag And IsDigital(@tmp$)
    flag = Val(tmp$)
	EndIf
	If Asc(tmp$) And FileSize(tmp$) > 3 And Left(GetExtensionPart(tmp$), 2) = "pb" And Not Asc(InputFile$)
    InputFile$ = tmp$
    If flag
    	Break
    EndIf
	EndIf
Next

Здесь также флаг и путь берутся один раз, не важно в какой последовательности они стоят. Проверка IsDigital() проверяет что флаг это число, работает быстро, так как путь начинается с буквы. Также игнор пустой строки "". Условие пути проверяет что если путь уже есть, то идем дальше. Как оба получены, то выпрыг, либо флаг остаётся 0.

В общем для Windows обновил 6 инструментов добавив вот этот функционал.

И вот тут я наверно ещё раз ошибся. Винда вроде как обрезает пустые кавычки, поэтому путь в кавычках возвращается без кавычек, а значит  пустые кавычки возвращаются без кавычек, просто ничего.

Код:
Count = CountProgramParameters()
For i = 1 To Count
	tmp$ = ProgramParameter()
	If Not flag And IsDigital(@tmp$)
    flag = Val(tmp$)
	EndIf
	If Not  
    Continue
	EndIf
	If Not Asc(InputFile$) And Asc(tmp$) And FileSize(tmp$) > 3 And Left(GetExtensionPart(tmp$), 2) = "pb"
    InputFile$ = tmp$
    If flag
    	Break
    EndIf
	EndIf
Next

Добавил проверку пустоты tmp$, переместил проверку пустоты InputFile$ в начало, так как она работает быстрей без обращения к hdd

Отредактировано AZJIO (08.03.2025 15:22:08)

0

2

Как по мне то ты пытаешься лечить симптомы, а основная проблема заключается в кривой реализации вкладок самой IDE, если сделать хранение вкладок как это сделано например в Notepad++ то это решило бы уйму проблем

0

3

Lin написал(а):

Как по мне то ты пытаешься лечить симптомы, а основная проблема заключается в кривой реализации вкладок самой IDE

Причем здесь вкладки?
PB позволяет запускать исходники не сохраненные на диск. В этом случае путь будет в %TEMPFILE.

0

4

Я заменил tmp$ <> ~"\"\"" на Asc(tmp$), так как обрамляющие кавычки удаляются и в Windows, и в Linux одинаково. Опять придётся пересобирать все инструменты на всех ОС.

0

5

Пётр
Возможно перевод неверный. В русской версии

Argument3 = %TEMPFILE : Временная копия файла исходного кода, когда он не сохранён.

в англ версии

Argument3      = %TEMPFILE : A temporary copy of the source file. You may modify or delete this at will.

я уже опять запутался. На оф.форуме создал аналогичную тему, пишет что %TEMPFILE одинаково работает для сохранённого и не сохранённого файла. Сейчас проверил работает. Может от версии зависит? Но я точно помню что имел проблемы. Теперь мои телодвижения получились впустую? Я в любом случае в коде оставлю как есть, чтобы иметь двойную защиту от косяков. Но в параметрах теперь переменная %FILE не нужна. При тесте отработало, но я не увидел создание файла в темповой папке.

0

6

В версии 4.10 другое написано

When this option is given, the current source code is saved in a temporary file, and the filename is inserted here. You may modify or delete the file at will.

При указании этой опции текущий исходный код сохраняется во временном файле, а имя файла вставляется здесь. Вы можете изменить или удалить файл по своему желанию.

То есть временный файл создается только при наличии инструмента с этим параметром.

AZJIO написал(а):

При тесте отработало, но я не увидел создание файла в темповой папке.

Путь какой был в %TEMPFILE?
Наверное временный файл удаляется при завершении работы инструмента и поэтому не увидели в проводнике.

0

7

Пётр
Кто-то жаловался почему IDE не удаляет за собой файлы в %TEMP% при закрытии. Может изменили стратегию и удаляют сразу? Я же помню, как у меня в папке были файлы и с индексом 28, 29 и т.д.

0


Вы здесь » PureBasic - форум » OpenSource » Создание инструмента для IDE