Cara termudah untuk menginstal perpustakaan dukungan Emacs Windows

15

Saya menginstal binari Emacs 24.4 untuk Windows dan ingin menginstal pustaka dukungan yang dijelaskan dalam Emacs untuk Windows README . Pustaka terkompilasi terbaru tersedia dari proyek ezwinports , tetapi menginstalnya sedikit memakan waktu. Saya harus memilih semua perpustakaan yang disebutkan dalam README Emacs, memindai README ezwinports untuk prasyarat lebih lanjut, dan mengunduh masing-masing dari arsip zip. Kemudian buka kemasannya, pindahkan ke lokasi permanen, dan tambahkan direktori individual ke PATHvariabel saya . Ada file duplikat di dalam arsip ini, jadi saya khawatir membongkar semuanya ke direktori yang sama tanpa memeriksa apakah mereka identik.

Apakah ada cara otomatis untuk melakukan ini?

Michael Hoffman
sumber
Sejauh yang saya tahu bahwa unduhan biner berisi semua prasyarat sehingga meskipun mereka terdaftar di readme Anda tidak perlu repot-repot mengunduhnya secara terpisah. Itu sebabnya Anda memiliki file duplikat dalam paket yang berbeda.
Alan Ketiga

Jawaban:

10

Dimulai dengan Emacs 25, direktori unduhan Emacs Windows sekarang termasuk depspaket yang mencakup semua dependensi untuk arsitektur tertentu. Misalnya, untuk x86_64, gunakan emacs-25-x86_64-deps.zip.

Saya menggunakan skrip berikut untuk menginstal Emacs secara otomatis. Itu harus bekerja untuk WSL atau Cygwin. Itu harus dijalankan di bawah ketinggian dan sudah berjalan Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigneddi PowerShell di beberapa titik.

#!/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
Michael Hoffman
sumber
5

Ini bukan solusi yang sepenuhnya otomatis, tapi itu bagian dari perjalanan ke sana. Sejauh yang saya tahu, kumpulan perpustakaan pendukung saat ini dan prasyaratnya adalah:

  • 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

Unduh semua ini dari area file ezwinports ke direktori pementasan. Kemudian gunakan unp untuk membongkar masing-masing ke direktori mereka sendiri. Gunakan renameperintah di Cygwin untuk menghilangkan -w32-binsufiks.

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

Gunakan perintah seperti berikut untuk mendapatkan daftar direktori yang perlu Anda tambahkan ke PATH:

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

Anda kemudian dapat memindahkan semua ini ke lokasi seperti C:\Program Files (x86).

Michael Hoffman
sumber
2
Karena perpustakaan pendukung cenderung berubah, saya enggan menghabiskan banyak waktu untuk membersihkan atau mengotomatisasi semuanya. Batalkan dan ganti nama tidak benar-benar diperlukan, karena Anda dapat dengan mudah unzipmemasukkan file-file ini ke lokasi yang diinginkan. Tapi saya punya mereka di sekitar sehingga lebih mudah untuk menggunakannya.
Michael Hoffman
4

Saya tahu ini adalah pertanyaan lama, tetapi karena jika seseorang menemukan ini: Coba emacsbinw64 atau emacsbin . Mereka mengandung semua dll yang diperlukan dan Anda tidak harus menyelesaikan dependensi secara manual.

itmuckel
sumber
Catatan yang tampaknya telah berhenti diperbarui.
NetMage