Comment choisir entre zéro et 0, ou t et 1 lors de la définition des variables ou de l'activation des modes

19

Je comprends cela nil, 0et / ou -1sont utilisés pour désactiver certaines fonctionnalités et t, 1et / ou +1sont utilisés pour activer certaines fonctionnalités. Lors de l'attribution de variables ou de l'activation / désactivation de modes mineurs, que dois-je choisir?

J'ai vu toutes ces variations utilisées à un moment ou à un autre. Cela m'amène à me demander s'il y a réellement une différence entre eux. J'ai vu que parfois, l'utilisation 0ne fonctionne pas pour moi, alors que niloui. Existe-t-il des différences de lieu d'utilisation?

greduan
la source
1
J'ai réécrit la question pour énoncer plus clairement ce que je pense que vous demandez. N'hésitez pas à annuler l'édition si je me trompe.
nispio
@nispio Vos modifications sont très bien. Merci beaucoup. :)
greduan

Réponses:

17

TL; DR

Avant de définir une variable, vous devez savoir comment cette variable doit être interprétée. De même, avant d'appeler une fonction (y compris celles utilisées pour basculer entre les modes mineurs), vous devez savoir comment les arguments de cette fonction sont interprétés.

Utilisez C-hfet C-hvpour consulter la documentation de la fonction ou variable en question. Il doit spécifier les valeurs attendues.

"Non nul" signifie littéralement tout ce qui ne l'est pas nil. Cela inclut 0les nombres négatifs.


Modes mineurs

Prenons un exemple spécifique. Tapez C-hfblink-cursor-mode et appuyez RETpour voir la documentation de la fonction pour blink-cursor-mode:

(mode curseur clignotant et ARG en option)

Basculer le curseur clignotant (mode curseur clignotant). Avec un argument de préfixe ARG, activez le mode Blink Cursor si ARG est positif et désactivez-le autrement. Si appelé depuis Lisp, activez le mode si ARG est omis ou nul.

Nous pouvons activer le mode Curseur Blink de l'une des manières suivantes:

(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)

Notez qu'un argument de tva fonctionner, même si la chaîne doc ne le mentionne pas spécifiquement. Bien que ce soit souvent le cas, votre pari le plus sûr est d'utiliser ce que la chaîne de doc vous dit d'utiliser, ce qui dans ce cas est une valeur positive.

Notez également qu'un argument de nilfonctionnera. Je déconseille fortement nilde cette façon car cela rend votre intention peu claire. Si je survolais votre code lisp et que je voyais un nilargument, je supposerais que vous vouliez désactiver le mode mineur.

Nous pouvons également désactiver blink-cursor-modede la manière suivante:

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

Notez à nouveau que ce niln'est pas l' une des façons de désactiver ce mode mineur. Cela est vrai de presque tous les modes mineurs que vous rencontrerez.


Variables

Voyons maintenant un exemple de variable. Tapez C-hvtruncate-lineset appuyez RETpour consulter la documentation de la variable truncate-lines:

truncate-lines est une variable définie dans le «code source C».

Les valeurs non nulles n'affichent pas les lignes de continuation. Au lieu de cela, donnez à chaque ligne de texte une seule ligne d'écran.

Vous pouvez activer la troncature de l'une des manières suivantes:

(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)

Cela peut vous surprendre que le 0et le -1fonctionnent. Encore une fois, je vous déconseille de les utiliser car cela rend vos intentions peu claires.

La seule façon de désactiver la troncature est la suivante:

(setq truncate-lines nil)     ; nil value

En d'autres termes, vous pouvez définir truncate-linesun nombre égal à des chiffres, des lettres, des chaînes, des listes ou tout ce que vous voulez, tant qu'il ne sera pas évalué, nilil activera la troncature. (Mais vous devriez vraiment vous en tenir à tou 1).

nispio
la source
Cela a répondu à ma question. Je vous remercie. :)
greduan
0

Ce sont toutes des choses différentes. 0, 1 et -1 sont des nombres différents; nilest un symbole.

Ils sont chacun utilisés partout, pour de nombreuses choses différentes. Pour savoir à quoi chacun est utilisé dans un contexte particulier , consultez la documentation de ce contexte . Et cela inclut des contextes d'activation ou de désactivation de différents modes, l'activation et la désactivation de différentes choses à l'aide de variables, et de nombreux autres contextes.

En somme:

  • Votre question est beaucoup trop large pour être utile.
  • Vous devez consulter le doc: (a) en général, pour en savoir un peu plus sur Emacs Lisp, et (b) dans des contextes particuliers (par exemple, le doc pour un mode particulier).

La doc pour un mode donné vous indique généralement comment l'activer et le désactiver. S'il vous dit d'utiliser 1 ou -1 ou nilou non nilpour quelque chose, c'est ce que cela signifie. Il existe des règles générales pour activer et désactiver les modes (de manière interactive et à partir du code Lisp). Mais il semble que vous ayez vraiment besoin de commencer par obtenir des informations générales.

Consultez le doc Emacs pour savoir comment demander de l'aide et d'autres informations à Emacs lui - même : comment vérifier la valeur d'une variable, comment voir le doc d'une variable ou d'une fonction (y compris une fonction qui active / désactive un mode) , etc.

Vous pouvez commencer par utiliser C-h C-h ( Ctrl-h Ctrl-h) pour en savoir plus sur le système d'aide d'Emacs. Et construisez à partir de là.

C-h rvous met dans le manuel Emacs. Essayez le tutoriel Emacs: C-h t. Et consultez la page Emacs Wiki Newbie et la page sur LearningEmacs .

Pour commencer à découvrir Emacs Lisp:, C-h ichoisissez le manuel nommé Emacs Lisp Introet commencez à lire. Et consultez la page Wiki d'Emacs sur l' apprentissage d'Emacs Lisp .

A dessiné
la source
1
Merci pour votre réponse. :) Je suppose que je demandais dans quels contextes ils sont utilisés. Cela aurait dû être plus clair. Je vous remercie. :) Je suis conscient des principales différences entre les symboles, comme la façon dont nill'équivalent logique de faux et tde vrai et le reste ne sont que des nombres. Mais je ne savais pas dans quels contextes ils étaient habituellement utilisés.
greduan
Voir ce que j'ai écrit sur les informations générales sur les modes (liées au manuel). Malgré ces informations générales, vous devriez toujours commencer par vérifier le document pour le mode particulier qui vous intéresse. Il vous dira quoi utiliser pour l'activer ou le désactiver. Si ce n'est pas le cas, le comportement général décrit dans le manuel s'applique, mais commencez par le mode doc en particulier . Ce n'est pas la différence entre ces choses en elles-mêmes et en elles-mêmes. Il s'agit de différences dans la façon dont ils sont utilisés dans des contextes particuliers. Pour cela, commencez par demander le contexte.
Drew
1
D'ACCORD. Merci beaucoup. :) Cool qu'Emacs ait son propre site SE hein?
greduan
1
PS Ne t'inquiète pas. Je suis sûr que d' autres vont renverser les haricots ici sur certaines des règles générales . ;-) Je préfère (a) vous demander de consulter le document à ce sujet, car il a été écrit avec cet apprentissage en tête, et (b) vous amener à commencer par toujours demander le mode particulier à son sujet. Les règles générales ne l'emportent pas sur les détails du mode, et si vous ignorez ce dernier, vous allez manquer des choses.
Drew
Ce qui sera cool, ce sera lorsque SE obtiendra son propre mode Emacs. ;-)
Drew