P: como posso ajustar smartparens
as regras de decisão de quando inserir um caractere emparelhado ou único?
smartparens
parece ser mais inteligente ao inserir aspas simples (por exemplo, em text-mode
ou org-mode
). Portanto, é padrão inserir um par de se '
colocar o cursor entre eles, mas, quando invocado no final de uma palavra, insere apenas um único '
em antecipação às contrações. Então, por exemplo:
'
=>'*'
(onde*
está o ponto)can + '
=>can'*
(para que eu possa continuar escrevendo "não pode")
No entanto, estou tentando resolver um problema. Costumo usar abreviações que terminam em um período, mas gostaria de torná-las possessivas. Por exemplo, eu poderia escrever "so" como uma abreviação de "alguém" e, portanto, "so's" seria "alguém". O problema é que smartparens
insere um par '
após um período:
- o que eu quero:
s.o. + '
=>s.o.'*
- o que eu recebo:
s.o. + '
=>s.o.'*'
Meu problema específico é com smartparens
o comportamento ativado '
, mas posso imaginar que esse seja um problema mais geral com outros personagens também.
Então: como posso ajustar smartparens
a regra de decisão de expandir o conjunto de caracteres após o qual ele insere apenas um '
?
PS: divertidamente, tentar digitar "` smartparens`'s "no emacs dá o mesmo comportamento irritante.
fonte
my-sp-pair-function
não parece estar fornecendo a funcionalidade desejada. Ele está me dando o mesmo comportamento de antes após a pontuação (inserção emparelhada), mas agora também faz uma inserção emparelhada após caracteres alfanuméricos, interrompendo as contrações.(and (or (looking-at "[[:space:][:punct:]]") (sp-point-before-eol-p id action context)) (not (looking-back "[.`]")))
Você pode modificar o comportamento do smartparen usando as funções
sp-pair
esp-local-pair
. O wiki do smartparens explica essas funções em detalhes.Basicamente, você pode algo como seguir para personalizar o comportamento globalmente
OU para personalizar o comportamento apenas para alguns modos
onde
desired-mode
é o modo para o qual você deseja personalizar o comportamento e amy-custom-predicate
função que os smartparens devem usar para determinar se ele deve inserir o par automaticamente.Na
sp-pair
documentação de, o predicado personalizado deve aceitarPortanto, uma função personalizada que pode ser usada como
:unless
predicado no seu caso específico seria algo como o seguinteObserve que estou verificando a regex,
<punctuation>'
pois o ponto seria.'|
quando o predicado está em execução.Por fim, você pode conectá-lo ao smartparens fazendo
fonte
(defun predp () (sp--looking-back-p "[[:space:][:punct:]]"))
), massmartparens
ignora todas elas.