Najprostszym sposobem na zainstalowanie bibliotek obsługi systemu Emacs Windows


15

Zainstalowałem pliki binarne Emacsa 24.4 dla Windows i chcę zainstalować biblioteki obsługi opisane w README Emacsa dla Windows . Najnowsze wstępnie skompilowane biblioteki są dostępne w projekcie ezwinports , ale ich instalacja zajmuje trochę czasu. Muszę wybrać wszystkie biblioteki wymienione w README Emacsa, zeskanować plik README ezwinports pod kątem dalszych wymagań wstępnych i pobrać wszystkie archiwa zip. Następnie rozpakuj je, przenieś do stałej lokalizacji i dodaj poszczególne katalogi do mojej PATHzmiennej. W tych archiwach znajdują się duplikaty plików, więc uważam, aby rozpakować je wszystkie do tego samego katalogu bez sprawdzania, czy są one identyczne.

Czy istnieje zautomatyzowany sposób to zrobić?


O ile mogę stwierdzić, pliki binarne zawierają wszystkie wymagania wstępne, więc nawet jeśli są one wymienione w pliku Readme, nie musisz zawracać sobie głowy ich osobnym pobieraniem. Dlatego masz duplikaty plików w różnych pakietach.
Alan Trzeciego

Odpowiedzi:


10

Począwszy od Emacsa 25, katalog pobierania Emacsa dla systemu Windows zawiera teraz depspakiet, który zawiera wszystkie zależności dla konkretnej architektury. Na przykład dla x86_64 użyj emacs-25-x86_64-deps.zip.

Używam następującego skryptu, aby automatycznie zainstalować Emacsa. Powinien działać dla WSL lub Cygwin. Musi być uruchamiany z elewacją, a już Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedw pewnym momencie miał już działać w 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

To nie jest w pełni zautomatyzowane rozwiązanie, ale jest na tym etapie. O ile mogę stwierdzić, obecny zestaw bibliotek pomocniczych i ich wymagania wstępne to:

  • libpng-1.6.12
  • Cairo-1.12.16
  • gdk-pixbuf-2.30.2
  • giflib-5.1.0
  • glib-2.38.2
  • gnutls-3.0.9
  • jpeg-v9a
  • libcroco-0.6.8
  • libffi-3.0.13
  • librsvg-2.40.1-2
  • libxml2-2.7.8
  • lzo-2.06
  • pango-1.36.1-2
  • pixman-0.32.4
  • tiff-4.0.3
  • zlib-1.2.8-2

Pobierz je wszystkie z obszaru plików ezwinports do katalogu pomostowego. Następnie użyj unp, aby rozpakować każdy z nich do własnych katalogów. Użyj renamepolecenia w Cygwin, aby wyeliminować wszelkie -w32-binprzyrostki.

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

Użyj polecenia takiego jak poniżej, aby uzyskać listę katalogów, które musisz dodać do PATH:

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

Następnie możesz przenieść je wszystkie w takie miejsce C:\Program Files (x86).


2
Ponieważ biblioteki wsparcia prawdopodobnie się zmienią, niechętnie spędzam dużo czasu próbując oczyścić lub zautomatyzować całą sprawę. Rozpakowanie i zmiana nazwy nie są tak naprawdę konieczne, ponieważ możesz po prostu unzipprzenieść te pliki do żądanej lokalizacji. Ale miałem je w pobliżu, więc łatwiej było z nich korzystać.
Michael Hoffman

4

Wiem, że to stare pytanie, ale jeśli ktoś natknie się na to: spróbuj emacsbinw64 lub emacsbin . Zawierają wszystkie wymagane biblioteki dll i nie trzeba ręcznie rozwiązywać zależności.


Zauważ, że wygląda na to, że przestał być aktualizowany.
NetMage
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.