P: ¿cómo puedo modificar smartparenslas reglas de decisión de cuándo insertar un carácter emparejado o único?
smartparensparece ser principalmente inteligente al insertar comillas simples (por ejemplo, en text-modeo 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 smartparensinserta 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 smartparensel comportamiento de ', pero puedo imaginar que este es un problema más general con otros personajes también.
Entonces: ¿cómo puedo ajustar smartparensla 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-functionno 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-pairysp-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-modees el modo para el que desea personalizar el comportamiento ymy-custom-predicatees la función que deben usar los smartparens para determinar si debe insertar el par automáticamente.A partir
sp-pairde la cadena de documentación, el predicado personalizado debe aceptarEntonces, una función personalizada que se puede usar como
:unlesspredicado 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 lassmartparensignora todas.