Bagaimana memilih antara nol dan 0, atau t dan 1 saat mengatur variabel atau mode yang memungkinkan

19

Saya mengerti itu nil, 0dan / atau -1digunakan untuk menonaktifkan beberapa fitur dan t, 1dan / atau +1digunakan untuk mengaktifkan beberapa fitur. Saat menetapkan variabel atau mengaktifkan / menonaktifkan mode kecil, mana yang harus saya pilih?

Saya telah melihat semua variasi ini digunakan pada satu titik atau yang lain. Ini membuat saya bertanya-tanya apakah sebenarnya ada perbedaan di antara mereka. Saya telah melihat bahwa kadang-kadang menggunakan 0tidak bekerja untuk saya, sementara itu niltidak. Apakah ada perbedaan di mana mereka digunakan?

greduan
sumber
1
Saya telah menulis ulang pertanyaan untuk lebih jelas menyatakan apa yang menurut Anda Anda tanyakan. Jangan ragu untuk mengembalikan hasil edit jika saya salah.
nispio
@nispio Hasil edit Anda baik-baik saja. Terima kasih banyak. :)
greduan

Jawaban:

17

TL; DR

Sebelum Anda mengatur variabel apa pun, Anda harus tahu bagaimana variabel itu harus ditafsirkan. Demikian pula, sebelum Anda memanggil fungsi apa pun (termasuk yang digunakan untuk beralih mode kecil), Anda harus tahu bagaimana argumen dari fungsi itu ditafsirkan.

Gunakan C-hfdan C-hvuntuk melihat dokumentasi untuk fungsi atau variabel yang dimaksud. Ini harus menentukan nilai-nilai yang diharapkan.

"Non-nil" secara harfiah berarti segala sesuatu yang bukan nil. Ini termasuk 0dan angka negatif.


Mode Kecil

Mari kita ambil contoh spesifik. Ketik C-hfblink-cursor-mode dan tekan RETuntuk melihat dokumentasi fungsi untuk blink-cursor-mode:

(blink-cursor-mode & ARG opsional)

Toggle cursor blinking (mode Blink Cursor). Dengan argumen awalan ARG, aktifkan mode Blink Cursor jika ARG positif, dan nonaktifkan sebaliknya. Jika dipanggil dari Lisp, aktifkan mode jika ARG dihilangkan atau nihil.

Kami dapat mengaktifkan mode Blink Cursor dengan salah satu cara berikut:

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

Perhatikan bahwa argumen tkehendak bekerja, meskipun string doc tidak secara khusus menyebutkannya. Meskipun ini sering terjadi, taruhan teraman Anda adalah menggunakan apa yang dikatakan oleh string doc agar Anda gunakan, yang dalam hal ini adalah nilai positif.

Juga, perhatikan bahwa argumen nilakan berhasil. Saya akan sangat menyarankan tidak nildengan cara ini karena itu membuat niat Anda tidak jelas. Jika saya membaca kode cadel Anda dan melihat nilargumen, saya akan berasumsi bahwa Anda ingin menonaktifkan mode minor.

Kami juga dapat menonaktifkan blink-cursor-modedengan cara berikut:

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

Perhatikan lagi bahwa nilini bukan salah satu cara untuk menonaktifkan mode minor ini. Ini berlaku untuk hampir semua mode minor yang akan Anda temui.


Variabel

Sekarang mari kita lihat contoh variabel. Ketik C-hvtruncate-linesdan tekan RETuntuk melihat dokumentasi untuk variabel truncate-lines:

