Thoát khỏi không gian trong emacs / perl


1

Tiếp theo câu hỏi này , lệnh hoạt động tốt, nhưng nó không thích khi thư mục mẹ có khoảng trắng trong tên của nó. Làm thế nào để tôi có được những không gian này được tự động thoát?

Tôi không biết liệu đây là câu hỏi về perl hay về emacs, nhưng vì nó xuất phát từ câu hỏi SU chứ không phải câu hỏi SO, tôi cũng đã hỏi theo dõi ở đây.

Nói rằng tập tin tôi quan tâm đến việc đếm từ là /home/seamus/Foo Bar/file.textôi gặp phải lỗi sau: Không tìm thấy hoặc không đọc được tệp: / home / seamus / Foo Không tìm thấy hoặc không đọc được tệp: Bar / file.tex

[chỉnh sửa để làm cho lỗi gần hơn với lỗi thực tế tôi gặp phải]

Câu trả lời:


1

Làm thế nào về việc sử dụng shell-quote-argument(để trích dẫn bất kỳ ký tự có thể vui nhộn) trên kết quả của expand-file-name(để mở rộng ~, trước khi nó được trích dẫn).

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

Nếu ~nó chưa phải là một phần của chuỗi trước khi nó đến với bạn, bạn có thể thêm nếu sau khi sử dụng shell-quote-argumentđể shell sẽ mở rộng ~cho bạn thay vì Emacs:

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

Câu trả lời cho câu hỏi được tham chiếu của bạn hiển thị bằng cách sử dụng (buffer-file-name)để lấy tên tệp. Trong trường hợp đó, chỉ cần sử dụng (shell-quote-argument (buffer-file-name))thay thế. Sẽ không có sự ~tham gia.


Rõ ràng lỗi của bạn đến từ texcount.pl. Nó không xử lý đúng các khoảng trắng trong tên tệp được đưa ra. Trong nội bộ, nó đang sử dụng tên tệp đã cho làm mẫu hình cầu thay vì tên tệp thực tế. Các shell Unix thường xử lý toàn cầu cho người dùng, vì vậy các chương trình thường không bao gồm chức năng này. Có thể bit chức năng này là dành cho người dùng Windows (nơi shell không mở rộng các mẫu tệp).

Dù sao, bạn có thể giải quyết vấn đề bằng cách gói các trích dẫn xung quanh tên tệp của bạn:

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

Hoặc bạn có thể tách chức năng globalbing ra khỏi 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);
   }

Và sử dụng mã hợp lý hơn ở phía elisp:

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

Cảm ơn, tôi đoán câu trả lời này đang đi đúng hướng, nhưng tôi vẫn nhận được lỗi tương tự. Lỗi không bao gồm a ~, nhưng có toàn bộ đường dẫn được viết ra. Tôi đã quên điều này khi viết câu hỏi ban đầu của mình ...
Seamus

Nó hoạt động cho tôi khi tôi lấy latex-word-countvà thay thế (buffer-file-name)bằng (shell-quote-argument (buffer-file-name)). Có lẽ bạn nên đăng mã chính xác mà bạn đang sử dụng.
Chris Johnsen

Giả sử bạn sử dụng shell-quote-argument, phần Emacs hoạt động tốt. Đó là texcount.plkịch bản bị phá vỡ liên quan đến tên tập tin có không gian trong đó.
Chris Johnsen

Cảm ơn! Tôi đã đi tìm giải pháp trích dẫn concat, vì bây giờ tôi không muốn chơi xung quanh với texcount.pl ...
Seamus

Xem câu hỏi này để theo dõi ở trên. stackoverflow.com/questions/3281539/ Mạnh
Seamus 22/07

0

Bạn sẽ cần phải thoát khỏi khoảng trắng, vì vậy, từ ví dụ của bạn, bạn sẽ viết bằng e-lisp:

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

và bạn sẽ nhận được:

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


Tôi hiểu điều này, vấn đề là tôi nhận được tên tệp từ bộ đệm emacs hoặc một số thứ như vậy, vì vậy tôi không thể tự nhập các ký tự thoát
Seamus

0

Tôi là nhà phát triển của TeXcount và tình cờ thấy bài đăng này chỉ một lúc trước.

Như đã chỉ ra, vấn đề là ở TeXcount, vì vậy giải pháp tốt nhất là khắc phục TeXcount thay vì hack một số giải pháp khác. Tôi có một bản cập nhật có sẵn trên trang web TeXcount, trong đó tôi hy vọng vấn đề đã được giải quyết: http://folk.uio.no/einarro/TeXcount/doad.html

Lưu ý: Đây là phiên bản tạm thời của các trang web mới và có thể chuyển sang sau nếu tôi quyết định địa chỉ mới cho TeXcount.

Như Chris đã giải thích, vấn đề đã xảy ra bởi vì, để cho phép các ký tự đại diện trong tên tệp trong Windows, tôi đã sử dụng <@files> để lấy tất cả các tệp và điều này không giống như khoảng trắng. Trong Linux, bạn chỉ có thể sử dụng @files mà không cần toàn cầu (<...>), nhưng tôi cũng muốn TeXcount hoạt động trong Windows, vì vậy một giải pháp tốt hơn là thoát khỏi không gian trước khi chuyển chúng sang toàn cầu.

Hy vọng điều này sẽ giúp ích, và nếu nó không vui lòng liên hệ với tôi và tôi sẽ xem liệu tôi có thể giúp gì không ... Tôi không phải là người thường xuyên ở đây, vì vậy tôi có thể không nhận thấy câu hỏi nếu được đăng dưới dạng trả lời.

Đã đặt câu trả lời này cả trong chủ đề này và trong chủ đề ban đầu: không đề cập đến thư rác, nhưng để dễ tìm kiếm.

Einar

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.