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")))
sumber
Terpecahkan. Urutan pergerakan kursor dari versi pertama saya (dalam posting asli) adalah funky.
Sebagai referensi untuk pembaca di masa mendatang, kode berikut harus berfungsi. Itu juga memerlukan paket Smartparens (yang bisa Anda dapatkan dari git-hub). Saya menjalankan Emacs 24.4. Ini bekerja dengan mode indent listrik diaktifkan atau dinonaktifkan.
Dan Anda juga harus memasukkan yang berikut ini di file init Anda, di suatu tempat setelah memuat paket Smartparens:
sumber
previous-line
dengansearch-forward
untuk mencoba dan menemukan kembali di mana Anda berada, Anda lebih baik mengingat posisi Anda dalam suatu variabel dan kemudian gunakan sajagoto-char
.save-excursion
tetapi saya yakin ada orang lain yang tidak saya kenal.Cara lain, terser, adalah dengan menggunakan
smartparens
spesifikasi penyisipan .sumber
Inilah kode yang saya gunakan, hanya untuk memberi Anda lebih banyak ide untuk mengubah kode Anda:
Saya lebih suka gaya penjepit gantung, karena menghemat ruang.
sumber