truncate-lines adalah variabel yang didefinisikan dalam `C source code '.

Non-nil berarti tidak menampilkan garis kelanjutan. Sebaliknya, beri setiap baris teks hanya satu baris layar.

Anda dapat mengaktifkan pemotongan dengan salah satu cara berikut:

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

Mungkin mengejutkan Anda bahwa 0dan -1akan berhasil. Sekali lagi, saya akan merekomendasikan untuk tidak menggunakannya karena niat Anda tidak jelas.

Satu-satunya cara untuk menonaktifkan pemotongan adalah ini:

(setq truncate-lines nil)     ; nil value

Dengan kata lain Anda dapat mengatur truncate-linessama dengan angka, huruf, string, daftar, atau apa pun yang Anda inginkan, selama tidak dievaluasi nilmaka akan memungkinkan pemotongan. (Tapi Anda harus tetap dengan tatau 1).

nispio
sumber
Ini menjawab pertanyaan saya. Terima kasih. :)
greduan
0

Ini semua adalah hal yang berbeda. 0, 1, dan -1 adalah angka yang berbeda; niladalah simbol.

Mereka masing-masing digunakan di semua tempat, untuk banyak hal yang berbeda. Untuk mencari tahu apa yang digunakan untuk masing-masing dalam konteks tertentu , lihat dokumen untuk konteks itu . Dan itu termasuk konteks mengaktifkan atau menonaktifkan mode yang berbeda, mengaktifkan dan menonaktifkan berbagai hal menggunakan variabel, dan banyak konteks lainnya.

Alhasil:

  • Pertanyaan Anda terlalu luas untuk berguna.
  • Anda perlu berkonsultasi dengan dokter: (a) secara umum, untuk belajar sedikit tentang Emacs Lisp, dan (b) dalam konteks tertentu (misalnya, dokter untuk mode tertentu).

Doc untuk mode yang diberikan umumnya memberi tahu Anda cara menghidupkan dan mematikannya. Jika itu memberitahu Anda untuk menggunakan 1 atau -1 atau nilatau bukan niluntuk sesuatu, maka itulah artinya. Ada beberapa aturan umum untuk mengaktifkan dan menonaktifkan mode (secara interaktif dan dari kode Lisp). Tapi sepertinya Anda benar-benar perlu memulai dengan mendapatkan latar belakang umum.

Konsultasikan dokumen Emacs untuk mempelajari cara meminta bantuan dan informasi lain dari Emacs sendiri : cara memeriksa nilai variabel, cara melihat dokumen variabel atau fungsi (termasuk fungsi yang mengaktifkan / menonaktifkan mode) , dan seterusnya.

Anda dapat mulai dengan menggunakan C-h C-h ( Ctrl-h Ctrl-h), untuk mempelajari tentang sistem bantuan Emacs. Dan membangun dari sana.

C-h rmenempatkan Anda ke dalam manual Emacs. Coba tutorial Emacs: C-h t. Dan periksa halaman Newbie Emacs Wiki dan halaman tentang LearningEmacs .

Untuk mulai belajar tentang Emacs Lisp:, C-h ilalu pilih manual yang bernama Emacs Lisp Intro, dan mulai membaca. Dan periksa halaman Emacs Wiki tentang Belajar Emacs Lisp .

Drew
sumber
1
Terima kasih atas jawaban anda. :) Saya kira saya bertanya tentang konteks apa yang digunakan. Seharusnya lebih jelas. Terima kasih. :) Saya menyadari perbedaan utama antara simbol, seperti bagaimana nilpersamaan logis dari false dan ttrue dan sisanya hanya angka. Tetapi saya tidak yakin konteks apa yang biasanya mereka gunakan.
greduan
Lihat apa yang saya tulis tentang informasi umum tentang mode (tertaut ke manual). Terlepas dari informasi umum tersebut, Anda harus selalu mulai dengan memeriksa dokumen untuk mode tertentu yang Anda minati. Ini akan memberi tahu Anda apa yang harus digunakan untuk menyalakan atau mematikannya. Jika tidak, maka perilaku umum yang diuraikan dalam manual berlaku, tetapi mulai dengan mode dokumentasi khusus . Intinya bukanlah perbedaan antara hal-hal di dalam dan dari diri mereka sendiri. Intinya adalah perbedaan dalam bagaimana mereka digunakan dalam konteks tertentu. Untuk itu, mulailah dengan menanyakan konteksnya.
Drew
1
BAIK. Terima kasih banyak. :) Keren kalau Emacs punya situs SE sendiri eh?
greduan
1
PS Jangan khawatir. Saya yakin bahwa orang lain akan menumpahkan kacang di sini tentang beberapa aturan umum . ;-) Saya lebih suka (a) membuat Anda berkonsultasi dengan dokter tentang ini, karena ini ditulis hanya dengan pembelajaran ini dalam pikiran, dan (b) membuat Anda memulai dengan selalu menanyakan mode khusus tentang dirinya. Aturan umum tidak truf keterangan mode, dan jika Anda mengabaikan yang terakhir maka Anda akan kehilangan hal-hal.
Drew
Apa yang akan keren ketika SE mendapatkan mode Emacs sendiri. ;-)
Drew