Como escolher entre zero e 0 ou t e 1 ao definir variáveis ​​ou ativar modos


19

Eu entendo que nil, 0e / ou -1são usados para desativar alguns recursos e t, 1e / ou +1são usados para habilitar algumas características. Ao atribuir variáveis ​​ou ativar / desativar modos secundários, qual devo escolher?

Eu já vi todas essas variações usadas em um ponto ou outro. Isso me leva a pensar se há realmente uma diferença entre eles. Vi que às vezes usar 0não funciona para mim, enquanto nilfunciona. Existem diferenças de onde eles são usados?


1
Reescrevi a pergunta para indicar mais claramente o que acho que você está perguntando. Sinta-se livre para reverter a edição se estiver errado.
Nispio 22/10

@nispio Suas edições estão bem. Muito obrigado. :)
greduan

Respostas:


17

TL; DR

Antes de definir qualquer variável, você deve saber como essa variável deve ser interpretada. Da mesma forma, antes de chamar qualquer função (incluindo as usadas para alternar entre modos menores), você deve saber como os argumentos dessa função são interpretados.

Use C-hfe C-hvconsulte a documentação da função ou variável em questão. Ele deve especificar os valores que são esperados.

"Não nulo" significa literalmente qualquer coisa que não seja nil. Isso inclui 0números negativos.


Modos menores

Vamos dar um exemplo específico. Digite C-hfblink-cursor-mode e pressione RETpara ver a documentação da função para blink-cursor-mode:

(modo de cursor intermitente e ARG opcional)

Alterna o cursor a piscar (modo Cursor intermitente). Com um argumento de prefixo ARG, ative o modo Cursor intermitente se ARG for positivo e desative-o caso contrário. Se chamado do Lisp, ative o modo se o ARG for omitido ou nulo.

Podemos ativar o modo Cursor intermitente de qualquer uma das seguintes maneiras:

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

Observe que um argumento de tfuncionará, mesmo que a sequência de documentos não o tenha mencionado especificamente. Embora esse seja geralmente o caso, sua aposta mais segura é usar o que a sequência de documentos diz para você usar, o que, nesse caso, é um valor positivo.

Além disso, observe que um argumento de nilfuncionará. Eu recomendaria fortemente contra nildessa maneira, porque torna sua intenção pouco clara. Se eu estivesse examinando seu código lisp e vi um nilargumento, presumiria que você desejava desativar o modo secundário.

Também podemos desativar blink-cursor-modedas seguintes maneiras:

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

Observe novamente que essa nãonil é uma das maneiras de desativar esse modo secundário. Isso é verdade em quase todos os modos menores que você encontrará.


Variáveis

Agora vamos ver um exemplo de variável. Digite C-hvtruncate-linese pressione RETpara consultar a documentação da variável truncate-lines:

truncate-lines é uma variável definida em `C source code '.

Meios diferentes de zero não exibem linhas de continuação. Em vez disso, dê a cada linha de texto apenas uma linha da tela.

Você pode ativar o truncamento de qualquer uma das seguintes maneiras:

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

Pode surpreendê-lo que o 0e o -1irá funcionar. Novamente, eu recomendaria não usá-los, pois isso torna suas intenções pouco claras.

A única maneira de desativar o truncamento é esta:

(setq truncate-lines nil)     ; nil value

Em outras palavras, você pode definir truncate-linesigual a números, letras, strings, listas, ou qualquer outra coisa que você quiser, desde que não avalia a nilele vai permitir truncagem. (Mas você realmente deve ficar com tou 1).


Isso respondeu à minha pergunta. Obrigado. :)
greduan

0

Todas essas são coisas diferentes. 0, 1 e -1 são números diferentes; nilé um símbolo.

Cada um deles é usado em todo o lugar, para muitas coisas diferentes. Para descobrir para que cada um é usado em um contexto específico , consulte o documento desse contexto . E isso inclui contextos de ativar ou desativar diferentes modos, ativar e desativar diferentes coisas usando variáveis ​​e muitos outros contextos.

Em suma:

  • Sua pergunta é muito ampla para ser útil.
  • Você precisa consultar o documento: (a) em geral, para aprender um pouco sobre o Emacs Lisp, e (b) em contextos específicos (por exemplo, o documento para um modo específico).

O documento para um determinado modo geralmente informa como ativá-lo e desativá-lo. Se ele lhe diz para usar 1 ou -1 ou nilou não nilpara alguma coisa, então é isso que significa. Existem algumas regras gerais para ativar e desativar os modos (interativamente e a partir do código Lisp). Mas parece que você realmente precisa começar com algumas informações gerais.

Consulte o documento do Emacs para saber como solicitar ajuda e outras informações do próprio Emacs : como verificar o valor de uma variável, como ver o documento de uma variável ou função (incluindo uma função que ativa / desativa um modo) , e assim por diante.

Você pode começar usando C-h C-h ( Ctrl-h Ctrl-h), para aprender sobre o sistema de ajuda do Emacs. E construir a partir daí.

C-h rcoloca você no manual do Emacs. Experimente o tutorial Emacs: C-h t. E verifique o Emacs Wiki Novato página ea página sobre LearningEmacs .

Para começar a aprender sobre o Emacs Lisp:, C-h iescolha o manual nomeado Emacs Lisp Introe comece a ler. E verifique a página Wiki do Emacs sobre o Learning Emacs Lisp .


1
Obrigado pela sua resposta. :) Acho que estava perguntando em quais contextos eles são usados. Deveria ter deixado isso mais claro. Obrigado. :) Estou ciente das principais diferenças entre os símbolos, como como nilé o equivalente lógico de falso e tverdadeiro e o resto são apenas números. Mas eu não tinha certeza de que contextos eles eram geralmente usado em.
greduan

Veja o que escrevi sobre informações gerais sobre modos (vinculadas ao manual). Apesar dessas informações gerais, você deve sempre verificar o documento para o modo específico em que está interessado. Ele informará o que usar para ativá-lo ou desativá-lo. Caso contrário, aplica-se o comportamento geral descrito no manual, mas comece com o documento do modo específico . O ponto não é as diferenças entre essas coisas por si mesmas. O ponto são as diferenças em como elas são usadas em contextos específicos. Para isso, comece perguntando o contexto.
Drew

1
ESTÁ BEM. Muito obrigado. :) Legal que o Emacs tenha seu próprio site SE, não é?
greduan

1
PS Não se preocupe. Tenho certeza de que outros vão derramar o feijão aqui sobre algumas das regras gerais . ;-) Prefiro (a) fazer com que você consulte o documento sobre isso, porque ele foi escrito com esse aprendizado em mente; e (b) faça com que você comece sempre perguntando o modo específico sobre si mesmo. As regras gerais não superam os detalhes do modo, e se você ignorar o último, perderá as coisas.
Drew

O que será legal será quando o SE tiver seu próprio modo Emacs. ;-)
Drew
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.