нужен zip-режим org, как это сделать? - PullRequest
5 голосов
/ 24 декабря 2011

У меня есть документ в режиме org, который я хочу преобразовать в открытый формат документа.Когда я пытаюсь сделать это (ctrl + c + e + o), я получаю сообщение об ошибке:

Исполняемый «zip», необходимый для создания файлов OpenDocument.Отмена.

На моей машине установлен p7zip, но я не знаю, как сказать emacs, что он там есть.Я не уверен, какой режим org хочет сделать, поэтому я не уверен, что настроить в .emacs.

Спасибо

Ответы [ 3 ]

6 голосов
/ 24 декабря 2011

Ваш исполняемый файл p7zip должен быть в переменной Emacs exec-path, чтобы Emacs мог его найти.

Кроме того, исполняемый файл должен называться zip, поскольку он жестко задан в функции org-odt-init-outfile.

Поэтому сначала проверьте настройку exec-path, чтобы убедиться, что она включает в себя местоположение вашего исполняемого файла zip.

`M-x customize-variable RET exec-path RET`
0 голосов
/ 27 августа 2018

Не нужны p7zip или info-zip внешние программы, Emacs deps поставляется с программой zip: minizip.(для получения дополнительной информации см. Самый простой способ установить библиотеки поддержки Emacs для Windows )

