Я думаю, что у меня может быть быстрый и грязный способ открыть определенный файл в архиве из старых (V22) emacs, которые поставляются с OSX.
в действии как GIF
Это не проверено, или оптимально, просто доказательство концепции. Содержимое файла jea_open_specific_file_in_zip.el
:
(defun jea-open-specific-file-in-zip (outer-archive-file-name inner-file-name)
(progn
(find-file outer-archive-file-name)
(while (not (eobp))
(let ((bounds (bounds-of-thing-at-point 'filename)))
(if bounds
(let ((zipped-file-name (buffer-substring-no-properties (car bounds) (cdr bounds))))
(if (string= zipped-file-name inner-file-name)
(archive-extract)))))
(archive-next-line 1))))
Вот грубый захват раковины:
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$ rm ./data/test1.zip
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$ /usr/bin/emacs --version # old emacs that comes with OSX
GNU Emacs 22.1.1
Copyright (C) 2007 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$ ll ./data/*.md # some test data
-rw-r--r-- 1 jamesanderson staff 17B 30 Jul 19:31 ./data/README1.md
-rw-r--r-- 1 jamesanderson staff 17B 30 Jul 19:32 ./data/README2.md
-rw-r--r-- 1 jamesanderson staff 19B 30 Jul 19:32 ./data/README3.md
-rw-r--r-- 1 jamesanderson staff 18B 30 Jul 19:32 ./data/README4.md
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$ cat ./data/*.md
Hello World One!
Hello World Two!
Hello World Three!
Hello World Four!
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$ zip ./data/test1.zip -9 ./data/README1.md ./data/README2.md ./data/README3.md ./data/README4.md
adding: data/README1.md (stored 0%)
adding: data/README2.md (stored 0%)
adding: data/README3.md (stored 0%)
adding: data/README4.md (stored 0%)
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$ ll ./data/
total 40
drwxr-xr-x 7 jamesanderson staff 224B 30 Jul 22:09 .
drwxr-xr-x 5 jamesanderson staff 160B 30 Jul 21:52 ..
-rw-r--r-- 1 jamesanderson staff 17B 30 Jul 19:31 README1.md
-rw-r--r-- 1 jamesanderson staff 17B 30 Jul 19:32 README2.md
-rw-r--r-- 1 jamesanderson staff 19B 30 Jul 19:32 README3.md
-rw-r--r-- 1 jamesanderson staff 18B 30 Jul 19:32 README4.md
-rw-r--r-- 1 jamesanderson staff 725B 30 Jul 22:09 test1.zip
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$
Jamess-MacBook-Pro-3:open_zip_file jamesanderson$ /usr/bin/emacs -Q --load ./jea_open_specific_file_in_zip.el --eval "(jea-open-specific-file-in-zip \"./data/test1.zip\" \"data/README3.md\")"
открытия третьего файла. Он просто загружает код elisp, вставленный выше, из файла jea_open_specific_file_in_zip.el
, а затем передает в функцию имя внешнего zip-файла и имя конкретного внутреннего сжатого файла: (jea-open-specific-file-in-zip "./data/test1.zip" "data/README3.md")
с необходимыми экранированными значениями. Аргумент -Q
- это просто вещь, позволяющая ему не загружать сценарии инициализации (просто чтобы я случайно не использовал локальную для моей машины библиотеку)