Emacs - Изменение show-paren-mode области

Предложенное чтение из (главным образом) авторитетных и уважаемых американских источников:

Необходимо также считать предупреждения в fineprint в руководствах ОС.

3
04.11.2013, 23:22
3 ответа

С Emacs 24.3 эта функциональность не доступна в режиме Show Paren.

Вот некоторый полностью непротестированный код (введенный непосредственно в моем браузере), который настраивает режим Show Paren для соответствия закрывающей скобке перед курсором вместо после.

(defadvice show-paren-function 
  (around show-paren-closing-before
          activate compile)
  (if (eq (syntax-class (syntax-after (point))) 5)
      (save-excursion
        (forward-char)
        ad-do-it)
    ad-do-it))

Это берет закрывающие скобки перед курсором также, но если курсор находится на закрывающей скобке, которая следует за закрывающей скобкой, закрывающая скобка под курсором имеет приоритет. При фиксации этого, чтобы никогда посмотреть на закрывающую скобку, прежде чем курсор смотрит tricker (он мог быть сделан с грубым взломом такой как (flet ((char-syntax …)) ad-do-it)).

3
27.01.2020, 21:17
  • 1
    я попробовал это, но к сожалению, он сделал поведение, которое я хочу удалить, происходит на вводной круглой скобке в дополнение к заключительной. Кроме того, я довольно плохо знаком с Elisp, но я видел, что люди советуют (никакая предназначенная игра слов) против использования defadvice. Его использование было бы выровнено по ширине в этом экземпляре? –  bitflips 05.11.2013, 06:12
  • 2
    @mellowmaroon я входил в неправильное направление, я исправил ошибку. Относительно defadvice, это переопределяет функцию. Это может быть опасно при изменении поведения функции, это используется другими функциями, но нормально переопределять функции, которые только вызваны вручную или в известных контекстах, такой как здесь. defadvice существует для точно этого вида вещей. –  Gilles 'SO- stop being evil' 06.11.2013, 03:10

Можно обеспечить собственную функцию как значение show-paren-data-function:

,----
| show-paren-data-function is a variable defined in `paren.el'.
| Its value is show-paren--default
| 
|   This variable can be risky when used as a file-local variable.
| 
| Documentation:
| Function to find the opener/closer at point and its match.
| The function is called with no argument and should return either nil
| if there's no opener/closer at point, or a list of the form
| (HERE-BEG HERE-END THERE-BEG THERE-END MISMATCH)
| Where HERE-BEG..HERE-END is expected to be around point.
 ----

См. определение show-paren--default для вдохновения.

Что касается преимущества: Вы видите, что соответствие открывает paren каждый раз, когда Вы добавляете закрытие paren. Имеет смысл, нет?

1
27.01.2020, 21:17
  • 1
    Где show-paren-data-function? Это не находится в текущем дереве Emacs 24. –  Gilles 'SO- stop being evil' 05.11.2013, 00:28
  • 2
    Это находится в версиях последней разработки Emacs 24. Это не находится в Emacs 24.3. Если Вы имеете 24.3 или ранее затем советуете или переопределяете show-paren-function. Более новый код для show-paren-function использование show-paren-data-function. –  Drew 05.11.2013, 05:06
  • 3
    я сожалею, но я не полностью понимаю Ваш ответ. Этот метод влечет за собой изменение paren.el? –  bitflips 05.11.2013, 06:07
  • 4
    Если Ваш Emacs имеет show-paren-function затем можно использовать это для определения поведения, которое Вы хотите. Если не затем можно переопределить show-paren-function (или советуйте ему). Обычно лучше сделать это в Вашем собственном коде, не путем изменения paren.el непосредственно. –  Drew 05.11.2013, 17:21

В 25.1 есть переменная, позволяющая:

(setq show-paren-when-point-inside-paren t)

{ {1}}
1
27.01.2020, 21:17

Теги

Похожие вопросы