Проблема
Проблема в том, что переменные среды в Windows XP ограничены 1024 символами. Для большинства пользователей это не представляет проблемы, но для некоторых, в числе которых оказался я, проблемы начались внезапно. Программы, которые я использовал до этого в командной строке вдруг перестали находится. Поиск в интернете подсказал, что скорее всего проблема в ограничении на длину переменных среды.
Попробуем это исправить используя Emacs.
Решение
Так как запущен Emacs посмотрим что там у нас в переменной PATH
Очень много всего. Тем более, что многие пути включают в себя полное название директории, например, C:\Program Files или C:\Documents and Settings. Проверим длину
Понятно что неплохо было бы все это подсократить. Сделаем это прямо из Emacs. В версии для Windows присутствует функция
w32-short-file-name
, которая является интерфейсом к Win32 API функции и при вызове ее со строкой содержащей путь к файлу, возвращает путь в так называемом формате 8.3.Для начала разобьем нашу переменную
PATH
на составляющие.Применим к каждому элементу списка функцию
w32-short-file-name
и соберем элементы обратно в строку, используя ';' как соединиитель, с помощью функции mapconcat
.Проверим длину получившейся строки
Все равно получившаяся строка слишком длинная. Но можно удалить повторяющиеся элементы с помощью
delete-dups
. Разобьем строку обратно на элементы, удалим дубликаты и соберем обратно с помощью mapconcat
. В этот раз бы применили функцию identity
, которая возвращает сам элемент списка.Длина нам вполне подходит и мы можем уже использовать эту строку. Распечатаем ее во временный буфер
Перейдем в получившееся окно C-x o и скопируем строку C-a, C-s ", Ret, C-space, C-s ", Ret, M-w
Откроем Свойства Компьютера, перейдем на вкладку Advanced, затем Environment Variables, перейдем в переменные системы, пролистаем до переменной Path, и поменяем ее значение на новое
Вуаля. Программы в командной строке снова работают.
Хотя главное, конечно же, чтобы работал Emacs.