Jak wybrać zero lub 0 lub t i 1 podczas ustawiania zmiennych lub włączania trybów

19

Rozumiem, że nil, 0i / lub -1służą do wyłączania niektórych funkcji i t, 1i / lub +1są wykorzystywane w celu umożliwienia niektórych funkcji. Które powinienem wybrać przy przypisywaniu zmiennych lub włączaniu / wyłączaniu mniejszych trybów?

Widziałem wszystkie te odmiany używane w tym czy innym momencie. Prowadzi mnie to do zastanowienia, czy rzeczywiście istnieje między nimi różnica. Widziałem, że czasami używanie 0nie działa dla mnie, podczas gdy nildziała. Czy istnieją różnice w tym, gdzie są używane?

greduan
źródło
1
Ponownie napisałem pytanie, aby jaśniej określić, o co, jak myślę, pytasz. Jeśli się mylę, możesz cofnąć edycję.
nispio
@nispio Twoje zmiany są w porządku. Dziękuję Ci bardzo. :)
greduan

Odpowiedzi:

17

TL; DR

Przed ustawieniem dowolnej zmiennej musisz wiedzieć, jak należy ją interpretować. Podobnie przed wywołaniem dowolnej funkcji (w tym tych używanych do przełączania mniejszych trybów), musisz wiedzieć, jak interpretowane są argumenty tej funkcji.

Użyj C-hfi, C-hvaby przejrzeć dokumentację dla danej funkcji lub zmiennej. Należy określić oczekiwane wartości.

„Non-zero” oznacza dosłownie wszystko , co nie jest nil. Obejmuje to 0i liczby ujemne.


Drobne tryby

Weźmy konkretny przykład. Wpisz C-hfblink-cursor-mode i naciśnij, RETaby zobaczyć dokumentację funkcji dla blink-cursor-mode:

(tryb migania kursora i opcjonalny ARG)

Przełącz miganie kursora (tryb kursora migania). Z argumentem przedrostka ARG włącz tryb Blink Cursor, jeśli ARG jest dodatni, i wyłącz go w przeciwnym razie. W przypadku wywołania z Lisp włącz tryb, jeśli ARG zostanie pominięty lub zero.

Możemy włączyć tryb kursora mrugania na jeden z następujących sposobów:

