P: ¿cómo puedo modificar smartparens
las reglas de decisión de cuándo insertar un carácter emparejado o único?
smartparens
parece ser principalmente inteligente al insertar comillas simples (por ejemplo, en text-mode
o org-mode
). Por lo tanto, por defecto inserta un par de '
sy coloca el cursor entre ellas, pero, cuando se invoca al final de una palabra, solo inserta una sola '
en previsión de las contracciones. Entonces, por ejemplo:
'
=>'*'
(donde*
es el punto)can + '
=>can'*
(para que pueda seguir escribiendo "no puedo")
Sin embargo, hay un problema que estoy tratando de solucionar. A menudo uso abreviaturas que terminan en un período, pero me gustaría hacerlas posesivas. Por ejemplo, podría escribir "so" como abreviatura de "alguien" y, por lo tanto, "so's" sería "alguien". El problema es que smartparens
inserta un par '
después de un período:
- lo que quiero:
s.o. + '
=>s.o.'*
- lo que obtengo:
s.o. + '
=>s.o.'*'
Mi objeción específica es con smartparens
el comportamiento de '
, pero puedo imaginar que este es un problema más general con otros personajes también.
Entonces: ¿cómo puedo ajustar smartparens
la regla de decisión para expandir el conjunto de caracteres después de lo cual solo inserta uno '
?
PD: de forma divertida, tratar de escribir "smartparens" en emacs da el mismo comportamiento irritante.
fuente
my-sp-pair-function
no parece estar proporcionando la funcionalidad deseada. Me está dando el mismo comportamiento que antes después de la puntuación (inserción emparejada), pero ahora también hace una inserción emparejada después de caracteres alfanuméricos, rompiendo las contracciones.(and (or (looking-at "[[:space:][:punct:]]") (sp-point-before-eol-p id action context)) (not (looking-back "[.`]")))
Puede modificar el comportamiento de smartparen utilizando las funciones
sp-pair
ysp-local-pair
. El wiki de smartparens explica estas funciones en detalle.Básicamente puede hacer algo como seguir para personalizar el comportamiento globalmente
O para personalizar el comportamiento solo para algunos modos
dónde
desired-mode
es el modo para el que desea personalizar el comportamiento ymy-custom-predicate
es la función que deben usar los smartparens para determinar si debe insertar el par automáticamente.A partir
sp-pair
de la cadena de documentación, el predicado personalizado debe aceptarEntonces, una función personalizada que se puede usar como
:unless
predicado en su caso específico sería algo como lo siguienteTenga en cuenta que estoy buscando la expresión regular
<punctuation>'
ya que el punto sería.'|
cuando se ejecuta el predicado.Finalmente, puedes conectarlo a smartparens haciendo
fuente
(defun predp () (sp--looking-back-p "[[:space:][:punct:]]"))
), pero lassmartparens
ignora todas.