memformat constexpr jika dalam mode c ++ -

10

Saya baru-baru ini mulai menggunakan C ++ 17, yang membawa constexpr jika. Namun ini mengacaukan c++-modeindentasi default.

// emacs 25.3.2 with --no-init
if constexpr (n == 1) {
    // Why?
  } else if constexpr (n == 2) {
    // This is a mess...
  } else {
  // and it keeps getting weird
}

Apakah ada yang juga

  1. Tahu alternatif yang lebih sederhana dari cc-mode?
  2. Tahu bagaimana saya bisa memperbaiki masalah khusus ini?
topisani
sumber

Jawaban:

6

UPDATE: Versi pretest yang saya taruh di sana dalam pertanyaan asli ( emacs-26.0.90.tar.gz) memiliki bug yang menyebabkan loop infinity tertentu saat mengurai buffer, khususnya ketika menggunakan <token dalam konteks certaing, seperti menulis <sebagai karakter pertama dari buffer kosong di Jawa atau C ++ atau setelah kata kunci template. Bug telah diperbaiki di emacs-26cabang, jadi itulah yang harus Anda unduh.


Butuh banyak bagi saya untuk menemukan jawaban dan belajar bagaimana properti menyesuaikan perilaku dalam bahasa elisp tetapi, cara untuk memperbaikinya adalah dengan mengatakan cc-modebahwa itu constexpradalah "nama kebisingan", yang berarti bahwa itu akan diperlakukan sebagai spasi putih dan karenanya diabaikan oleh pengurai.

Masalahnya adalah bahwa dalam rilis stabil terakhir emacs (25,3), fitur menambahkan kata-kata kebisingan tidak ditambahkan, bahkan ketika itu ada di repo sejak Februari 2016, jadi Anda harus mengunduh versi non-rilis.

cd tmp_folder_of_your_choice

sudo apt-get install build-essential # if you don't have it yet
sudo apt-get build-dep emacs24 # get all dependancies to build emacs

# Not this: wget https://github.com/emacs-mirror/emacs/archive/emacs-26.0.90.tar.gz

wget -O emacs-26.zip https://github.com/emacs-mirror/emacs/archive/e8636ac8cc96e1e7e948f04091792da09dafcc76.zip

# or just the last version of the branch, but the exact version I have is the one above
# wget https://github.com/emacs-mirror/emacs/archive/emacs-26.zip

unzip emacs-26.zip
cd emacs-emacs-26

./autogen.sh
./configure
make
sudo make install
emacs ~/.emacs

Dan kemudian, misalnya di akhir .emacsfile, tambahkan:

; Load the mode before-hand to make the symbols visible
(require 'cc-mode)
(custom-set-variables '(c-noise-macro-names '("constexpr")))
Peregring-lk
sumber
sementara ini hebat, dan saya mencobanya sekarang, masih terasa seperti hack - apakah ada cara yang lebih baik untuk menambahkannya hanya dalam satu posisi sintaksis itu?
topisani
Saya tidak tahu, tetapi solusi ini sangat cocok untuk saya.
Peregring-lk
ya, itu berhasil bagi saya, dengan proyek yang luar biasa ini dan juga emacs git terbaru
topisani
@topisani Tolong, bisakah Anda melihat pertanyaan itu jika hal yang sama terjadi pada Anda setelah menginstal versi emacs terakhir? emacs.stackexchange.com/q/36423/14016
Peregring-lk