PCE Emacs вышел из строя (и почти бесполезен) после обновления SWIPL до 8.0.1-1 (а затем до 8.1.0) - PullRequest
0 голосов
/ 27 января 2019

Мое затруднительное положение, в скорлупе ореха

Привет, Недавно я установил 64-битную версию SWI-Prolog 8.0.1.1-1 (заменив 7.6.4, который я установил несколько лет назад) на мою Windows 10 машина, и, по сути, когда я впоследствии открыл PCE Emacs, все языковые функции были нарушены. Это означает, что Я могу редактировать и сохранять файлы в обычном режиме, но команды подсветки синтаксиса, навигации по исходным текстам и т. Д. Не работают ..., что означает, что я также могу редактировать все в основном режиме. У меня никогда раньше не было проблем с PCE Emacs, и я не модифицировал ничего, связанного с SWIPL, перед обновлением.

Поскольку SWI-Prolog, по-видимому, работает нормально сам по себе, если на картинке нет ничего, связанного с графическим интерфейсом, Я сильно подозреваю, что библиотека PCE и / или XPCE были как-то повреждены, или что-то не так с переменными реестра и / или среды, которые должны направлять SWIPL на правильный исходный код и скомпилированные файлы . К сожалению, мне не хватает мастера PCE (пока!), Чтобы знать, как подтвердить (или опровергнуть) это подозрение ... и даже если окажется, что моя догадка верна, я не знаю, что с этим делать это.

Мне бы очень хотелось это исправить, потому что, хотя я настоящий поклонник GNU Emacs, мне нравится удобство возможности быстрого редактирования исходных файлов Prolog и использования некоторых изящных функций без необходимости использовать весь мой арсенал. тонко настроенных гаджетов Emacs каждый раз.

При этом я действительно не хочу полностью удалять и переустанавливать SWI-Prolog, хотя я вполне уверен, что это решит проблему. (И я, конечно же, не хочу стереть с этого весь мой компьютер, если даже моих лучших усилий по очистке от него всех следов SWIPL не хватит ...)

Сталкивались ли вы с этим типом проблемы (дополнительная информация ниже) и / или знаете ли вы, как ее исправить?


За гранью скорлупы ... (Дополнительная информация)

Нарушения, возникшие в процессе установки

Программа установки для 8.0.1-1 не смогла добавить SWIPL в PATH из-за ошибки, связанной с слишком длинным путем ... Я не особо задумывался об этом, так как знаю в любом случае, как редактировать системные переменные самостоятельно.

Проблемы, которые мне удалось исправить (и как)

Как только установка была завершена, я открыл недавно установленную 8.0.1-1, чтобы посмотреть, было ли что-то необычное. Я выполнил несколько простых тестовых запросов, и все выглядело нормально ... пока я не решил попробовать использовать PCE Emacs для редактирования исходного файла. Когда я выбрал пункт меню File > Edit..., перед сбоем SWI-Prolog в терминале возникла следующая ошибка:

pce_error (no_home)

Я быстро набрал в поиске Google, заключив этот причудливый термин в кавычки; В основном единственным значимым результатом был исходный код PCE на Github. Я посмотрел на источник и заметил, что он ищет системную переменную среды с именем PCEHOME. Я добавил эту переменную окружения, указав на C:\Program Files\swipl\xpce\. Я также добавил C:\Program Files\swipl\bin и C:\Program Files\swipl\xpce\ в переменную окружения PATH, для хорошей меры.

Когда я снова открыл swipl-win.exe и выбрал File > Open, PCE Emacs открыл файл для редактирования, как и ожидалось. Однако мне не потребовалось много времени, чтобы понять, что что-то все еще ужасно неправильно.

Проблемы, которые мне не удалось исправить

Первое, что я заметил, было то, что подсветка синтаксиса была явно нарушена; строка состояния показала несколько загадочных ошибок в ответ на щелчок по источнику. Когда я переключился в режим CHR, произошла некоторая подсветка синтаксиса, но примерно половина буфера стала выделяться пурпурным фоном после разделителя (квадратная скобка, я считаю) и указала, что произошла синтаксическая ошибка (хотя на самом деле код не было синтаксических ошибок).

