Pull to refresh

Emacs На Практике

Reading time2 min
Views3.5K

Проблема



Проблема в том, что переменные среды в 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.
Tags:
Hubs:
+9
Comments5

Articles