Emacs На Практике

    Проблема



    Проблема в том, что переменные среды в 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.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 5

      0
      а setenv нету? :)
        +1
        Есть, но он установит ведь только на текущую сессию.
          0
          а, ну конечно, виноват
        +1
        Еще можно шоткатов добавить.
          0
          Для себя я понял одно. Emacs сила которую мне даже трудно представить и надо поковырять Lisp. Хоть я и не под Windows, но это ielm — круто.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое