2010-07-19 67 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