Emacs - Alterando as áreas do show-paren-mode

3

Eu gosto do modo show-paren no Emacs, mas eu realmente gostaria de mudar o comportamento de destaque para fechar os colchetes.

Ou seja, quero que o colchete de abertura seja destacado quando o ponto estiver no colchete de fechamento. O comportamento padrão destaca o colchete de abertura quando o ponto está no caractere após o colchete de fechamento.

Isso é fácil de mudar? Além disso, eu estaria interessado em possíveis benefícios de manter o comportamento do modo show-paren como está.

    
por mellowmaroon 04.11.2013 / 20:33

3 respostas

3

A partir do Emacs 24.3, esta funcionalidade não está disponível no modo Show Paren.

Aqui está um código completamente não testado (digitado diretamente no meu navegador) que altera o modo Show Paren para corresponder a um parêntese de fechamento antes do cursor em vez de depois.

(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))

Isto também seleciona parênteses de fechamento antes do cursor, mas se o cursor estiver em um parêntese de fechamento que segue um parêntese de fechamento, o parêntese de fechamento sob o cursor tem precedência. Corrigindo isto para nunca olhar para um parêntese de fechamento antes que o cursor pareça complicado (isso poderia ser feito com um hack bruto, como (flet ((char-syntax …)) ad-do-it) ).

    
por 04.11.2013 / 23:39
1

Você pode fornecer sua própria função como o valor de 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.
 ----

Veja a definição de show-paren--default para inspiração.

Quanto à vantagem : você vê o paren de abertura correspondente cada vez que você adiciona um paren de fechamento. Faz sentido, não?

    
por 04.11.2013 / 21:47
1

No 25.1, existe uma variável que permite:

(setq mostra-paren-quando-ponto-dentro-paren t)

    
por 22.06.2016 / 12:53