C++ 11 मोड या emacs के लिए सेटिंग्स?




c++11 elisp (5)

मैं Emacs 23.3.1 (Ubuntu, Oneiric package) चला रहा हूँ और emacs नए C ++ 11 कीवर्ड्स, कॉन्स्टेक्सप्र, थ्रेड_लोक, आदि में से किसी को समझने के लिए प्रकट नहीं होता है। अब टेम्पलेट पैरामीटर, या नए 'एनम वर्ग' सिंटैक्स में अनुमति दी गई है। क्या कोई अद्यतन या वैकल्पिक मॉड्यूल कहीं है? या असफल, कुछ सेटिंग्स emacs अधिक C ++ 11 अनुकूल समय में अनुकूल बनाने के लिए?


मैंने ट्रंक संस्करण की जाँच की है, cc-mode को अभी तक अपडेट नहीं किया गया है, और AFAIK का कोई विकल्प नहीं है। यदि आप वास्तव में यह चाहते हैं, लेकिन अपने हाथों को गंदा नहीं करना चाहते हैं, तो आपको इसे लागू करने के लिए किसी को भुगतान करना चाहिए ...


माइक वेलर के एक अनुरोध के अनुसार यहाँ C ++ 11 स्ट्रिंग्स शाब्दिक (incl। उपयोगकर्ता-निर्धारित शाब्दिक) के लिए एक अद्यतन संस्करण है।

(add-hook
 'c++-mode-hook
 '(lambda()
    ;; We could place some regexes into `c-mode-common-hook', but note that their evaluation order
    ;; matters.
    (font-lock-add-keywords
     nil '(;; complete some fundamental keywords
           ("\\<\\(void\\|unsigned\\|signed\\|char\\|short\\|bool\\|int\\|long\\|float\\|double\\)\\>" . font-lock-keyword-face)
           ;; namespace names and tags - these are rendered as constants by cc-mode
           ("\\<\\(\\w+::\\)" . font-lock-function-name-face)
           ;;  new C++11 keywords
           ("\\<\\(alignof\\|alignas\\|constexpr\\|decltype\\|noexcept\\|nullptr\\|static_assert\\|thread_local\\|override\\|final\\)\\>" . font-lock-keyword-face)
           ("\\<\\(char16_t\\|char32_t\\)\\>" . font-lock-keyword-face)
           ;; PREPROCESSOR_CONSTANT, PREPROCESSORCONSTANT
           ("\\<[A-Z]*_[A-Z_]+\\>" . font-lock-constant-face)
           ("\\<[A-Z]\\{3,\\}\\>"  . font-lock-constant-face)
           ;; hexadecimal numbers
           ("\\<0[xX][0-9A-Fa-f]+\\>" . font-lock-constant-face)
           ;; integer/float/scientific numbers
           ("\\<[\\-+]*[0-9]*\\.?[0-9]+\\([ulUL]+\\|[eE][\\-+]?[0-9]+\\)?\\>" . font-lock-constant-face)
           ;; c++11 string literals
           ;;       L"wide string"
           ;;       L"wide string with UNICODE codepoint: \u2018"
           ;;       u8"UTF-8 string", u"UTF-16 string", U"UTF-32 string"
           ("\\<\\([LuU8]+\\)\".*?\"" 1 font-lock-keyword-face)
           ;;       R"(user-defined literal)"
           ;;       R"( a "quot'd" string )"
           ;;       R"delimiter(The String Data" )delimiter"
           ;;       R"delimiter((a-z))delimiter" is equivalent to "(a-z)"
           ("\\(\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\)" 1 font-lock-keyword-face t) ; start delimiter
           (   "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\(.*?\\))[^\\s-\\\\()]\\{0,16\\}\"" 1 font-lock-string-face t)  ; actual string
           (   "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(.*?\\()[^\\s-\\\\()]\\{0,16\\}\"\\)" 1 font-lock-keyword-face t) ; end delimiter

           ;; user-defined types (rather project-specific)
           ("\\<[A-Za-z_]+[A-Za-z_0-9]*_\\(type\\|ptr\\)\\>" . font-lock-type-face)
           ("\\<\\(xstring\\|xchar\\)\\>" . font-lock-type-face)
           ))
    ) t)

उपयोक्ता परिभाषित स्ट्रिंग शाब्दिकों के उपरोक्त कार्यान्वयन में, सीमांकक टैग को font-lock-keyword-face रूप में अलग से चिह्नित किया गया है; एक अन्य विकल्प font-lock-constant-face । यह कार्यान्वयन उतना कुशल नहीं है जितना कि यह हो सकता है; लेकिन यह काम करता है और Emacs को धीमा नहीं करता है। ध्यान दें कि उपयोगकर्ता-परिभाषित स्ट्रिंग्स शाब्दिकों के लिए रेगेक्स कहीं से "चोरी" नहीं हुआ है; इसलिए मुझे उम्मीद है कि वे काम करेंगे। किसी भी टिप्पणी का स्वागत है।

यदि आप संपूर्ण शाब्दिक स्ट्रिंग को font-lock-string-face रूप में परिभाषित करना पसंद करते हैं - जिसमें सीमांकक शामिल हैं - तो केवल एक द्वारा तीन रीजैक्स को बदलें। इस तरह:

    .
    .
("\\<\\([uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(.*?)[^\\s-\\\\()]\\{0,16\\}\"\\)\\>" 1 font-lock-string-face t)

मज़े करो।


पैकेज पर एक नज़र डालें: Emacs के लिए "आधुनिक C ++" फ़ॉन्ट-लॉक । यह Melpa पर भी उपलब्ध है।

"आधुनिक C ++" के लिए सिंटैक्स हाइलाइटिंग समर्थन - C ++ 17 और तकनीकी विशिष्टता तक। इस पैकेज का उद्देश्य बिना निर्भरता के C ++ भाषा का एक सरल हाइलाइट प्रदान करना है।

अतिरिक्त हाइलाइटिंग (उपयोगकर्ता परिभाषित प्रकार, फ़ंक्शन, आदि) और अभद्रता के लिए सी ++ - मोड प्रमुख मोड के साथ इसका उपयोग करने की सिफारिश की जाती है।

मैं इस मामूली विधा का अनुरक्षक हूं। किसी भी प्रतिक्रिया की सराहना की है।


खैर, मैं 24.1 का उपयोग कर रहा हूं। कुछ C ++ 98 कीवर्ड गायब हैं, और सभी नए C ++ 11 कीवर्ड। यह संख्या स्थिरांक भी फ़ॉन्ट नहीं करता है। ऐसा लगता है मानो c ++ - मोड एक दशक से अपडेट नहीं किया गया है।

मैं लंबे समय से निम्नलिखित कोड का उपयोग कर रहा हूं, और हाल ही में C ++ 11 कीवर्ड जोड़े गए हैं। इसे अपने .emacs में डालने का प्रयास करें; इसमें कुछ छेद भरने चाहिए।

(require 'font-lock)

(defun --copy-face (new-face face)
  "Define NEW-FACE from existing FACE."
  (copy-face face new-face)
  (eval `(defvar ,new-face nil))
  (set new-face new-face))

