EnvEdit — редактор переменных среды

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »



Скрипт показывает три списка переменных среды: для процесса, для пользователя из HKCU\Environment, для системы из HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Можно настроить, с чего начинать показ.
Переменные показываются as is, т.е. то, что вернула система, никакого специального раскрытия переменных среды не делается.
Поддерживаются только переменные REG_SZ и REG_EXPAND_SZ (остальные типы всё равно не используются самой системой).

Если при редактировании имя переменной будет изменено, будет задан вопрос, что подразумевается сделать - переименовать переменную или скопировать под другим именем.
Если при переименовании, копировании, вставке, восстановлении окажется, что переменная с таким же именем уже существует, будет задан вопрос с подтверждением перезаписи.

Персональные настройки могут храниться в отдельном файле, на случай обновления скрипта. Файл настроек должен иметь то же имя, что и скрипт с расширеним cfg и размещаться в той же папке, что и скрипт. Пример прилагается. Описание в примере.

Клавиши:
AltShiftE - Вызов макроса по умолчанию. Эта же комбинация по умолчанию используется для переключения списков переменных, аналогично Tab.
Tab и ShiftTab - Переключение списков переменных.
Enter - Редактирование переменной.
F4 или ShiftF4 - Редактирование переменной во встроенном редакторе.
Ins или Num0 - Добавление новой переменной.
Del или NumDel - Удаление переменной.
F12 или ShiftF12 - Восстановление последней удалённой переменной. Для каждого из трёх списков запоминается своя последняя удалённая переменная. После перезагрузки макросов эти сохранённые значения теряются.
F4 или ShiftF4 в диалоге редактирования вызывают встроенный редактор ФАРа. Предполагается, что делается это для переменных типа PATH, где несколько частей разделены точкой с запятой. Поэтому, при вызове редактора точки с запятой заменяются на переводы строк, а по окончании редактирования всё собирается обратно, лишние переводы строк и точки с запятой удаляются.

Уделение переменных из реестра и правильная запись их в реестр работает только с luafar/luamacro build >= 552 (или FAR 3.0 build 4491)
Для работы скрипта требуется модуль DialogClass ver>=1.11

EnvEdit.1.11.7z
EnvEdit 1.11
(6.36 KiB) Downloaded 117 times
Last edited by Smitis on Tue 01 Jul, 2025 09:11, edited 4 times in total.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit - редактор переменных среды

Post by Smitis »

Latest post of the previous page:

v. 1.05

- Проверка на пустое имя делается не при выходе из диалога в DlgProc, а уже после закрытия. Иначе нельзя выйти по ESC при пустом имени.
- Добавлена проверка на пустое значение.
- При изменении в диалоге имени спрашиваем что делать - переименовать или копировать. При отказе возвращаемся к редактированию.
- При переименовании, копировании, вставке, восстановлении если уже существует переменная с таким именем, запрашиваем подтверждение на перезапись. При отказе возвращаемся к редактированию.
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6120
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 431 times

EnvEdit - редактор переменных среды

Post by DrKnS »

Smitis wrote:Иначе нельзя выйти по ESC при пустом имени
Так Param1 надо проверять.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit - редактор переменных среды

Post by Smitis »

Я знаю. Это и была ошибка. На самом деле надо проверить, что поля не пустые, но только при нажатии Enter. Мне показалось, что лучше вынести это из диалога.

П.С.
Потом перенесу работу с переменными среды в обработку DN_CLOSE. При отмене возврат для продолжения редактирования проще должен получиться, без цикла. С циклом оказалось не самое оптимальное решение. :)
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

v. 1.06
- Кнопка для вызова редактора в диалоге.
- Ширина окна редактора отдельным параметром.
- Помощь по горячим клавишам из списков по F1.
- Устранены мелкие недоделки (типа истории в диалоге редактирования и др.).
- Рефакторинг.
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

v. 1.07
- F4 и ShiftF4 сразу открывают переменную в модальном редакторе, минуя диалог редактирования. Если значение переменной после редактирования пустое - переменная удаляется.
- В конфигурации можно задать имена избранных переменных. Эти переменные отображаются в начале списка в том порядке, в каком были указаны, без сортировки и отделяются от остальных переменных разделителем.
Разум когда-нибудь победит.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

