Il modo più semplice per installare le librerie di supporto di Emacs Windows


15

Ho installato i file binari di Emacs 24.4 per Windows e desidero installare le librerie di supporto descritte nel README di Emacs per Windows . Le librerie precompilate più recenti sono disponibili dal progetto ezwinports , ma installarle richiede un po 'di tempo. Devo selezionare tutte le librerie menzionate nel README di Emacs, scansionare il README di ezwinports per ulteriori prerequisiti e scaricare ciascuno degli archivi zip. Quindi decomprimili, spostali in una posizione permanente e aggiungi le singole directory alla mia PATHvariabile. Ci sono file duplicati all'interno di questi archivi, quindi sono diffidente nel decomprimerli tutti nella stessa directory senza verificare che siano identici.

Esiste un modo automatizzato per farlo?


Per quanto ne so, i download binari contengono tutti i prerequisiti, quindi anche se sono elencati nel file Leggimi non è necessario preoccuparsi di scaricarli separatamente. Ecco perché hai file duplicati nei diversi pacchetti.
Alan, terzo

Risposte:


10

A partire da Emacs 25, la directory di download di Emacs per Windows include ora un depspacchetto che include tutte le dipendenze per una particolare architettura. Ad esempio, per x86_64, utilizzare emacs-25-x86_64-deps.zip.

Uso il seguente script per installare automaticamente Emacs. Dovrebbe funzionare per WSL o Cygwin. Deve essere eseguito in elevazione e già Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedin qualche modo in 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

Questa non è una soluzione completamente automatizzata, ma fa parte del percorso. Per quanto ne so, l'attuale set di librerie di supporto e i loro prerequisiti è:

  • 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

Scarica tutti questi dall'area dei file ezwinports in una directory di gestione temporanea . Quindi utilizzare unp per decomprimere ciascuno di questi in directory proprie. Utilizzare il renamecomando in Cygwin per eliminare eventuali -w32-binsuffissi.

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

Utilizzare un comando come il seguente per ottenere l'elenco delle directory che è necessario aggiungere al proprio PATH:

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

È quindi possibile spostare tutti questi in una posizione come C:\Program Files (x86).


2
Poiché è probabile che le librerie di supporto cambino, sono riluttante a dedicare molto tempo a ripulire o automatizzare il tutto. Unp e rinomina non sono davvero necessari, in quanto è possibile semplicemente unzipquesti file nella posizione desiderata. Ma li avevo in giro, quindi era più facile usarli.
Michael Hoffman,

4

So che questa è una vecchia domanda, ma se qualcuno si imbatte in questo: prova emacsbinw64 o emacsbin . Contengono tutte le DLL richieste e non è necessario risolvere manualmente le dipendenze.


Si noti che sembra aver smesso di essere aggiornato.
NetMage
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.