(--copy-face 'font-lock-label-face  ; labels, case, public, private, proteced, namespace-tags
         'font-lock-keyword-face)
(--copy-face 'font-lock-doc-markup-face ; comment markups such as Javadoc-tags
         'font-lock-doc-face)
(--copy-face 'font-lock-doc-string-face ; comment markups
         'font-lock-comment-face)

(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)


(add-hook 'c++-mode-hook
      '(lambda()
        (font-lock-add-keywords
         nil '(;; complete some fundamental keywords
           ("\\<\\(void\\|unsigned\\|signed\\|char\\|short\\|bool\\|int\\|long\\|float\\|double\\)\\>" . font-lock-keyword-face)
           ;; add the new C++11 keywords
           ("\\<\\(alignof\\|alignas\\|constexpr\\|decltype\\|noexcept\\|nullptr\\|static_assert\\|thread_local\\|override\\|final\\)\\>" . font-lock-keyword-face)
           ("\\<\\(char[0-9]+_t\\)\\>" . font-lock-keyword-face)
           ;; PREPROCESSOR_CONSTANT
           ("\\<[A-Z]+[A-Z_]+\\>" . font-lock-constant-face)
           ;; hexadecimal numbers
           ("\\<0[xX][0-9A-Fa-f]+\\>" . font-lock-constant-face)
           ;; integer/float/scientific numbers
           ("\\<[\\-+]*[0-9]*\\.?[0-9]+\\([ulUL]+\\|[eE][\\-+]?[0-9]+\\)?\\>" . font-lock-constant-face)
           ;; user-types (customize!)
           ("\\<[A-Za-z_]+[A-Za-z_0-9]*_\\(t\\|type\\|ptr\\)\\>" . font-lock-type-face)
           ("\\<\\(xstring\\|xchar\\)\\>" . font-lock-type-face)
           ))
        ) t)

उम्मीद है की यह मदद करेगा।


इसके साथ एंड्रियास के फ़्लोटिंग पॉइंट रेगेक्सप को बदलने से फ़्लोट्स के हिलिंग में सुधार होगा।

integer/float/scientific literals
("\\<[-+]?[0-9]*\\.?[0-9]+\\([uUlL]+\\|[eE][-+]?[0-9]+\\)?[fFlL]?\\>" . font-lock-constant-face)

आशा है कि किसी की मदद करता है।







syntax-highlighting