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
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

Скрипт не пробовал, но интересно, правильно ли будут разбиваться пути, некоторые из которых закавычены из-за наличия в них точки с запятой.
Фар есть инструмент, а не нянька. © 2009 DrKnS
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: - При изменении переменных через реестр, надо бы послать HWND_BROADCAST с WM_SETTINGCHANGE как минимум. Но что-то не заладилось, посмотрите, кто в теме, плиз. (Раньше делал через вызов setx.exe, там сообщение посылалось автоматически).
Как-то так:
  1. ffi.cdef[[int SendMessageTimeoutA(HWND, UINT, WPARAM, LPARAM, UINT, UINT, DWORD_PTR*);]]
  2.  
  3. local HWND_BROADCAST = ffi.cast("HWND", 0xffff)
  4.  
  5. local WM_SETTINGCHANGE = 0x001A
  6.  
  7. local SMTO_ABORTIFHUNG = 0x0002
  8.  
  9. local MSG_TIMEOUT = 5000
  10.  
  11. ffi.C.SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, ffi.cast("LPARAM", "Environment"), SMTO_ABORTIFHUNG, MSG_TIMEOUT, ffi.cast("DWORD_PTR*", 0))
С setx лучше не связываться, оно тупое и больше 1024 символов не умеет.
User avatar
Wave
Posts: 1900
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 16 times
Been thanked: 29 times

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

Post by Wave »

А мне интересен аналог плагина EnvMan. Т.е. который может группировать переменные окружения в пакеты и в любой момент разворачивать их в пользовательскую среду. Нужно это для работы с серверами, т.е. чтобы мог быстро развернуть кучу переменных с путями php и т.п., а в плагине не устраивает его привязанность к реестру — свои настройки он в реестре хранит (не до конца портирован на FAR3).
Пользуюсь ФАРом больше 20 лет © собирательный.
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 »

HaRT wrote:Скрипт не пробовал, но интересно, правильно ли будут разбиваться пути, некоторые из которых закавычены из-за наличия в них точки с запятой.
Не правильно будут - кавычки не проверяются. Но в принципе, можно сделать.
Разум когда-нибудь победит.
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.01
- Сделал восстановление удаленной переменной по F12 (хранится до перезагрузки макросов).
- HWND_BROADCAST посылается, но не знаю, правильно ли.
Правильная работа гарантируется только в luafar/luamacro >= build 552 (ночная сборка 4488).
Разум когда-нибудь победит.
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.02
- По многочисленным просьбам :) при вызове встроенного редактора точки с запятой в кавычках в разбивке на строки не участвуют.
- Тип переменной сделан списком.
Разум когда-нибудь победит.
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 »

Wave wrote:А мне интересен аналог плагина EnvMan. Т.е. который может группировать переменные окружения в пакеты и в любой момент разворачивать их в пользовательскую среду. Нужно это для работы с серверами, т.е. чтобы мог быстро развернуть кучу переменных с путями php и т.п., а в плагине не устраивает его привязанность к реестру — свои настройки он в реестре хранит (не до конца портирован на FAR3).
Посмотрел, может быть слишком поверхостно, но как-то не проникся. Тоже самое я делаю командными файлами (или PowerShell), более гибко получается.
Разум когда-нибудь победит.
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.03
- Исправлена отправка HWND_BROADCAST (LPARAM передавался не тем параметром). Но всё равно не знаю, правильно отправляется или нет.
- Вернул возможность редактировать имя и тип.
Копирование и переименование решил не делать. Копирование и сейчас получается,как побочный эффект, если изменить имя.

П.С.
Вот сейчас подумалось, по сравнению с тем что было до публикации здесь, из функционала реально добавилось восстановление удалённой переменной и не очень нужные мне переменные процесса. Да, я привёл скрипт более или менее в порядок, переделал без вызова внешней утилиты, добавил конфигурацию, изменение языка, но времени на это потратилось даже больше, чем на редактирование этих переменных за последний год (один раз при переустановке винды, два-три раза правил path). :)
Разум когда-нибудь победит.
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

Smitis wrote: Исправлена отправка HWND_BROADCAST (LPARAM передавался не тем параметром). Но всё равно не знаю, правильно отправляется или нет.
Думаю, можно частично проверить другим экземпляром Фара: если он не подхватывает изменения, то отправляется точно неправильно. ;)
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

Забыл про эту фичу. Попробовал. Не приходит. Через setx приходит, а так нет.
Разум когда-нибудь победит.
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: Не приходит.
Я ж вроде выше уже написал, как правильно посылать.
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 »

DrKnS
Что-то у меня вчера переклинило. Ни в каком виде не хотело работать.
А сейчас с утра Ваш вариант заработал.
Разум когда-нибудь победит.
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.04

- Отправка HWND_BROADCAST.
Разум когда-нибудь победит.
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.05

- Проверка на пустое имя делается не при выходе из диалога в DlgProc, а уже после закрытия. Иначе нельзя выйти по ESC при пустом имени.
- Добавлена проверка на пустое значение.
- При изменении в диалоге имени спрашиваем что делать - переименовать или копировать. При отказе возвращаемся к редактированию.
- При переименовании, копировании, вставке, восстановлении если уже существует переменная с таким именем, запрашиваем подтверждение на перезапись. При отказе возвращаемся к редактированию.
Разум когда-нибудь победит.
Post Reply

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