Як вибрати між нулем і 0, або t і 1 при встановленні змінних або включення режимів


19

Я розумію , що nil, 0і / або -1використовуються для відключення деяких функцій і t, 1і / або +1використовуються для включення деяких функцій. Що я повинен вибрати при призначенні змінних або вмиканні / відключенні другорядних режимів?

Я бачив усі ці варіації, що використовуються в тій чи іншій точці. Це змушує мене замислитися, чи є насправді різниця між ними. Я бачив, що іноді використання 0для мене не працює, в той час nilяк. Чи є відмінності, де вони використовуються?


1
Я переписав запитання, щоб більш чітко викласти те, що я думаю, що ви запитуєте. Не соромтеся повернути правки, якщо я помиляюся.
nispio

@nispio Ваші правки просто чудові. Велике спасибі. :)
greduan

Відповіді:


17

TL; DR

Перш ніж встановити будь-яку змінну, ви повинні знати, як цю інтерпретацію слід інтерпретувати. Аналогічно, перед тим, як викликати будь-яку функцію (включаючи ті, які використовуються для перемикання другорядних режимів), ви повинні знати, як інтерпретуються аргументи цієї функції.

Використовуйте C-hfта C-hvперегляньте документацію щодо функції чи змінної. У ньому слід вказати значення, які очікуються.

"Нуль" означає буквально все, що ні nil. Сюди входять 0і від’ємні числа.


Незначні режими

Візьмемо конкретний приклад. Введіть C-hfblink-cursor-mode та натисніть, RETщоб переглянути документацію щодо функцій для blink-cursor-mode:

(режим моргання курсору та необов'язковий ARG)

Увімкніть миготливий курсор (режим блимання курсору). За допомогою аргументу префікса ARG увімкніть режим Blink Cursor, якщо ARG позитивний, і відключіть його інакше. Якщо дзвонить з Lisp, увімкніть режим, якщо ARG опущено або нульове.

Увімкнути режим блимання курсору можна будь-яким із наступних способів:

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

Зауважте, що аргумент tбуде працювати, навіть якщо рядок doc його спеціально не згадував. Хоча це часто буває, найбезпечнішою вашою ставкою є використання того, що вказує рядок doc, що в цьому випадку є позитивним значенням.

Також зауважте, що аргумент nilволі працює. Я настійно рекомендую не проти nilцього, оскільки це робить ваш намір неясним. Якби я переглянув ваш код lisp і побачив nilаргумент, я б припустив, що ви хочете вимкнути другорядний режим.

Ми також можемо відключити blink-cursor-modeнаступними способами:

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

Знову зауважте, що nilце не один із способів відключення цього другорядного режиму. Це стосується майже будь-якого другорядного режиму, з яким ви зіткнетесь.


Змінні

Тепер розглянемо приклад змінної. Введіть C-hvtruncate-linesта натисніть, RETщоб переглянути документацію змінної truncate-lines:

truncate-lines - це змінна, визначена у `С вихідному коді '.

Нульові засоби не відображають лінії продовження. Натомість дайте кожному рядку тексту лише один рядок екрана.

Ви можете ввімкнути усічення будь-яким із наступних способів:

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

Можливо, ви здивуєте, що 0і -1воля спрацює. Знову я б рекомендував не використовувати їх, оскільки це робить ваші наміри незрозумілими.

Єдиний спосіб відключити усічення:

(setq truncate-lines nil)     ; nil value

Іншими словами, ви можете встановити truncate-linesрівні цифри, літери, рядки, списки чи будь-що інше, доки він не оцінить nilце дозволить усікати. (Але ви дійсно повинні дотримуватися tабо 1).


Це відповіло на моє запитання. Дякую. :)
greduan

0

Це все різні речі. 0, 1 і -1 - це різні числа; nilє символом.

Кожен з них використовується повсюдно для різних речей. Щоб дізнатись, для чого кожен використовується в конкретному контексті , проконсультуйтеся з документом для цього контексту . А це включає контексти вмикання чи вимкнення різних режимів, включення та відключення різних речей за допомогою змінних та безліч інших контекстів.

В підсумку:

  • Ваше запитання занадто широке, щоб бути корисним.
  • Потрібно проконсультуватися з документом: (а) загалом, щоб трохи дізнатися про Emacs Lisp та (b) в конкретних контекстах (наприклад, док. Для конкретного режиму).

Документ для заданого режиму зазвичай говорить про те, як його вмикати та вимикати. Якщо вам сказано використовувати 1 або -1 nilабо не nilдля чогось, то це означає. Існують деякі загальні правила вмикання та вимкнення режимів (інтерактивно та з коду Lisp). Але це здається, що вам справді потрібно почати з отримання загальних передумов.

Зверніться до документа Emacs, щоб дізнатися, як просити допомогу та іншу інформацію у самого Emacs : як перевірити значення змінної, як побачити документ змінної чи функції (включаючи функцію, яка вмикає / вимикає режим) , і так далі.

Ви можете почати за допомогою C-h C-h ( Ctrl-h Ctrl-h), щоб дізнатись про довідкову систему Emacs. І будуйте звідти.

C-h rвводить вас у посібник Emacs. Спробуйте підручник Emacs : C-h t. І перевірте сторінку Emacs Wiki Newbie та сторінку про LearningEmacs .

Щоб почати дізнаватися про Emacs Lisp: C-h iвиберіть посібник з назвою Emacs Lisp Introта починайте читати. І перевірте сторінку Вікі Emacs про навчання Emacs Lisp .


1
Дякую за вашу відповідь. :) Напевно, я запитував про те, в яких контекстах вони використовуються. Повинні було зробити це зрозумілішим. Дякую. :) Я знаю основні відмінності між символами, як, наскільки nilлогічний еквівалент помилкового та tістинного, а решта - це просто числа. Але я не був впевнений, у яких контекстах вони зазвичай використовуються.
greduan

Подивіться, що я писав про загальну інформацію про режими (пов'язану з посібником). Незважаючи на таку загальну інформацію, завжди слід починати з перевірки документа на конкретний режим, який вас цікавить. Він підкаже, що використовувати, щоб увімкнути або вимкнути його. Якщо цього не відбувається, застосовується загальна поведінка, описана в посібнику, але почніть з конкретного режиму док . Справа не в різниці між цими речами в собі і в собі. Справа полягає в відмінностях у тому, як вони використовуються в конкретних контекстах. Для цього почніть із запитання контексту.
Дрю

1
ДОБРЕ. Велике спасибі. :) Прикольно, що Emacs отримав свій власний веб-сайт, так?
greduan

1
PS Не хвилюйтесь. Я впевнений, що інші будуть розсипати квасоля тут про деякі загальні правила . ;-) Я вважаю за краще (а) змусити вас проконсультуватися з доктором з цього приводу, тому що це було написано з урахуванням цього навчання, і (б) змусити вас почати, завжди запитуючи про себе певний режим. Загальні правила не козирують деталями режиму, і якщо ви проігноруєте останнє, то ви пропустите речі.
Дрю

Що буде здорово, буде, коли SE отримає власний режим Emacs. ;-)
Дрю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.