Saya mencoba untuk membuat fungsi yang menempatkan / meluruskan / inden kurung keriting sesuai dengan pemformatan gaya Allman (untuk pengkodean dalam C).
Secara umum, saya penggemar antarmuka Smartparens tersedia untuk pengguna untuk menyesuaikan fungsionalitas. Saya telah menulis banyak fungsi lain menggunakan antarmuka Smartparens sehingga akan memiliki preferensi yang kuat untuk tidak beralih paket pada saat ini. Yang mengatakan, saya terbuka untuk implementasi paket-agnostik (misalnya, bisa defadvice
relevan di sini?).
Aktif untuk masalah yang dihadapi. Apa tujuan akhirnya? Mari kita anggap kita sedang mengkode dan mencapai negara yang diwakili di bawah ini. Simbol pipa mewakili kursor; Saya telah mengetik header fungsi dan kurung buka {
, dan Smartparens secara otomatis menambahkan kurung penutup }
. Pada titik ini, saya ingin itu menekan RET
...
int main {|}
... mengarah ke yang berikut:
int main
{
|
}
Saya sudah bisa menulis fungsi yang menghasilkan perilaku ini tetapi hanya berfungsi untuk indentasi tingkat pertama (misalnya, untuk fungsi utama kami dalam contoh di atas). Saya tidak bisa membuatnya berfungsi untuk tingkat indentasi berikutnya (lihat gif):
Kode yang relevan di bawah ini. Fungsi ini tidak cantik tapi saya pikir itu harus berfungsi ... Baris terakhir adalah antarmuka ke Smartparens.
Ada saran?
(defun my-create-newline-and-enter-sexp (&rest _ignored)
"Open a new brace or bracket expression, with relevant newlines and indent. "
(interactive)
(progn
(backward-char 2) (newline) (forward-char) (newline)
(indent-according-to-mode)
(previous-line 2) (indent-according-to-mode)
(next-line) (next-line) (indent-according-to-mode)))
(sp-local-pair 'c-mode "{" nil :post-handlers '((my-create-newline-and-enter-sexp "RET")))