2010-07-19 91 views
2

因此,我有一個關於讓字數在emacs LaTeX模式下正確工作的問題(auctex,實際上,但不要緊)。That was answered fine。然後我發現當(buffer-file-name)包含空格時我遇到了麻煩。這使它搞砸了。 This problem was got around too。現在的問題是當沒有空格時解決方案會中斷。在emacs中調用(緩衝區文件名)時跳過空格

所以目前我有兩個Emacs命令:

(defun latex-word-count() 
    (interactive) 
    (shell-command (concat "/usr/local/bin/texcount.pl " 
         "-inc " 
        (shell-quote-argument (concat "'" (buffer-file-name) "'"))))) 

當有包含文件夾的空間工作的。

(defun latex-word-c-nospace() 
    (interactive) 
    (shell-command (concat "/usr/local/bin/texcount.pl " 
      "-inc " 
      (shell-quote-argument (buffer-file-name))))) 

這適用於包含文件夾名稱中沒有空格的情況。 (好,所以縮進是一個有點screwey,但無論如何)

我的問題:有一種方法可以在兩種情況下具有相同的功能? This answer表示問題出在texcount而不是emacs。有沒有辦法做到這一點,而不會弄亂texcount.pl?或者,我最好的辦法是用Chris Johnsen在SU上提出的方式來戳一下texcount.pl?

回答

1

你總是有emacs的確定文件名中有空格的選項:

(defun latex-word-count() 
    (interactive) 
    (let* ((has-space (string-match " " buffer-file-name)) 
     (quoted-name (shell-quote-argument 
         (if has-space 
          (concat "'" buffer-file-name "'") 
         buffer-file-name)))) 
    (shell-command (concat "/usr/local/bin/texcount.pl " 
          "-inc " 
          quoted-name)))) 
+0

這似乎工作。我試着自己輸入命令,試着弄清楚命令在做什麼。我明顯得到括號錯誤或某事,因爲它不斷給我錯誤。但是當我將這段代碼放入我的.emacs中時,它工作正常。謝謝! – Seamus 2010-07-21 12:46:35

5

無論文件名是否有空格,您的第二個例程都應該可以正常工作。例如,我創造了這個小命令:

(defun ls-l() 
    (interactive) 
    (shell-command (concat "ls -l " 
         (shell-quote-argument 
          (buffer-file-name))))) 

它的工作原理,當我調用它,同時編輯一個名爲foo.txt文件和編輯一個名爲foo bar.txt文件時。

+1

是的。在第一個例程中我看不到任何單引號的理由; shell引用參數將完成所有你打算用單引號執行的操作。 – offby1 2010-07-19 17:19:21

+0

但它不適用於texcount(我試過)。請參閱我在原始問題中鏈接的問題,瞭解可能的原因。 (我不明白爲什麼,我目前...) – Seamus 2010-07-19 22:06:37

1

我TeXcount的開發商,只是一小會兒以前碰到這個帖子來了。

正如所指出的那樣,問題在於TeXcount,所以最好的解決方案是修復TeXcount而不是破解其他解決方案。我有TeXcount網頁中,我希望解決問題上可用的更新: http://folk.uio.no/einarro/TeXcount/download.html

注:這是新的網頁的臨時版本,並可能以後如果我決定搬到新地址TeXcount。

問題出現了,因爲爲了允許在Windows下的文件名中使用通配符,我使用了< @files>來獲取所有文件,並且這不像空格。在Linux中,你可以使用不帶glob的@files(< ...>),但我希望TeXcount也可以在Windows上工作,所以更好的解決方案是在將它們傳遞給glob之前先將它們轉義出來。

希望這可以幫助,如果它不請,請聯繫我,我會看看我是否可以幫忙...我不是經常來這裏,所以我可能不會注意到問題,如果張貼爲答覆。

Einar