¿Hay alguna manera de averiguar el tipo de paréntesis circundante (es decir, '(', '[' o '{') alrededor del punto? Por ejemplo (usando |
para representar el punto)
{ abc, | df }
debería devolver '{' y
{ abc[ | ], 123 }
debería devolver '['. Idealmente, me gustaría que también maneje comillas.
En caso de que alguien tenga curiosidad o necesite más detalles: mi objetivo es configurar el espaciado automático inteligente :
en Python usando el espaciado eléctrico (también conocido como operador inteligente ). El problema es que normalmente (en python) :
es el operador de división o el inicio de una declaración for / if / ..., que no debe estar rodeada de espacios. Sin embargo, dentro de un diccionario es algo así como un operador de asignación, por lo que debe estar rodeado de espacios. Entonces, tengo que verificar si el punto está dentro de un dict (es decir, dentro {}
), pero no dentro de una operación de corte o cadena dentro de ese dict (es decir, no dentro []
o ""
).
Editar:
Aquí está la función auxiliar que escribí, basada en la respuesta de abo-abo:
(defun enclosing-paren ()
"Return the closing parenthesis of the enclosing parens, or nil if not inside any parens."
(ignore-errors
(save-excursion
(up-list)
(char-before))))
Entonces, el predicado final es:
(and (not (in-string-p))
(eq (enclosing-paren) ?\}))
Edición 2:
La función anterior resultó ser demasiado lenta (a menudo causaba un retraso notable cuando :
se tecleaba). Ahora estoy usando la respuesta de Stefan, que parece ser mucho más rápido.
""
, puede usar el incorporadoin-string-p
.