न्यू उत्तर
मैं सटीक आवश्यकता है कि आप अपने प्रश्न में कहा था में भाग गया। मुझे अपनी नई परियोजना की कोडिंग शैली के अनुसार इंडेंटेशन सेट करना पड़ा। कुछ शोध के बाद, मैंने इसे Custom Line-up Functions का उपयोग करके हासिल किया।
अपने my-cpp-mode
इस तरह देखने के लिए संशोधित करें:
(defun my-c-lineup-inclass (langelem)
(let ((inclass (assoc 'inclass c-syntactic-context)))
(save-excursion
(goto-char (c-langelem-pos inclass))
(if (or (looking-at "struct")
(looking-at "typedef struct"))
'+
'++))))
(defun my-cpp-mode()
"My C++ mode"
(c++-mode)
(c-set-style "K&R")
(setq c-basic-offset 4)
(c-set-offset 'access-label '-)
(c-set-offset 'inclass 'my-c-lineup-inclass)
;; ...
(setq mode-name "My C++")
)
यदि यह जवाब स्वीकार्य है, मैं आगे जाना है और वर्ष जवाब निकाल देंगे।
ओल्ड उत्तर
आप क्या हासिल करने की कोशिश कर रहे हैं के आधार पर, मैं एक अलग दृष्टिकोण का सुझाव दे सकते? आप कक्षा और वर्ग के सदस्यों की तुलना में एक अलग इंडेंटेशन स्तर पर एक्सेस लेबल चाहते हैं। इसे प्राप्त करने के लिए निम्नलिखित का प्रयोग करें।
(access-label . /)
Emacs प्रलेखन से: - ', ++',
-', *', or
/' तो `का एक सकारात्मक या नकारात्मक एकाधिक सी बुनियादी ऑफसेट
तो OFFSET प्रतीकों +',
में से एक है 'बेस इंडेंटेशन में जोड़ा गया है; क्रमशः 1, -1, 2, -2, 0.5, और -0.5।
यहां परिभाषित कस्टम शैलियों में से एक से स्निपेट है।
(c-add-style
"xyz-style"
'((indent-tabs-mode . nil)
(fill-column . 75)
(c-basic-offset . 4)
(c-offsets-alist . (
(access-label . /)
(inextern-lang . 0)
(innamespace . 0)
(member-init-intro . ++)
))))
4 को c-basic-offset
सेट के साथ, (access-label . /)
पहुँच लेबल के लिए 2 रिक्त स्थान की एक नकारात्मक खरोज कहते हैं। अपने नमूना कोड पर मेरे इंडेंटेशन मोड का वास्तविक परिणाम यहां दिया गया है।
class A
{
// I ALWAYS use access labels in classes
public: // access-label
int member; // inclass
};
struct B
{
// I NEVER use access labels in structs
int member; // inclass
};
मैं इस मोड की अनुशंसा करता हूं क्योंकि, सदस्य चर/संरचना सदस्यों का इंडेंटेशन स्तर सुसंगत है। एफडब्ल्यूआईडब्ल्यू, Google C Style एक ही दृष्टिकोण का पालन करता है।
जहां तक मैं कह सकता हूं, कोई वर्ग सदस्य या संरचना सदस्य (inclass
sytax तत्व) के बीच अंतर नहीं कर सकता है। आप किसी क्षेत्र पर सिंटैक्टिक विश्लेषण करने के लिए M-x c-syntactic-information-on-region
का उपयोग कर सकते हैं। उदाहरण पर आपके जैसे एक विश्लेषण निम्नलिखित उत्पन्न करता है। आउटपुट से, यदि आप कक्षा या संरचना में हैं तो अंतर करने के लिए कुछ भी नहीं है।
class A // ((topmost-intro 1))
{ // ((class-open 1))
// ((inclass 64) (topmost-intro 64) (comment-intro))I ALWAYS use access labels in classes
// ((inclass 64) (topmost-intro 64))
public: // ((inclass 64) (access-label 64))access-label
int member; // ((inclass 64) (topmost-intro 64))inclass
}; // ((class-close 1))
// ((topmost-intro 503))
struct B // ((topmost-intro 503))
{ // ((class-open 629))
// ((inclass 694) (topmost-intro 694) (comment-intro))I NEVER use access labels in structs
// ((inclass 694) (topmost-intro 694))
int member; // ((inclass 694) (topmost-intro 694))inclass
}; // ((class-close 629))
मुझे लगता है कि आप सिर्फ सार्वजनिक चाहते हैं: और निजी: इंडेंटेशन स्तर जोड़ने के लिए नहीं। – djechlin
धन्यवाद लेकिन यदि आप एक ही कॉलम पर "{" और "public:" का मतलब है, तो ऐसा नहीं है जो मैं चाहता हूं। – Aurelien
मैं आपकी इच्छा को समझ सकता हूं, और पर्याप्त tweaking दिया जाना चाहिए यह संभव होना चाहिए। दूसरी तरफ, यह अच्छी तरह से हो सकता है कि यह आसानी से हासिल नहीं किया जाता है, क्योंकि वर्गों और संरचनाओं के बीच गैर-भेद सी ++ में बहुत गहराई से चलता है: आप संरचनाओं के लिए एक्सेस विनिर्देशों का भी उपयोग कर सकते हैं। चूंकि यह उपयोग दुर्लभ है, हालांकि, मैं इस प्रश्न को +1 कर दूंगा और यह देखने में दिलचस्पी होगी कि कोई समाधान चालू है या नहीं। – MvG