System dostosowywania jest wbudowaną funkcją Emacsa zaprojektowaną w celu precyzyjnego rozwiązania opisanego problemu - programowanie może nie być idealnym sposobem dla przeciętnego użytkownika na skonfigurowanie edytora.
Podstawowym punktem wejścia do funkcji dostosowywania jest M-x customize RET(lub Options > Customize Emacs > Top-level Customization Groupz menu). Stamtąd zobaczysz interaktywny system menu do dostosowywania ustawień. Interfejs ten wymusza, aby wszystkie ustawienia były poprawnego typu (liczba, łańcuch, kolor itp.), Unikając głównego źródła błędów napotkanych, gdy użytkownicy programowo konfigurują Emacsa. Jeśli użytkownik zdecyduje się zachować wszelkie zmiany, które wprowadzają za pomocą interfejsu użytkownika, ustawienia są zapisywane w specjalnej sekcji w pliku inicjującym użytkownika (czytaj:) .emacs.
defcustomjest otulony funkcjonalnością Emacsa Lisp niższego poziomu, defvarktóra deklaruje zmienną i czyni ją widoczną w interfejsie dostosowywania. Pozwala także programistom na dostarczenie dodatkowych metadanych potrzebnych do wyświetlenia odpowiedniej interaktywnej kontroli - tj. Jaki typ wartości jest przechowywany w tej zmiennej? Dowolny ciąg? Numer? Wybór z ustalonego zestawu opcji? itp. defgroupjest konstrukcją grupującą te konfigurowalne opcje, dzięki czemu można je uporządkować w ładną hierarchię.
Z tej funkcji należy korzystać za każdym razem, gdy kawałek danych powinien być uważany za konfigurowalną opcję dla użytkownika, a nie wewnętrzny szczegół biblioteki.
Oto prosty przykład skopiowany z mojej małej biblioteki:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
defgroupTworzy nową grupę w interfejsie dostosowywania mocy najwyższego poziomu convenienceelementu. Potrzebowałem wtedy zmiennej do przechowywania możliwych stanów pól wyboru. Mógłbym użyć defvar, ale ponieważ chcę, aby można go było łatwo dostosować, zdecydowałem się użyć defcustom. :groupCzęść oznacza, że należy do uprzednio określonej grupy, do której i :typeoznacza, że jest to sekwencja łańcuchów. Istnieje również wartość domyślna i opis. Istnieją również dodatkowe udogodnienia (nie pokazane tutaj) do przekształcania wartości wprowadzonych przez użytkownika.
Jeśli teraz uruchomię M-x customize RETi przejdę do Convenience > Checkbox, zobaczę następujące informacje:

Nie jest to najpiękniejszy interfejs na świecie, ale zauważ, że ma interaktywne narzędzia do dostosowywania wartości „stanów pól wyboru” ( checkbox-stateswewnętrznie). Pokazuje bieżące wartości ciągu wraz z przyciskami INS(wstaw) i DEL(usuń) i pozwala nam edytować wartości ciągu w polach edycji. Po zakończeniu możemy zdecydować, czy zastosować nasze zmiany, cofnąć je, czy zastosować i zapisać na przyszłe sesje.
customizeudogodnień, a kiedy dostosowywać ręcznie? Czy jesteś zainteresowany pisaniem trybu? Druga to sytuacja, w której możesz rzeczywiście znaleźć coś takiego jakdefcustomi tym podobne.