Od czasu do czasu obserwuję nieoczekiwane zachowanie podczas edycji tekstu. Moim pierwszym rozwiązaniem jest zazwyczaj C-h k
sprawdzenie, jakie funkcje wywoływane są przez daną sekwencję klawiszy. Czasami jednak dokumentacja jest sprzeczna z zaobserwowanym zachowaniem. W takich przypadkach zwykle zakładam, że jakiś inny pakiet zaczepił się w tej funkcji lub sekwencji klawiszy i modyfikuje swoje zachowanie.
Jak mogę dowiedzieć się, które funkcje zaczepiają się w mojej sekwencji klawiszy?
Jednym z przykładów, które ostatnio spotkałem, było naciśnięcie "klawisza, a znaki cudzysłowu zostały wstawione na początku i na końcu aktywnego regionu. Podejrzewałem, że nie jest to domyślne zachowanie Emacsa, więc szukałem C-h k "
, jaka funkcja jest faktycznie wywoływana.
describe-key
Dokumentacja powiedział mi, że funkcja self-insert-command
została miano, która jest wbudowana funkcja. Krótko mówiąc, po pewnym czasie prób i błędów udało mi się ustalić, że zachowanie było spowodowane electric-pair-mode
. Czy w przyszłości można szybciej dojść do takiego wniosku, niż wyłączać podejrzane pakiety pojedynczo, aż do znalezienia winowajcy?
electric-pair-mode
działa poprzez zaczepienie się post-self-insert-hook
, a nie zmianę przypisania klawiszy.
C-h k
mówi dokładnie, co dzieje się po naciśnięciu klawisza. Jeśli spojrzysz na dokumentację self-insert-command
, wyraźnie widać, że post-self-insert-hook
jest uruchamiana po zakończeniu polecenia.
after-change-functions
tak, jak Jordon wspomina w swojej odpowiedzi? Dokumentacja funkcji prawdopodobnie nie wspomina konkretnie o tym haku, prawda?
C-h k
+ standardowe zaczepy == pełne zachowanie (mniej więcej). Oczywiście czasami pozostawia to wiele możliwości, ale wciąż jest o wiele bardziej przejrzysta niż jakikolwiek inny złożony system oprogramowania, o którym wiem.
electric-pair-mode
został aktywowany tylko w niektórych głównych trybach? Czy nadal zobaczyćself-insert-command
na"
kiedy to zrobićC-h k
, gdyelectric-pair-mode
jest aktywny?