Kode di bawah ini berfungsi dengan baik dari pengujian singkat saya di c-mode
buffer:
- Setelah mengetik
/*
, tekan M-j
, binding default untuk indent-new-comment-line
(dan binding default untuk c-indent-new-comment-line
in c-mode
). Jika ini adalah baris komentar pertama, karakter penutup */
akan dimasukkan secara otomatis.
- Memukul
M-j
lebih banyak kali dengan memasukkan lebih banyak baris komentar dengan *
awalan. Ini adalah perilaku c-indent-new-comment-line
/ indent-new-comment-line
fungsi bawaan. Lihat beberapa baris dokumentasi komentar .
- Nugget tambahan dalam kode di bawah ini memastikan bahwa setidaknya ada satu ruang antara
*
di setiap baris komentar dan komentar.
(defun my-prettify-c-block-comment (orig-fun &rest args)
(let* ((first-comment-line (looking-back "/\\*\\s-*.*"))
(star-col-num (when first-comment-line
(save-excursion
(re-search-backward "/\\*")
(1+ (current-column))))))
(apply orig-fun args)
(when first-comment-line
(save-excursion
(newline)
(dotimes (cnt star-col-num)
(insert " "))
(move-to-column star-col-num)
(insert "*/"))
(move-to-column star-col-num) ; comment this line if using bsd style
(insert "*") ; comment this line if using bsd style
))
;; Ensure one space between the asterisk and the comment
(when (not (looking-back " "))
(insert " ")))
(advice-add 'c-indent-new-comment-line :around #'my-prettify-c-block-comment)
;; (advice-remove 'c-indent-new-comment-line #'my-prettify-c-block-comment)
Sebagai contoh, setelah mengevaluasi kode di atas, saya mendapatkan di bawah ini pada mengetik: /*
M-j
First comment line
M-j
Second comment line
. ▮ menunjukkan lokasi kursor di akhir pengetikan.
/*
* First comment line
* Second comment line▮
*/
Menguji blok komentar offset ..
Dengan kursor setelah titik koma, ketikkan: /*
M-j
Test offset comment
beri di bawah ini. ▮ menunjukkan lokasi kursor di akhir pengetikan.
#include<stdio.h>
main() {
printf("Hello World"); /*
* Test offset comment▮
*/
}