क्या कोड टिप्पणियों के लिए पूरी तरह से स्वचालित भरण-पैरा-मोड है?


18

मैं जबकि टाइपिंग (क्या के लिए इसी तरह हर समय भरा पैराग्राफ रखने के लिए एक छोटी सी मोड के लिए देख रहा हूँ aggressive-indent-modeखरोज के लिए करता है)। इसे केवल टिप्पणियों को भरने के लिए पर्याप्त स्मार्ट होना चाहिए (और शायद भाषा के आधार पर तार)।

कुछ चीजें हैं जो मैं कोशिश की है इस प्रकार हैं:

  • auto-fill-mode स्वचालित रूप से भर जाता है, जबकि आप नए पैराग्राफ लिख रहे हैं लेकिन फिर से भरने के लिए जब आप पैराग्राफ संपादित नहीं करता है।

  • refill-mode पैराग्राफ को लगातार रिफिल करता है लेकिन यह कोड को पैराग्राफ के साथ-साथ टिप्पणियों में भी लपेटने की कोशिश करता है।

  • मैं जोड़ने की कोशिश की fill-paragraphकरने के लिए after-change-functionsहुक लेकिन यह पूर्ववत और अन्य चीजों के बहुत ऊपर शिकंजा (यह शायद सब क्षम्य है, लेकिन कुछ प्रयास ले जाएगा)।

किसी भी बेहतर विचार?


6
एक तरफ: के अध्याय 7 Glickstein के लेखन जीएनयू Emacs एक्सटेंशन के माध्यम से चलता है कि कैसे आप कार्यक्षमता आप के बाद कर रहे हैं लागू हो सकता है। हो सकता है सीखने के लिए एक बेहतरीन अवसर हो।
दान

मैं में स्वत: भरण-पैरा (स्वत: भरण सक्षम करके) देख रहा हूँ org-mode, लेकिन आप कोशिश कर सकते हैं rebox2
CodyChan

जवाबों:


4

मैं इस कार्यक्षमता को लागू करने का एक न्यूनतम रास्ता के साथ आया था: बस बाँध स्पेस बार भी फोन करने के लिए (fill-paragraph)!

(defun fill-then-insert-space ()
  (interactive)
  (fill-paragraph)
  (insert " "))
(global-set-key (kbd "SPC") #'fill-then-insert-space)

चेतावनी के एक जोड़े है कि मैं अब तक भर ठोकर खाई गए हैं:

  1. elisp-mode(संभवतः अन्य) कुछ फैंसी कोड भरने जब आप कॉल करता है fill-paragraph, इस या आप क्या चाहते हैं नहीं हो सकता है हो सकता है। शायद अगर बिंदु एक टिप्पणी में है परीक्षण या docstring द्वारा के साथ तय किया जा सकता है लेकिन मुझे यकीन नहीं है कि कैसे करना है कर रहा हूँ।

  2. कभी-कभी आपको आसानी से अनेक स्थानों (क्योंकि नहीं दर्ज कर सकते हैं fill-paragraph, तो अवांछित स्पेस को मारता है)। के बाद से अंतरिक्ष बार अब काम करता है की तरह just-one-spaceसाथ बाध्यकारी है कि बदलने के लिए यह शायद ठीक है (insert " ")

मैं इस कार्यक्षमता युक्त एक छोटी सी-मोड, यह पर उपलब्ध है बनाया GitHub या Melpa पैकेज में aggressive-fill-paragraph


मैं इसे विडंबना है कि लगता है aggressive-fill-paragraphहै अब तक कम से कम आक्रामक refill-modeहै, जो बहुत बेकार होने के आक्रामक निर्भर है (जैसा कि आप भी किसी के साथ बोली नहीं कर सकते > रीफिल मोड उलटफेर सामान के बिना: भले ही आप प्रतिस्थापन के लिए regexps का उपयोग करें)
हाय-एन्जिल

1

(मैं नहीं: पी) आप कैसे रीफिल मोड बर्ताव को पसंद करते हैं, लेकिन नहीं जब यह व्यवहार करती है, यह अपेक्षाकृत आसान ठीक करने के लिए इसे रोकते हुए किया जाना चाहिए, जब भी आप सही स्थिति में नहीं हैं

उदाहरण के लिए

(defvar plop/refill-enabler-function nil)

(defun plop/region-in-comment (beg end)
  ;; should really be comment-only-p, but that seems really broken for me
  (not
   (loop for c from beg to end
      if (not (eq 'font-lock-comment-face (get-char-property c 'face)))
      return t)))

(defun plop/refill-after-change-function (beg end len)
  (unless undo-in-progress
    (when (and plop/refill-enabler-function
               (funcall plop/refill-enabler-function beg end))
      (setq refill-doit end))))

(defun plop/install-refill-hack ()
  (if refill-mode
      (progn
        (add-hook 'after-change-functions 'plop/refill-after-change-function nil t)
        (remove-hook 'after-change-functions 'refill-after-change-function t))
    (progn
      (remove-hook 'after-change-functions 'plop/refill-after-change-function t))))

(defun plop/refill-hook ()
  (set (make-local-variable 'plop/refill-enabler-function)
       #'plop/region-in-comment)
  (add-hook 'refill-mode-hook 'plop/install-refill-hack t t)
  (refill-mode))

(add-hook 'some-hook 'plop/refill-hook)

मूल रूप से यह उस फ़ंक्शन को हटा देता है जो रिफिल को ट्रिगर करता है after-change-functionsऔर इसे एक के साथ बदल देता है जो इसके अतिरिक्त जांच करेगा कि हम ठीक एक ही काम करने से पहले एक टिप्पणी में हैं।


एक अच्छी शुरुआत की तरह दिखता है, लेकिन अभी भी काफी सही नहीं है: यदि एक टिप्पणी को संपादित करते समय एक फिर से भरना शुरू होता है, तो यह आसपास के कोड सहित पूरे पैराग्राफ को फिर से भरता है। पैराग्राफ सीमाओं को ठीक से परिभाषित नहीं करने के लिए यह आसपास के मोड की गलती हो सकती है, लेकिन मुझे संदेह है: मैंने एमएसीएस लिस्प मोड में कोशिश की, जो मैं किताब द्वारा चीजें करता हूं।
गिल्स एसओ- बुराई को रोकना '

ठीक है, इसलिए मैंने कहा कि मुझे पसंद नहीं है refill-mode:) समस्या यह है कि इसके बजाय का refill-modeउपयोग करता fill-regionहै fill-paragraph, इस प्रकार सम्मान fill-paragraph-functionऔर चीजों को संभावित रूप से गड़बड़ करने की क्षमता खो रहा है
सिग्मा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.