Cách dễ nhất để cài đặt thư viện hỗ trợ Emacs Windows


15

Tôi đã cài đặt nhị phân của Emacs 24.4 cho Windows và muốn cài đặt các thư viện hỗ trợ được mô tả trong Emacs cho Windows README . Các thư viện tiền biên dịch mới nhất có sẵn từ dự án ezwinports , nhưng việc cài đặt chúng hơi tốn thời gian. Tôi phải chọn tất cả các thư viện được đề cập trong README của Emacs, quét ezwinports README để biết thêm các điều kiện tiên quyết và tải xuống từng kho lưu trữ zip. Sau đó giải nén chúng, di chuyển chúng đến một vị trí cố định và thêm các thư mục riêng lẻ vào PATHbiến của tôi . Có các tệp trùng lặp trong các tài liệu lưu trữ này, vì vậy tôi cảnh giác về việc giải nén tất cả chúng vào cùng một thư mục mà không kiểm tra xem chúng có giống nhau không.

Có một cách tự động để làm điều này?


Theo như tôi có thể nói rằng các bản tải xuống nhị phân chứa tất cả các điều kiện tiên quyết vì vậy mặc dù chúng được liệt kê trong phần đọc mà bạn không cần phải tải xuống riêng. Đó là lý do tại sao bạn có các tệp trùng lặp trong các gói khác nhau.
Alan Thứ ba

Câu trả lời:


10

Bắt đầu với Emacs 25, thư mục tải xuống Emacs Windows hiện bao gồm một depsgói bao gồm tất cả các phụ thuộc cho một kiến ​​trúc cụ thể. Ví dụ: đối với x86_64, hãy sử dụng emacs-25-x86_64-deps.zip.

Tôi sử dụng đoạn script sau để tự động cài đặt Emacs. Nó nên hoạt động cho WSL hoặc Cygwin. Nó phải được chạy dưới độ cao và đã chạy Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedtrong PowerShell tại một số điểm.

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

Đây không phải là một giải pháp hoàn toàn tự động, nhưng nó là một phần của cách đó. Theo như tôi có thể nói, bộ thư viện hỗ trợ hiện tại và điều kiện tiên quyết của chúng là:

  • libpng-1.6.12
  • cairo-1.12.16
  • gdk-pixbuf-2.30.2
  • giflib-5.1.0
  • glib-2.38.2
  • quả hạch-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ải xuống tất cả những thứ này từ khu vực tập tin ezwinports vào một thư mục dàn. Sau đó sử dụng unp để giải nén từng cái này vào các thư mục của riêng chúng. Sử dụng renamelệnh trong Cygwin để loại bỏ bất kỳ -w32-binhậu tố.

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

Sử dụng một lệnh như sau để lấy danh sách các thư mục bạn cần thêm vào PATH:

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

Sau đó, bạn có thể di chuyển tất cả những thứ này đến một vị trí như thế nào C:\Program Files (x86).


2
Vì các thư viện hỗ trợ có khả năng thay đổi, tôi miễn cưỡng dành nhiều thời gian để cố gắng dọn dẹp hoặc tự động hóa toàn bộ. Unp và đổi tên không thực sự cần thiết, vì bạn có thể chỉ cần unzipcác tệp này vào vị trí mong muốn. Nhưng tôi đã có chúng xung quanh để sử dụng chúng dễ dàng hơn.
Michael Hoffman

4

Tôi biết đây là một câu hỏi cũ, nhưng nếu ai đó vấp phải điều này: Hãy thử emacsbinw64 hoặc emacsbin . Chúng chứa tất cả các dll cần thiết và bạn không phải giải quyết các phụ thuộc theo cách thủ công.


Lưu ý rằng dường như đã ngừng được cập nhật.
NetMage
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.