(blink-cursor-mode)           ; Omitted argument
(blink-cursor-mode 1)         ; Positive argument
(blink-cursor-mode t)         ; True argument
(blink-cursor-mode nil)       ; nil argument (don't use this)

Zauważ, że argument of tzadziała, mimo że ciąg doc nie wspomniał o nim. Chociaż często tak jest, najbezpieczniejszym rozwiązaniem jest użycie tego, co mówi ci ciąg dokumentów, co w tym przypadku jest wartością dodatnią.

Zauważ też, że argument argumentu nilzadziała. Zdecydowanie odradzam nilw ten sposób, ponieważ powoduje to, że twój zamiar jest niejasny. Gdybym przeglądał twój kod lisp i zobaczyłem nilargument, zakładam, że chciałeś wyłączyć tryb podrzędny.

Możemy również wyłączyć blink-cursor-modew następujący sposób:

(blink-cursor-mode 0)         ; Non-positive argument
(blink-cursor-mode -1)        ; Negative argument

Zauważ ponownie, że nienil jest to jeden ze sposobów na wyłączenie tego drobnego trybu. Dotyczy to prawie każdego mniejszego trybu, z którym się spotkasz.


Zmienne

Spójrzmy teraz na przykład zmiennej. Wpisz C-hvtruncate-linesi naciśnij, RETaby przejrzeć dokumentację zmiennej truncate-lines:

truncate-lines jest zmienną zdefiniowaną w `kodzie źródłowym C '.

Non-zero oznacza, że ​​nie wyświetlają linii kontynuacji. Zamiast tego, daj każdej linii tekstu tylko jedną linię ekranu.

Możesz włączyć obcinanie na jeden z następujących sposobów:

(setq truncate-lines t)       ; Boolean true value (non-nil)
(setq truncate-lines 1)       ; Positive value (non-nil)
(setq truncate-lines 0)       ; Zero value (non-nil)
(setq truncate-lines -1)      ; Negative value (non-nil)

Może cię to zaskoczyć, że 0i -1będą działać. Ponownie odradzam ich używanie, ponieważ powoduje to, że twoje intencje są niejasne.

Jedynym sposobem wyłączenia obcinania jest:

(setq truncate-lines nil)     ; nil value

Innymi słowy, możesz ustawić truncate-linesrówne cyfry, litery, ciągi znaków, listy lub cokolwiek innego, o ile nie będzie to miało wpływu nil, umożliwi to obcięcie. (Ale powinieneś naprawdę trzymać się tlub 1).

nispio
źródło
To odpowiedziało na moje pytanie. Dziękuję Ci. :)
greduan
0

To są różne rzeczy. 0, 1 i -1 to różne liczby; niljest symbolem.

Każdy z nich jest używany wszędzie, do wielu różnych rzeczy. Aby dowiedzieć się, do czego każdy jest używany w określonym kontekście , zapoznaj się z dokumentacją dla tego kontekstu . Dotyczy to także kontekstów włączania i wyłączania różnych trybów, włączania i wyłączania różnych rzeczy za pomocą zmiennych oraz wielu innych kontekstów.

W sumie:

  • Twoje pytanie jest zbyt ogólne, aby było przydatne.
  • Musisz skonsultować się z dokumentem: (a) ogólnie, aby dowiedzieć się trochę o Emacsie Lispie i (b) w określonych kontekstach (np. Dokument dla konkretnego trybu).

Dokument dla danego trybu ogólnie mówi, jak go włączać i wyłączać. Jeśli mówi ci, żebyś użył 1 lub -1 albo nilalbo nie nildo czegoś, to właśnie to oznacza. Istnieją pewne ogólne zasady włączania i wyłączania trybów (interaktywnie i z kodu Lisp). Ale wygląda na to, że naprawdę musisz zacząć od uzyskania ogólnego tła.

Skonsultuj się z dokumentem Emacsa, aby dowiedzieć się, jak poprosić o pomoc i inne informacje od samego Emacsa : jak sprawdzić wartość zmiennej, jak zobaczyć dokument zmiennej lub funkcji (w tym funkcji, która włącza / wyłącza tryb) , i tak dalej.

Możesz zacząć od użycia C-h C-h ( Ctrl-h Ctrl-h), aby dowiedzieć się o systemie pomocy Emacsa. I buduj stamtąd.

C-h rwprowadza cię do podręcznika Emacsa. Spróbuj samouczek Emacs: C-h t. I sprawdź stronę Emacs Wiki Newbie oraz stronę o LearningEmacs .

Aby zacząć uczyć się o Emacs Lisp:, C-h iwybierz podręcznik o nazwie Emacs Lisp Introi zacznij czytać. I sprawdź stronę Emacs Wiki na temat uczenia się Emacs Lisp .

Rysował
źródło
1
Dziękuję za odpowiedź. :) Chyba pytałem o konteksty, w których są używane. Powinno to być jaśniejsze. Dziękuję Ci. :) Zdaję sobie sprawę z głównych różnic między symbolami, takich jak nillogiczny odpowiednik fałszu i tprawdy, a reszta to tylko liczby. Ale nie byłem pewien, w jakich kontekstach były zwykle używane.
greduan
Zobacz, co napisałem o ogólnych informacjach o trybach (związanych z instrukcją). Pomimo takich ogólnych informacji, zawsze powinieneś zacząć od sprawdzenia dokumentu dla wybranego trybu, który Cię interesuje. Podpowie ci, jak użyć, aby go włączyć lub wyłączyć. Jeśli tak nie jest, zastosowanie ma ogólne zachowanie opisane w instrukcji, ale zacznij od określonego trybu doc . Nie chodzi o różnice między tymi samymi rzeczami. Chodzi o różnice w sposobie ich wykorzystania w określonych kontekstach. W tym celu zacznij od pytania o kontekst.
Drew
1
DOBRZE. Dziękuję Ci bardzo. :) Fajnie, że Emacs ma własną stronę SE, co?
greduan
1
PS Nie martw się. Jestem pewien, że inni rozrzucą tutaj fasolę na temat niektórych ogólnych zasad . ;-) Wolę (a) poprosić cię o skonsultowanie się z doktorem na ten temat, ponieważ został on napisany z myślą o tej nauce i (b) zachęcam do rozpoczęcia od pytania o konkretny tryb. Ogólne zasady nie przebijają szczegółów trybów, a jeśli zignorujesz te ostatnie, to coś przeoczysz.
Drew
To, co będzie fajne, będzie, gdy SE otrzyma własny tryb Emacsa. ;-)
Drew