2012-06-19 10 views
6

शर्मनाक सरल सवाल। विंडोज 7 64 पर Emacs 23.4.1 में सीपीरल मोड का उपयोग करते हुए, जब मैं स्क्रिप्ट चलाने के लिए C-c c का उपयोग करता हूं, तो Emacs उद्धरण में पथ को लपेटता नहीं है, इसलिए रिक्त स्थान वाली किसी भी निर्देशिका में पर्ल फ़ाइल को ढूंढने में असमर्थ होता है। "Can't open perl script "g:/foo/bar/first": No such file or directory"पर्ल: मैं एआरएक्स को पर्ल स्क्रिप्ट के पूर्ण पथ में उद्धरण जोड़ने के लिए कैसे प्राप्त कर सकता हूं?

प्रश्न: कैसे मैं Emacs उद्धरण चिह्नों का उपयोग जब फ़ाइल नाम गुजर ही पर्ल के लिए कर सकता हूँ "C:/Perl64/bin\perl.exe -w g:/foo/bar/first second/myscript.pl" यह त्रुटि संदेश उत्पन्न करता है?

संपादित करें: किसी कारण से मैं टिप्पणी नहीं कर सकता (शायद एक ब्राउज़र समस्या) इसलिए मैं @legoscia से टिप्पणी के जवाब में मूल पोस्ट संपादित कर रहा हूं: "सी-सी सी कमांड मोड-संकलन चलाता है"। पर्ल मेनू में इसे "रन" के रूप में चिह्नित किया जाता है।

+0

'सी-सी सी' एक मानक मानक बाध्यकारी प्रतीत होता है। यदि आप 'सी-एच सी सी-सी सी' टाइप करते हैं तो आपको क्या मिलता है? – legoscia

+1

'mode-compile.el' मानक नहीं है। क्या आप http://perso.tls.cena.fr/boubaker/distrib/mode-compile.el या कुछ और उपयोग कर रहे हैं? – phils

+0

@phils मैं जानबूझकर 'मोड-compile.el' का उपयोग नहीं कर रहा हूं - मुझे इसे स्थापित करने की कोशिश करने की कोई याद नहीं है और न ही मुझे ऐसा करने की आवश्यकता होगी क्योंकि मेरे द्वारा उपयोग की जाने वाली एकमात्र भाषा का अर्थ है (आर, पर्ल) । शायद यह ऐसा कुछ है जो ईएसएस के साथ स्थापित किया गया था ...? जब एक पर्ल स्क्रिप्ट बफर में होती है, तो प्रमुख मोड सीपीरल होता है और मामूली मोड Abbrev है। स्पष्ट रूप से कुछ और नहीं है। – SlowLearner

उत्तर

2

मेरे पास केवल मोड-compile.el v2.29 उपलब्ध है, लेकिन उस संस्करण में समस्या ठीक है जैसा आप वर्णन करते हैं, संकलन कमांड के तर्क ठीक से बच नहीं पाए जाते हैं, और इसे सक्षम करने के लिए कोई विकल्प नहीं है।

यह हैक का एक सा है, लेकिन आप सही अपने .emacs फ़ाइल में इस के साथ फ़ाइल नाम के लिए भागने के साथ प्रासंगिक समारोह को फिर से परिभाषित करने के लिए सक्षम होना चाहिए:

(eval-after-load 'mode-compile 
    '(progn 
    (defun mc--shell-compile (shell dbgflags &optional errors-regexp-alist) 
     ;; Run SHELL with debug flags DBGFLAGS on current-buffer 
     (let* ((shcmd (or (mc--which shell) 
          (error "Compilation abort: command %s not found" shell))) 
      (shfile (or mc--remote-pathname (buffer-file-name) 
          (error "Compilation abort: Buffer %s has no filename" 
           (buffer-name)))) 
      (run-cmd (concat shcmd " " dbgflags " " (shell-quote-argument shfile) " " 
           (setq mc--shell-args 
            (read-string (if mode-compile-expert-p 
                "Argv: " 
                (format "Arguments to %s %s script: " 
                  shfile shell)) 
               mc--shell-args))))) 
     ;; Modify compilation-error-regexp-alist if needed 
     (if errors-regexp-alist 
      (progn 
       ;; Set compilation-error-regexp-alist from compile 
       (or (listp errors-regexp-alist) 
        (error "Compilation abort: In mc--shell-compile errors-regexp-alist not a list.")) 
       ;; Add new regexp alist to compilation-error-regexp-alist 
       (mapcar '(lambda(x) 
         (if (mc--member x compilation-error-regexp-alist) nil 
          (setq compilation-error-regexp-alist 
           (append (list x) 
             compilation-error-regexp-alist)))) 
         errors-regexp-alist))) 
     ;; Run compile with run-cmd 
     (mc--compile run-cmd))))) 

लाइन मैं बदल बदल रहा था

(run-cmd (concat shcmd " " dbgflags " " shfile " " 

(run-cmd (concat shcmd " " dbgflags " " (shell-quote-argument shfile) " " 

एक को और अधिक संपूर्ण सुधार भी होगा dbgflags से बचें (जहां भी वे सेट हैं, बस पूरे चर से बचने के लिए सही नहीं होगा) और mc--shell-args जब वे भी सेट हो जाएं।

+1

+1, लेकिन मैं लेखक को लिखने और स्रोत पर यह तय करने का सुझाव दूंगा। अनुलेख यदि आप अपने elisp कोड को '' स्टैक ओवरफ़्लो के साथ उपसर्ग करते हैं तो सिंटैक्स सही हाइलाइटिंग प्राप्त करेगा। – phils

+0

उपयोगी टिप, धन्यवाद, और वास्तव में, एक पैच अपस्ट्रीम भेजना हमेशा बुद्धिमान होता है। –

संबंधित मुद्दे

 संबंधित मुद्दे