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 Group
z 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
.
defcustom
jest otulony funkcjonalnością Emacsa Lisp niższego poziomu, defvar
któ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. defgroup
jest 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))
defgroup
Tworzy nową grupę w interfejsie dostosowywania mocy najwyższego poziomu convenience
elementu. 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
. :group
Część oznacza, że należy do uprzednio określonej grupy, do której i :type
oznacza, ż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 RET
i 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-states
wewnę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.
customize
udogodnień, a kiedy dostosowywać ręcznie? Czy jesteś zainteresowany pisaniem trybu? Druga to sytuacja, w której możesz rzeczywiście znaleźć coś takiego jakdefcustom
i tym podobne.