Existe uma maneira de descobrir o tipo de parênteses ao redor (por exemplo, '(', '[' ou '{') ao redor do ponto? Por exemplo (usando |
para representar o ponto)
{ abc, | df }
deve retornar '{' e
{ abc[ | ], 123 }
deve retornar '['. Idealmente, eu gostaria que ele também manipulasse aspas.
Caso alguém esteja curioso ou precise de mais detalhes: meu objetivo é configurar o espaçamento automático inteligente :
em python usando espaçamento elétrico (também conhecido como operador inteligente ). O problema é que normalmente (em python) :
é o operador de fatia ou o início de uma instrução for / if / ..., que não deve ser cercada por espaços. No entanto, dentro de um dicionário, é algo como um operador de atribuição e, portanto, deve ser cercado por espaços. Então, eu preciso verificar se o ponto está dentro de um ditado (por exemplo, dentro {}
), mas não dentro de uma operação de fatia ou string dentro desse ditado (ou seja, não dentro []
ou ""
).
Editar:
Aqui está a função auxiliar que escrevi, com base na resposta 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))))
Então o predicado final é:
(and (not (in-string-p))
(eq (enclosing-paren) ?\}))
Edição 2:
A função acima acabou sendo muito lenta (geralmente causava um atraso perceptível quando a :
era digitada). Agora estou usando a resposta de Stefan, que parece ser muito mais rápida.
""
, você pode usar o built-inin-string-p
.