Menjawab:
Simbol untuk fungsi dan makro memiliki lisp-indent-function
properti yang dapat Anda atur dengan declare
atau dalam kasus Anda, karena if
sudah ditentukan, Anda bisa menggunakannya put
.
Anda dapat membaca tentang kemungkinan nilai properti di sini:
M-: (info "(elisp) Indenting Macros")
return
if
Pengaturan default adalah 2
yang berarti bentuk kedua mendapatkan perlakuan khusus dan diimbangi.
Anda dapat mengubah nilai properti menjadi 'defun
dan semua formulir tubuh akan berbaris.
(put 'if 'lisp-indent-function 'defun)
Praktek terbaik:
Penting untuk dicatat bahwa ada alasan untuk gaya lekukan. if
di Elisp TIDAK seperti if
di Common Lisp.
Perhatikan tanda tangan yang berbeda:
Gangguan Umum: (if TEST THEN &OPTIONAL ELSE)
Emacs Lisp: (if COND THEN ELSE...)
Dalam Emacs lisp, Anda dapat memiliki banyak bentuk setelah kondisi yang Anda inginkan tetapi hanya bentuk pertama adalah klausa THEN, semua bentuk lainnya adalah bagian dari klausa ELSE.
Ini adalah if
formulir Elisp yang valid yang tidak valid di CL:
(if something
(message "THEN")
(message "all")
(message "these")
(message "run")
(message "on")
(message "ELSE"))
Ini menunjukkan mengapa penting bahwa klausa LALU lebih menjorok, itu membuatnya menonjol terhadap semua bentuk ELSE.
Selain lekukan yang penting bagi kemampuan pengguna untuk mengurai kode, itu juga akan bertentangan dengan pola gaya elisp yang diterima. 99,99999% (dihitung secara carfefully) dari kode elisp yang Anda temui akan menggunakan skema indentasi default yang persis sama. Mengubah lekukan if
untuk Anda gunakan sendiri akan menyulitkan Anda untuk bekerja pada orang lain dan membuatnya sulit bagi orang lain untuk mengerjakan milik Anda.
if
seperti yang dilakukan olehlisp-indent-function
.declare
pernyataan di setiap makro baru, yang bagus untuk dilakukan dalam hal apa pun.