A maneira mais fácil de instalar as bibliotecas de suporte do Emacs Windows


15

Instalei binários do Emacs 24.4 para Windows e quero instalar as bibliotecas de suporte descritas no README do Emacs para Windows . As bibliotecas pré-compiladas mais recentes estão disponíveis no projeto ezwinports , mas instalá-las consome um pouco de tempo. Preciso selecionar todas as bibliotecas mencionadas no README do Emacs, verificar o README do ezwinports para obter mais pré-requisitos e fazer o download de cada um dos arquivos zip. Em seguida, descompacte-os, mova-os para um local permanente e adicione os diretórios individuais à minha PATHvariável. Existem arquivos duplicados dentro desses arquivos, por isso tenho o cuidado de descompactá-los todos no mesmo diretório sem verificar se eles são idênticos.

Existe uma maneira automatizada de fazer isso?


Tanto quanto eu poderia dizer, os downloads binários contêm todos os pré-requisitos, mesmo que estejam listados no leia-me, você não precisa se preocupar em baixá-los separadamente. É por isso que você tem arquivos duplicados nos diferentes pacotes.
Alan Terceiro de

Respostas:


10

A partir do Emacs 25, o diretório de download do Emacs para Windows agora inclui um depspacote que inclui todas as dependências de uma arquitetura específica. Por exemplo, para x86_64, use emacs-25-x86_64-deps.zip.

Eu uso o seguinte script para instalar automaticamente o Emacs. Deve funcionar para WSL ou Cygwin. Ele deve ser executado em elevação e já foi executado Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedno PowerShell em algum momento.

#!/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

Esta não é uma solução totalmente automatizada, mas faz parte do caminho até lá. Pelo que sei, o conjunto atual de bibliotecas de suporte e seus pré-requisitos são:

  • 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

Faça o download de tudo isso da área de arquivos do ezwinports para um diretório intermediário . Em seguida, use unp para descompactar cada um deles em diretórios próprios. Use o renamecomando no Cygwin para eliminar todos os -w32-binsufixos.

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

Use um comando como o seguinte para obter a lista de diretórios que você precisa adicionar ao seu PATH:

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

Você pode mover tudo isso para um local como C:\Program Files (x86).


2
Como é provável que as bibliotecas de suporte mudem, reluto em gastar muito tempo tentando limpar ou automatizar tudo. Desmarcar e renomear não são realmente necessários, pois você pode simplesmente unzipesses arquivos no local desejado. Mas eu os tinha por perto, então era mais fácil usá-los.
Michael Hoffman

4

Sei que essa é uma pergunta antiga, mas, se alguém se deparar com isso: tente emacsbinw64 ou emacsbin . Eles contêm todas as dlls necessárias e você não precisa resolver dependências manualmente.


Observe que parece ter parado de ser atualizado.
NetMage 19/03/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.