2011-11-13 10 views
9

मैं इस समारोह चल रहा हूँ (इंटरैक्टिव और एक हुक में) पुन: प्रारूपित करना स्रोत कोडemacs save-excursion पॉइंट बहाल नहीं कर रहा है?

(defun a-style()                                               
    (interactive)                                               
    (save-excursion                                               
    (shell-command-on-region (point-min) (point-max) "/usr/local/bin/astyle -A10 -s4 -m0 -M40 -k1 -W0 -z2 -xd -CSKNLwYfpHjJcn" t t))) 

लेकिन बचाने-भ्रमण काम करने के लिए नहीं लगता है, बिंदु हमेशा के लिए 1 कूदता (शेल कमांड हालांकि काम करता है!)। क्या में यहां कुछ भूल रहा हूँ?

धन्यवाद, मारियो

संपादित करें:

तो मैं अंत में यह अनुभवहीन तरह से किया था:

(defun a-style()                                               
    (interactive)                                               
    (setq temp-point (point))                                            
    (shell-command-on-region (point-min) (point-max) "/usr/local/bin/astyle -A10 -s4 -m0 -M40 -k1 -W0 -z2 -xd -CSKNLwYfpHjJcn" t t)                   
    (goto-char temp-point)) 

किंडा बेवकूफ है, लेकिन मैं क्या चाहते है। अगर कोई बेहतर समाधान के बारे में जानता है, तो मैं आभारी रहूंगा।

+2

'setq' के बजाय' चलो 'फ़ॉर्म के बारे में कैसे? –

उत्तर

10

shell-command-on-region के लिए दस्तावेज़ भाग में कहते हैं:

तो REPLACE, वैकल्पिक पांचवें तर्क, गैर शून्य, सम्मिलित मतलब यह है कि है START से END तक पाठ के स्थान पर उत्पादन, डाल बिंदु और मार्क इसके आसपास ।

आप t करने के लिए सेट की जगह है के बाद से, यह सभी पाठ बदल देता है और उसके चारों ओर डालता बिंदु और निशान है, और इसलिए बिंदु इंगित मिनट के लिए चला जाता है। इसके अलावा, मुझे लगता है कि जब save-excursion द्वारा पहले सहेजा गया स्थान हटा दिया गया है तो Emacs हटाए गए क्षेत्र की शुरुआत तक बैक हो जाता है जो फिर बिंदु-मिनट है।

मुझे लगता है कि आपका समाधान ठीक है।

3

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं इसी मुद्दे पर आया। यहां एक साधारण मैक्रो है जो पॉइंट और बफर को पुनर्स्थापित करता है:

(defmacro my-save-excursion (&rest forms) 
    `(let* (
    (oldp (point)) 
    (oldbuff (current-buffer)) 
    (retval (progn ,@forms)) 
    ) 

    (unless (eq (current-buffer) oldbuff) (switch-to-buffer oldbuff)) 
    (goto-char oldp) 
    retval 
    ) 
) 
संबंधित मुद्दे