Я не смог найти в интернете ничего, касающегося подсветки синтаксиса PCE Emacs. Казалось, что я был единственным в истории SWI-Пролога, который столкнулся с такой проблемой ...

Видя, что начало моих проблем совпало с обновлением, я предположил, что проблема может заключаться в ошибке, появившейся в 8.0.1-1. Будучи дальновидным человеком, которым я являюсь, я подумал, что не пострадает попытка перейти на последнюю версию разработки (8.1.0), а не вернуться к версии 7.6.4.

Текущее состояние вещей

Начиная с даты публикации этого вопроса, странное поведение подсветки синтаксиса было заменено полным отсутствием подсветки синтаксиса. Другие языковые функции остаются неизменными (то есть они вообще не работают). Короче говоря, PCE Emacs все еще полон исключений, некоторые из которых я перечислил ниже.

Я надеюсь, что это достаточно тщательно, но если есть какая-либо дополнительная информация, которую я могу предоставить, которая может помочь в диагностике причины этих проблем и / или в их разрешении, просто дайте мне знать, и я сделаю все возможное добавить сюда.


Некоторые примеры действий пунктов меню в строке меню и возникающих ошибок / предупреждений, сгруппированных по меню:

FILE:

  • Выбор пункта меню File > Mode > chr, когда активен буфер, содержащий некоторые правила CHR (в дополнение к нормальному коду SWIPL), заставляет PCE Emacs по крайней мере выделять совпадающие пары пар, но при этом подсветка синтаксиса по-прежнему отсутствует.

  • При выборе пункта меню File > Shell открывается пустой буфер с именем *shell* [exited] и в строке состояния PCE Emacs появляется следующее:

    sh: статус завершения процесса -1

  • Выбор пункта меню File > Mode > prolog (если он еще не находится в режиме Пролога) вызывает (как и ожидалось) следующее в строке состояния PCE Emacs:

    Переключен в режим `` пролог ''

    ... однако функции подсветки синтаксиса или взаимодействия с источником не активированы, и PCE Emacs не показывает никаких изменений во внешнем виде или функциональности.

BROWSE:

  • Выбор пункта меню Browse > Prolog Navigator ничего не делает.

  • При наведении курсора на пункт меню Browse > Source file... в терминале появляется следующее сообщение:

    ОШИБКА: [Thread pce] Необработанное исключение: atomic_list_concat / 2: Ошибка типа: ожидается «текст», найдено «пролог / boot» (соединение)
    ОШИБКА: [Thread pce] Необработанное исключение: atomic_list_concat / 2: Ошибка типа: ожидается «текст», найдено «пролог / boot» (соединение)

  • Выбор пункта меню Browse > Find Definition... и последующий ввод, например, d в поле Предикат пролога , за которым следует TAB клавиша для запуска завершения вызывает появление в терминале следующего сообщения:

    ОШИБКА: [Thread pce] Необработанное исключение: sub_atom / 5: ошибка типа: ожидается «атом», найден «C'dict» (зарезервированная_символ_референция)
    ОШИБКА: [Thread pce] Необработанное исключение: sub_atom / 5: ошибка типа: ожидается «atom», найден «C'dict» (зарезервированная_символ_reference)

COMPILE:

  • При выборе пункта меню Compile > Compile buffer в строке состояния в нижней части окна PCE Emacs появляется следующее:

    Сбой команды compile_buffer