EnvEdit — редактор переменных среды

Post by sToLp »

В 123 строке скрипта, видимо ошибочно, указано local dialog = require "DialogClassTest"?
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

sToLp wrote:В 123 строке скрипта, видимо ошибочно, указано local dialog = require "DialogClassTest"?
Да, большое спасибо, сейчас исправлю

Add: fixed
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

v.1.08
- Исправлена ошибка при редактировании по F4 из списка.
- Перечитывание переменных после F4.
- Вызов SendMessageTimeoutA после F4.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

EnvEdit — редактор переменных среды

Post by John Doe »

Smitis wrote:

Code: Select all

 if cfg.MacroKey and cfg.MacroKey~="" then
    Macro {
        description = "EnvEdit";
        area = "Shell Search QView Info Tree Editor Viewer";
        guid = EnvEditMacroId;
        key = "AltShiftE";
        action = EditEnvironment;
    }
end
А зачем тут поле guid?
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

Опечатка. Должно быть uid. Или не должно - поле всё равно не стандартное. В одном месте guid, в другом uid - неразбериха.
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

John Doe wrote:Поэтому просьба всех заинтересованных высказаться, стоит ли uid переименовывать в guid
Я - за единообразие. Уже есть три обозначения одного и того же: id, uid и guid. Uid пока в единственном месте.
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

v. 1.09
- В связи с тем, что фокус с рисованием рамки вокруг окна редактора больше не работает, а без рамки, если фон панелей и фон редактора одинаков, не различимы границы редактора, редактор открывается во всё окно ФАРа.
- В заголовке редактора отображается редактируемая переменная.
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1732
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 58 times

EnvEdit — редактор переменных среды

Post by Smitis »

v. 1.10
- При редактировании переменной через модальный редактор (F4), в последнюю строчку попадал лишний нулевой символ.
Разум когда-нибудь победит.
User avatar
Zeroes
Мультикопипастер Броадкастер
Posts: 659
Joined: Wed 16 Mar, 2005 20:53
Location: Gomel \ Belarus
Has thanked: 4 times
Been thanked: 15 times

EnvEdit — редактор переменных среды

Post by Zeroes »

Редактор переменных среды
v. 1.10 (C) 2014-2019 Smitis
Модуль для работы с диалогами в стиле ООП.
v. 1.15 (C) 2013-2022 Smitis

Пользовательские переменные окружения->
есть пустой MOZ_PLUGIN_PATH (firefox создаёт по умолчанию)

нажал F4, ESC, получаю:

Code: Select all

LuaMacro

C:\FAR4\Profile\Macros\scripts\=test=\EnvEdit.lua:387: attempt to index global 'prev' (a nil value)
stack traceback:
   C:\FAR4\Profile\Macros\scripts\=test=\EnvEdit.lua: in function <C:\FAR4\Profile\Macros\scripts\=test=\EnvEdit.lua:262>

OK
--- Zeroes & Ones ---
User avatar
Zeroes
Мультикопипастер Броадкастер
Posts: 659
Joined: Wed 16 Mar, 2005 20:53
Location: Gomel \ Belarus
Has thanked: 4 times
Been thanked: 15 times

EnvEdit — редактор переменных среды

Post by Zeroes »

есть программа Rapid Enviroment Editor 9.2
умеет детектить и показывать несуществующие пути в %path%
image.png
тут подобное не сделать?
--- Zeroes & Ones ---
User avatar
buniak_a_h
Posts: 4565
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

EnvEdit — редактор переменных среды

Post by buniak_a_h »

Smitis, рекомендую мелкую доделку.
  1. Перед циклом строки 352 (while true do -- цикл - показываем меню / обрабатываем клавиши) вставить строки local prop = и перенести туда первый параметр (таблицу) вызова far.Menu. А сам первый параметр заменить на prop.
  2. После вызова far.Menu добавить строку:

    Code: Select all

    if res then prop.SelectIndex = pos[mode] end
    Это чтоб после редактирования (например) не терялась позиция меню
Post Reply

Return to “Полезные макросы и скрипты”