Chciałbym zabić cytowany ciąg w pliku źródłowym bez konieczności oznaczania początku łańcucha i regionu zabicia, , ale po prostu umieszczając punkt w dowolnym miejscu wewnątrz cytowanego ciągu i naciskając skrót.Jak zabić cytowany ciąg w punkcie w emacs?
Próbowałem napisać do tego funkcję w elispie, ale doszedłem do wniosku, że plik musi zostać przeanalizowany od początku do punktu, aby określić, czy punkt znajduje się w cudzysłowiu i znaleźć granice cytowany string (obsługuje również \ ") ...
Ale plik jest już analizowana przez font-lock Więc teraz mogę się dowiedzieć, czy jestem wewnątrz cudzysłowie.
(defun inside-quoted-string?()
(interactive)
(print (find 'font-lock-doc-face (text-properties-at (point)))))
Ale jak mogę uzyskać granice łańcucha? font-lock wie o tym, ponieważ ładnie podkreśla to na niebiesko, ale jak mam to zdobyć?
Edytuj: Dzięki za odpowiedzi. Wpadłem na ten kod, który robi dokładnie to, co chciałem - przenieś kod bez wybierania regionu lub nawet przechodząc do początku kodu.
(defun kill-at-point()
"Kill the quoted string or the list that includes the point"
(interactive)
(let ((p (nth 8 (syntax-ppss))))
(if (eq (char-after p) ?\")
(progn
(goto-char p)
(kill-sexp))
(progn
(up-list)
(let ((beg (point)))
(backward-list)
(kill-region beg (point)))))))
(global-set-key (kbd "C-,") 'kill-at-point)
Wszelkie sugestie dotyczące usprawnienia są mile widziane.