Пролог:

  • При выборе пункта меню Prolog > Check clause в строке состояния в нижней части окна PCE Emacs появляется следующее:

    Ошибка команды check_clause

  • Выбор пункта меню Prolog > Edit exceptions... вызывает следующее:

    • (как и ожидалось) Появление диалогового окна Управление исключениями .
    • Появление диалогового окна с названием Предупреждения SWI-Prolog , содержащего только кнопку Quit и поле выбора типа списка, которое содержит следующий элемент:

      gui.pl: 91: Цель (директива) не выполнена: prolog_gui: register_directives

      Этот элемент ссылается на строку 91 в файле gui.pl, который открывается в новом буфере в PCE Emacs при щелчке по элементу.

    • Появление в терминале следующего:

      ОШИБКА: [Thread pce] Необработанное исключение: sub_atom / 5: ошибка типа: ожидается «атом», найдено «C'dict» (зарезервированная_символ_референция)
      ОШИБКА: [Thread pce] Необработанное исключение: sub_atom / 5: ошибка типа: ожидается «атом», найдено «C'dict» (зарезервированная_символ_референция)
      Предупреждение: c: / программные файлы / swipl / xpce / prolog / lib / trace / gui.pl: 91: Цель (директива) не выполнена: prolog_gui: register_directories
      % Графический интерфейс будет использоваться для последующей трассировки

PCE:

  • При выборе пункта меню PCE > Editpce... и выборе, например, emacs_prolog_mode в раскрывающемся меню Behavior | class , PCE Emacs открывает пустой буфер ( в случае emacs_prolog_mode один называется prolog_mode.pl). Я совершенно уверен, что prolog_mode.pl (файл, а не буфер) не может быть действительно пустым.

  • Выбор пункта меню Pce > Spypce... и выбор, например, emacs_mode из Поведение | класс вызывает меню

    ОШИБКА: [Thread pce] Необработанное исключение: emacs_fundamental_mode -> spypce: Аргумент 1 (?): Ожидается «поведение *», найдено `@ emacs_mode_class / emacs_mode_class '

  • При выборе пункта меню Pce > Tracepce... и выборе, например, prolog_ide из раскрывающегося меню Behavior | class в терминале появляется следующее:

    ОШИБКА: [Thread pce] Необработанное исключение: emacs_fundamental_mode -> tracepce: Аргумент 1 (?): Ожидается "поведение *", найдено `@ prolog_ide_class / class '

HELP

  • Выбор пункта меню Help > Help on mode ничего не делает.

  • Выбор пункта меню Help > Help вызывает следующее:

    • (как и ожидалось) Появление диалогового окна справки PCE
    • Появление следующего в терминале:

      [Предупреждение PCE: @ 142244788304 / hlp_buffer: недопустимое значение в слоте indent_tabs: class_default]

  • При выборе пункта меню Help > Describe function... и выборе, например, colourise_buffer из раскрывающегося меню Command в терминале появляется только следующее:

    Предупреждение: [Thread pce] Нет справки для @ 142240619460 / send_method.
    Предупреждение: [Thread pce] Использовать? - apropos (query). искать кандидатов.

MISC:

  • Я не помню, что я сделал, чтобы вызвать это, но в терминале также появилась следующая ошибка:

    ОШИБКА: [Thread pce] @ 142240667182 / dialog: Нет реализации для: <-mode </p>

  • Я только что сделал make. только что (я уже сделал несколько в этом сеансе, но в результате это впервые произошло в результате), и в терминале появилось следующее:

    % Обновление индекса для библиотеки c: / program files / swipl / library /
    % настроек, скомпилированных в trace_settings 0,00 сек, 0 предложений
    % стек, скомпилированный в prolog_ide_stack 0,02 сек, 0 предложений
    % viewterm скомпилирован в prolog_term_view 0,02 сек, 0 предложений
    Предупреждение: c: / программные файлы / swipl / xpce / пролог / lib / trace / gui.pl: 91:
    Цель (директива) не выполнена: prolog_gui: register_directories
    % c: / программные файлы / swipl / xpce /prolog / lib / trace / gui, скомпилированный в prolog_gui

    Я предполагаю, что это как-то связано с файлами, которые я открыл с помощью Pce > Tracepce и т. д ... Но я не сделал никаких изменений влюбой из файлов.Кроме того, каждый раз, когда я делаю make, это занимает больше времени, чем я ожидал, и всегда показывает Updating index for library c:/program files/swipl/library/, даже если я делаю два make. с подряд ...

...