Выход из пробелов в emacs/perl

Следование за этим вопросом, команда хорошо работает, но этому не нравится он, когда родительская папка имеет пробелы на свое имя. Как я заставляю эти пробелы быть автоматически оставленными?

Я не знаю, является ли это вопросом о жемчуге или о emacs, но так как он следует из вопроса о SU, а не ТАК вопрос, я спросил продолжение здесь также.

Скажите файл, я интересуюсь подсчетом слова, /home/seamus/Foo Bar/file.tex Я получил бы следующую ошибку: Файл, не найденный или не читаемый: Файл/home/seamus/Foo, не найденный или не читаемый: Bar/file.tex

[отредактированный для совершения ошибки ближе к фактической ошибке я добрался]

1
задан 20.03.2017, 12:17

3 ответа

Как насчет использования shell-quote-argument (чтобы заключить любому в кавычки возможно броские символы) на результате expand-file-name (для расширения ~, прежде чем это будет заключено в кавычки).

(let ((path "~/Foo Bar/file.tex"))
  (shell-quote-argument (expand-file-name path)))

Если ~ уже не часть строки, прежде чем это доберется до Вас, Вы могли добавить если после использования shell-quote-argument так, чтобы оболочка расширилась ~ для Вас вместо Emacs:

(let ((path-in-home "Foo Bar/file.tex"))
  (concat "~/" (shell-quote-argument path-in-home)))

Ответ на Ваш вопрос, на который ссылаются, показывает использование (buffer-file-name) получить имя файла. В этом случае просто используйте (shell-quote-argument (buffer-file-name)) вместо этого. Не будет a ~ включенный.


По-видимому, Ваши ошибки прибывают из texcount.pl. Это правильно не обрабатывает пробелы в именах файлов, которые это дано. Внутренне, это использует данные имена файлов в качестве шаблонов шарика вместо фактических имен файлов. Оболочки Unix обычно обрабатывают globbing для пользователя, таким образом, программы не часто включают эту функциональность сами. Возможно, этот бит функциональности был для пользователей Windows (где оболочка не разворачивает шаблоны файла).

Так или иначе Вы смогли работать вокруг проблемы путем обертывания кавычек вокруг имени файла:

(defun latex-word-count ()
  (interactive)
  (shell-command (concat "/path/to/texcount.pl "
                         (shell-quote-argument (concat "'" (buffer-file-name) "'")))))

Или Вы могли разорвать globbing функциональность из texcount.pl:

diff --git i/texcount.pl w/texcount.pl
index 96fac5c..aa96eb4 100755
--- i/texcount.pl
+++ w/texcount.pl
@@ -360,7 +360,7 @@ sub parse_options_output {
 sub parse_file_list {
   my @filelist=@_;
   my $listtotalcount=new_count("TOTAL COUNT");
-  for my $file (<@filelist>) {
+  for my $file (@filelist) {
     my $filetotalcount=parse_file($file);
     add_count($listtotalcount,$filetotalcount);
   }

И используйте более разумный код на elisp стороне:

(defun latex-word-count ()
  (interactive)
  (shell-command (concat "/path/to/texcount.pl "
                         (shell-quote-argument (buffer-file-name)))))
1
ответ дан 17.12.2019, 00:39

Необходимо будет выйти из пробелов, таким образом, от примера, Вы записали бы в электронной шепелявости:

"~ / Foo \\Bar/file.text.pl"

и Вы добрались бы:

"~/Foo\Bar/file.text.pl"

0
ответ дан 17.12.2019, 00:39

Я - разработчик TeXcount и столкнулся с этой регистрацией только только что.

Как указан, проблема с TeXcount, таким образом, лучшее решение состоит в том, чтобы зафиксировать TeXcount, а не взломать некоторое другое решение. Я имею обновление в наличии на веб-странице TeXcount, в которой я надеюсь, что проблема решена: http://folk.uio.no/einarro/TeXcount/download.html

NB: Это - временная версия новых веб-страниц и может переместиться позже, если я решаю к новому адресу для TeXcount.

Как был уже объяснен Chris, проблема появилась, потому что для разрешения подстановочных знаков в именах файлов в соответствии с Windows я использовал <@files> для получения всех файлов, и этому не нравились пробелы. В Linux Вы могли просто использовать @files без шарика (<...>), но я хотел бы, чтобы TeXcount работал в Windows также, таким образом, лучшее решение состояло в том, чтобы выйти из пробелов прежде, чем передать их шарику.

Надежда, которой это помогает, и если она не связывается со мной и я буду видеть, могу ли я помочь... Я не постоянный клиент здесь, таким образом, я не мог бы заметить вопросы, если отправлено как ответы.

Поместили этот ответ и в этот поток и в исходный поток: не ment для спама, но для простоты открытия.

Einar

0
ответ дан 17.12.2019, 00:39

Теги

Похожие вопросы