Найпростіший спосіб встановити бібліотеки підтримки Emacs Windows


15

Я встановив бінарні файли Emacs 24.4 для Windows і хочу встановити бібліотеки підтримки, описані в Emacs для Windows README . Останні заздалегідь складені бібліотеки доступні в проекті ezwinports , але встановлення їх забирає мало часу. Мені потрібно вибрати всі бібліотеки, згадані в README Emacs, відсканувати ezwinports README для будь-яких подальших передумов і завантажити кожен із zip-архівів. Потім розпакуйте їх, перемістіть їх на постійне місце та додайте окремі каталоги до моєї PATHзмінної. У цих архівах є дублікати файлів, тому я насторожено розпаковую їх у один і той же каталог, не перевіряючи, що вони однакові.

Чи є автоматизований спосіб це зробити?


Наскільки я можу сказати, що бінарні завантаження містять усі необхідні реквізити, тому навіть якщо вони перераховані в readme, вам не потрібно займатись завантаженням їх окремо. Ось чому у вас є копії файлів у різних пакетах.
Алан Третій

Відповіді:


10

Починаючи з Emacs 25, каталог завантажень Windows Emacs тепер включає depsпакет, який включає всі залежності для певної архітектури. Наприклад, для x86_64 використовуйте emacs-25-x86_64-deps.zip.

Я використовую наступний сценарій для автоматичного встановлення Emacs. Він повинен працювати для WSL або Cygwin. Він повинен запускатися під висотою і вже Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedв якийсь момент працювати в PowerShell.

#!/usr/bin/env bash

set -o nounset -o pipefail -o errexit

emacs_major=26
emacs_minor=1
emacs_ver="$emacs_major.$emacs_minor"
arch="x86_64"
emacs_url_root="https://ftpmirror.gnu.org/emacs/windows/emacs-$emacs_major"

emacs_deps_zip="emacs-$emacs_major-$arch-deps.zip"
emacs_zip="emacs-$emacs_ver-$arch.zip"

if [[ "$(uname -r)" == *Microsoft ]]; then
    programfiles="$(bin/wslpath "%ProgramFiles%")"
    programfilesx86="$(bin/wslpath "%ProgramFiles(x86)%")"
    allusersprofile="$(bin/wslpath "%AllUsersProfile%")"
    public_desktop="$(bin/wslpath "%Public%\\Desktop")"
    desktop="$(bin/wslpath "%UserProfile%\\Desktop")"
else
    CSIDL_PROGRAM_FILES=38
    CSIDL_PROGRAM_FILESX86=42
    CSIDL_COMMON_APPDATA=35
    CSIDL_COMMON_DESKTOPDIRECTORY=25
    CSIDL_DESKTOP=0

    programfiles="$(cygpath -F "$CSIDL_PROGRAM_FILES")"
    programfilesx86="$(cygpath -F "$CSIDL_PROGRAM_FILESX86")"
    allusersprofile="$(cygpath -F "$CSIDL_COMMON_APPDATA")"
    public_desktop="$(cygpath -F "$CSIDL_COMMON_DESKTOPDIRECTORY")"
    desktop="$(cygpath -F "$CSIDL_DESKTOP")"
fi

emacs_root="$programfiles/Emacs"

old_tmpdir="${TMPDIR:-}"
TMPDIR="$(mktemp -dt install-windows-pkgs.XXXXXXXXXX)"
export TMPDIR

on_exit () {
    rm -rf "$TMPDIR"
}

trap on_exit EXIT

unzip_dest () {
    local zip="$1"
    local dest="$2"

    if [[ ! -d "$dest" ]]; then
        if ! mkdir -p "$dest"; then
            result="$?"
            echo "Can't create '$dest'. Try running under elevation" >&2
            exit "$result"
        fi

        unzip -n "$zip" -d "$dest"
    fi
}

install_emacs_pkg () {
    local zip="$1"
    local dest="$2"

    # XXX: move to tmp
    if [[ ! -d "$dest" ]]; then
        wget --directory-prefix "$TMPDIR" "$emacs_url_root/$zip"
        unzip_dest "$TMPDIR/$zip" "$dest"
    fi
}

on_exit
trap EXIT
TMPDIR="$old_tmpdir"

# XXX: Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
# XXX: sticking cmd.exe /c start before this causes all nature of space-quoting problems
powershell.exe windows\\add_path.ps1 "%ProgramFiles%\\Emacs\\emacs-$emacs_ver\\bin" "%ProgramFiles%\\Emacs\\emacs-$emacs_major-deps\\bin"

# XXX: would be nice to pin runemacs.exe to taskbar, but the need to edit
# that is probably best seen as Emacs bug/flaw

5

Це не повністю автоматизоване рішення, але це частина шляху до нього. Наскільки я можу сказати, поточний набір бібліотек підтримки та їхніх передумов:

  • libpng-1.6.12
  • Каїр-1.12.16
  • gdk-pixbuf-2.30.2
  • giflib-5.1.0
  • гліб-2.38.2
  • грунтовки-3.0.9
  • jpeg-v9a
  • лібкроко-0.6.8
  • libffi-3.0.13
  • librsvg-2.40.1-2
  • libxml2-2.7.8
  • lzo-2.06
  • панго-1,36,1-2
  • піксман-0,32,4
  • tiff-4.0.3
  • зліб-1.2.8-2

Завантажте все це з області файлів ezwinports в каталог постановок. Потім скопіюйте unp, щоб розпакувати кожен із них у власні каталоги. Використовуйте renameкоманду в Cygwin для усунення будь-яких -w32-binсуфіксів.

rename -- -w32-bin "" *-w32-bin

Для отримання списку каталогів, які потрібно додати до своїх, скористайтеся такою командою, як наведена нижче PATH:

command ls -1 | perl -pe 's/^/C:\\Program Files (x86)\\/; s/\n/\\bin;/'

Потім ви можете перемістити все це в подібне місце C:\Program Files (x86).


2
Оскільки бібліотеки підтримки, ймовірно, змінюються, я неохоче витрачаю багато часу, намагаючись очистити або автоматизувати всю справу. Скасувати і перейменувати насправді не потрібно, оскільки ви можете просто передати unzipці файли в потрібне місце. Але я їх мав навколо, тому їх було легше використовувати.
Майкл Гофман

4

Я знаю, що це давнє питання, але якщо хтось натрапляє на це: Спробуйте emacsbinw64 або emacsbin . Вони містять усі необхідні dll, і вам не доведеться вирішувати залежності вручну.


Зверніть увагу, що оновлення перестало оновлюватися.
NetMage
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.