Некоторые ситуации, о которых нам нужно знать:

  1. minizip неподдержка рекурсивного zip
  2. zip была жестко задана в опциях ox-odt.el
  3. minizip, несовместимых с `zip '

ТакЯ сгенерировал zip.bat пакет в elisp, затем добавил путь от zip.bat до %PATH% (для экспорта org в odt) и exec-path (для zip-файлов, dired-do-compress-to)

zip.bat:

@echo off
REM zip.bat for minizip on Windows
REM generated by More Reasonable Emacs https://github.com/junjiemars/.emacs.d

setlocal EnableDelayedExpansion

set _OPT=%*
set _ZIP=
set _ARGV=

REM parsing command line arguments

:getopt
if "%1"=="-mX0" set _OPT=%_OPT:-mX0=-0% & shift & goto :getopt

REM ignore options
if "%1"=="-r" set _OPT=%_OPT:-r=% & shift & goto :getopt
if "%1"=="--filesync" set _OPT=%_OPT:--filesync=% & shift & goto :getopt
if "%1"=="-rmTq" set _OPT=%_OPT:-rmTq=% & shift & goto :getopt

REM extract zip and argv
if not "%1"=="" (
  if "%_ZIP%"=="" (
    if "%_ARGV%"=="" (
      set _ZIP=%1
    )
  ) else (
    set _ARGV=%_ARGV% %1
  )
  set _OPT=!_OPT:%1=!
  shift
  goto :getopt
)

REM minizip recursive call

call :loop %_ARGV%
goto :end

:zip
set _file=%1
set _file=%_file:./=%
if not "%_file%"=="%_ZIP%" (
  if exist %_ZIP% (
    minizip %_OPT% -a %_ZIP% %_file%
  ) else (
    minizip %_OPT% %_ZIP% %_file%
  )
)
goto :end

:loop
for %%i in (%*) do (
  if exist "%%i/*" (
    for %%f in (%%i/*) do (
      call :loop %%i/%%f
    )
    for /d %%d in (%%i/*) do (
      call :loop %%i/%%d
    )
  ) else (
    call :zip %%i
  )
)

:end

Функция make-zip-bat, которая генерирует zip.bat:

(defun make-zip-bat (zip &rest ignore)
  "Make ZIP.bat in `exec-path' for minizip or 7za."
  (declare (indent 1))
  (when (stringp zip)
    (save-str-to-file
     (concat "@echo off\n"
                     (format "REM zip.bat for %s on Windows\n" zip)
                     "REM generated by More Reasonable Emacs https://github.com/junjiemars/.emacs.d\n\n"
                     (concat "REM local variable declaration\n\n"
                                     "setlocal EnableDelayedExpansion\n"
                                     "\n"
                                     "set _OPT=%*\n"
                                     "set _ZIP=\n"
                                     "set _ARGV=\n"
                                     "\n"
                                     "REM parsing command line arguments\n\n"
                                     ":getopt\n"
                                     (cond ((string= "minizip" zip)
                                                    "if \"%1\"==\"-mX0\" set _OPT=%_OPT:-mX0=-0% & shift & goto :getopt\n")
                                                 ((string= "7za" zip)
                                                    (concat
                                                     "if \"%1\"==\"-mX0\" set _OPT=%_OPT:-mX0=-mx0% & shift & goto :getopt\n"
                                                     "if \"%1\"==\"-0\" set _OPT=%_OPT:-0=-mx0% & shift & goto :getopt\n"
                                                     "if \"%1\"==\"-9\" set _OPT=%_OPT:-9=-mx9% & shift & goto :getopt\n")))
                                     "\n"
                                     "REM ignore options\n"
                                     (let ((options nil))
                                         (dolist (x (cond ((string= "minizip" zip)
                                                                             (append '("-r" "--filesync" "-rmTq") ignore))
                                                                            ((string= "7za" zip)
                                                                             (append '("-r" "--filesync" "-rmTq"))))
                                                                options)
                                             (setq options
                                                         (concat options
                                                                         (format "if \"%%1\"==\"%s\" set _OPT=%%_OPT:%s=%% & shift & goto :getopt\n" x x)))))
                                     "\n"
                                     "REM extract zip and argv\n"
                                     "if not \"%1\"==\"\" (\n"
                                     "  if \"%_ZIP%\"==\"\" (\n"
                                     "    if \"%_ARGV%\"==\"\" (\n"
                                     "      set _ZIP=%1\n"
                                     "    )\n"
                                     "  ) else (\n"
                                     "    set _ARGV=%_ARGV% %1\n"
                                     "  )\n"
                                     "  set _OPT=!_OPT:%1=!\n"
                                     "  shift\n"
                                     "  goto :getopt\n"
                                     ")\n\n")
                     (cond ((string= "7za" zip)
                                    (concat "REM 7za call\n"
                                                    "7za a %_OPT% -tzip -- %_ZIP% %_ARGV%\n"
                                                    "if exist %_ZIP% (\n"
                                                    "  7za d %_OPT% -tzip -- %_ZIP% %_ZIP%\n"
                                                    ")\n"))
                                 ((string= "minizip" zip)
                                    (concat "REM minizip recursive call\n\n"
                                                    "call :loop %_ARGV%\n"
                                                    "goto :end\n"
                                                    "\n:zip\n"
                                                    "set _file=%1\n"
                                                    "set _file=%_file:./=%\n"
                                                    "if not \"%_file%\"==\"%_ZIP%\" (\n"
                                                    "  if exist %_ZIP% (\n"
                                                    "    minizip %_OPT% -a %_ZIP% %_file%\n"
                                                    "  ) else (\n"
                                                    "    minizip %_OPT% %_ZIP% %_file%\n"
                                                    "  )\n"
                                                    ")\n"
                                                    "goto :end\n"
                                                    "\n:loop\n"
                                                    "for %%i in (%*) do (\n"
                                                    "  if exist \"%%i/*\" (\n"
                                                    "    for %%f in (%%i/*) do (\n"
                                                    "      call :loop %%i/%%f\n"
                                                    "    )\n"
                                                    "    for /d %%d in (%%i/*) do (\n"
                                                    "      call :loop %%i/%%d\n"
                                                    "    )\n"
                                                    "  ) else (\n"
                                                    "    call :zip %%i\n"
                                                    "  )\n"
                                                    ")\n"
                                                    "\n:end\n"))))
     (v-home% ".exec/zip.bat"))))

Простой способ дать zip работам - это скопировать содержимое zip.batв файл с именем zip.bat и поместите этот файл в exec-path.Чтобы увидеть больше Больше Разумных Emacs: zip-программа , make-zip-bat Поддержка 7-Zip тоже.

0 голосов
/ 25 декабря 2011

Вам нужен Info-ZIP. Смотри http://lists.gnu.org/archive/html/emacs-orgmode/2011-07/msg00485.html

p7zip может быть несовместим с утилитой командной строки zip, если я перейду к этому сообщению: http://sourceforge.net/projects/sevenzip/forums/forum/45797/topic/1521207?message=3786349. Так что, я думаю, p7zip, возможно, здесь не подходит.

...