Emacs Windows destek kitaplıklarını kurmanın en kolay yolu


15

Windows için Emacs 24.4'ün ikili dosyalarını kurdum ve Emacs for Windows README'de açıklanan destek kitaplıklarını yüklemek istiyorum . Önceden derlenmiş en son kütüphaneler ezwinports projesinden edinilebilir , ancak bunların yüklenmesi biraz zaman alır. Emacs'ın README'sinde belirtilen tüm kütüphaneleri seçmem , ezwinports README'yi başka önkoşullar için taramam ve zip arşivlerinin her birini indirmem gerekiyor . Sonra onları paketinden çıkarın, kalıcı bir konuma taşıyın ve PATHdeğişkenleri tek tek dizinleri ekleyin . Bu arşivler içinde yinelenen dosyalar var, bu yüzden aynı olduklarını kontrol etmeden hepsini aynı dizine açmaktan çekiniyorum.

Bunu yapmanın otomatik bir yolu var mı?


İkili indirmelerin tüm önkoşulları içerdiğini söyleyebildiğim kadarıyla, benioku dosyasında listelenmiş olsalar bile, bunları ayrı ayrı indirmeye gerek yoktur. Bu yüzden farklı paketlerdeki yinelenen dosyalarınız var.
Alan Üçüncü

Yanıtlar:


10

Emacs 25'ten başlayarak, Emacs Windows indirme dizini artık depsbelirli bir mimari için tüm bağımlılıkları içeren bir paket içeriyor. Örneğin, x86_64 için kullanın emacs-25-x86_64-deps.zip.

Emacs'ı otomatik olarak yüklemek için aşağıdaki komut dosyasını kullanıyorum. WSL veya Cygwin için çalışmalıdır. Yükseklikte çalıştırılmalı Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedve bir noktada PowerShell'de zaten çalıştırılmış olmalıdır .

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

Bu tam otomatik bir çözüm değil, ama oradaki yolun bir parçası. Anlayabildiğim kadarıyla, mevcut destek kütüphaneleri ve önkoşulları:

  • 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

Tüm bunları ezwinports dosya alanından bir hazırlama dizinine indirin. Daha sonra unp komutunu kullanarak bunların her birini kendi dizinlerine açınız. Sonekleri renamekaldırmak için Cygwin'deki komutu kullanın -w32-bin.

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

Eklemek istediğiniz dizinlerin listesini almak için aşağıdakine benzer bir komut kullanın PATH:

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

Daha sonra tüm bunları benzer bir konuma taşıyabilirsiniz C:\Program Files (x86).


2
Destek kitaplıklarının değişmesi muhtemel olduğundan, her şeyi temizlemek veya otomatikleştirmek için fazla zaman harcamak istemiyorum. Unp ve yeniden adlandırma gerçekten gerekli değildir, çünkü unzipbu dosyaları istediğiniz konuma kolayca yerleştirebilirsiniz . Ama onları yanımda buldum, bu yüzden onları kullanmak daha kolaydı.
Michael Hoffman

4

Bunun eski bir soru olduğunu biliyorum, ama eğer birisi bunun üzerine tökezlese : emacsbinw64 veya emacsbin'i deneyin . Gerekli tüm dll'leri içerir ve bağımlılıkları elle çözmek zorunda değilsiniz.


Güncellenmeyi durdurmuş gibi görünüyor.
NetMage
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.