Как я могу открыть длинный список файлов из Emacs - PullRequest
0 голосов
/ 09 января 2019

У меня есть длинный список файлов (полные пути, по одному в отдельной строке в текстовом файле), и я хочу открыть все эти файлы в буферах Emacs, чтобы я мог использовать несколько -in-match-buffers для навигации по этим файлам.

Как мне открыть список файлов в emacs? Перечисленные файлы находятся в произвольных папках и имеют произвольные имена файлов. То есть, нет никакого регулярного шаблона для путей и имен, поэтому я не ищу конкретного регулярного выражения, соответствующего моему примеру ниже.

Я не хочу делать это при вызове командной строки emacs, так как я запускаю emacs для окон, щелкая значок, а также я хочу оставить открытыми другие буферы (файлы), которые я уже открыл.

Я могу создать пользовательскую функцию elisp (жесткое кодирование списка имен файлов в функции) следующим образом (короткий пример).

(defun open-my-files ()
  "Open my files"
  (interactive)
  (find-file "c:/files/file1.txt")
  (find-file "c:/more_files/deeper/log.log")
  (find-file "c:/one_last_note.ini")
)

Я могу поместить это elisp в буфер, затем выбрать все, затем eval-region, а затем выполнить функцию с M-x open-my-files.

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

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Я пришел к следующему решению. Аналогичен ответу, предложенному Джеймсом Андерсоном, но заменяет повторный поиск на «вещь в точке» и некоторые другие изменения, основанные на некоторых других ссылках.

  (defun open-a-bunch-of-files ()
    "Open a a bunch of files, given a text file containing a list of file names"
    (interactive)
    (setq my_filelist (completing-read "my_filelist: " nil nil nil))
    (with-temp-buffer
      (insert-file-contents my_filelist)
      (goto-char (point-min))
      (while (not (eobp))
        (find-file-noselect (replace-regexp-in-string "\n$" "" (thing-at-point 'line t)))
        (forward-line)
      )
    )
  )

Ссылки:

https://emacs.stackexchange.com/questions/19518/is-there-an-idiomatic-way-of-reading-each-line-in-a-buffer-to-process-it-line-by

Захватить текущую строку в буфере как строку в elisp

Как удалить символ новой строки из вывода процесса?

0 голосов
/ 09 января 2019

Это похоже на мою машину:

(defun open-a-bunch-of-files (filelist)
  (with-temp-buffer
    (insert-file-contents filelist)
    (goto-char (point-min))
    (let ((done nil))
      (while (not done)
        (if (re-search-forward "^\\([a-z_A-Z:\/.0-9]+\\)$" nil t nil)
            (find-file-noselect (match-string 1))
          (setf done t))))))

(open-a-bunch-of-files "./filelist.txt")

Возможно, вам понадобится возиться с регулярным выражением (протестировано в файловой системе unix). И его emacs, так что, возможно, есть лучший способ, на который кто-то, возможно, укажет. Загруженные буферы не будут специально установлены в текущий буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...