วิธีที่ง่ายที่สุดในการติดตั้งไลบรารีสนับสนุน Emacs Windows


15

ผมติดตั้งไบนารีของ Emacs 24.4 สำหรับ Windows และต้องการติดตั้งห้องสมุดสนับสนุนที่อธิบายไว้ในEmacs สำหรับ Windows README ไลบรารีที่คอมไพล์แล้วล่าสุดมีให้บริการจากโครงการezwinportsแต่การติดตั้งพวกมันใช้เวลาเพียงเล็กน้อย ฉันต้องเลือกไลบรารีทั้งหมดที่กล่าวถึงใน README ของ Emacs สแกนezwinports READMEสำหรับสิ่งที่จำเป็นต้องมีเพิ่มเติมและดาวน์โหลดไฟล์เก็บถาวร zip แต่ละอัน จากนั้นคลายแพ็กเกจย้ายไปยังตำแหน่งถาวรและเพิ่มแต่ละไดเร็กทอรีไปยังPATHตัวแปรของฉัน มีไฟล์ที่ซ้ำกันภายในไฟล์เก็บถาวรเหล่านี้ดังนั้นฉันจึงระมัดระวังในการแตกไฟล์ทั้งหมดในไดเรกทอรีเดียวกันโดยไม่ตรวจสอบว่ามันเหมือนกัน

มีวิธีอัตโนมัติในการทำเช่นนี้หรือไม่?


เท่าที่ฉันสามารถบอกได้ว่าการดาวน์โหลดแบบไบนารีนั้นมีข้อกำหนดเบื้องต้นทั้งหมดดังนั้นแม้ว่าจะอยู่ในรายการใน readme คุณก็ไม่จำเป็นต้องดาวน์โหลดแยกต่างหาก นั่นเป็นสาเหตุที่คุณมีไฟล์ซ้ำในแพ็คเกจที่ต่างกัน
อลันที่สาม

คำตอบ:


10

เริ่มต้นด้วย Emacs 25 ไดเรกทอรีดาวน์โหลด Emacs Windows จะมีdepsแพ็คเกจที่รวมการพึ่งพาทั้งหมดสำหรับสถาปัตยกรรมเฉพาะ ตัวอย่างเช่นสำหรับ x86_64 emacs-25-x86_64-deps.zipใช้

ฉันใช้สคริปต์ต่อไปนี้เพื่อติดตั้ง Emacs โดยอัตโนมัติ ควรใช้กับ WSL หรือ Cygwin มันจะต้องทำงานภายใต้ระดับความสูงและมีการเรียกใช้Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedใน 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

นี่ไม่ใช่โซลูชันอัตโนมัติเต็มรูปแบบ แต่เป็นส่วนหนึ่งของวิธีการดังกล่าว เท่าที่ฉันสามารถบอกได้ชุดการสนับสนุนปัจจุบันและสิ่งที่จำเป็นต้องมีคือ:

  • libpng-1.6.12
  • ไคโร 1.12.16
  • GDK-pixbuf-2.30.2
  • giflib-5.1.0
  • กะล่อน-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

ดาวน์โหลดทั้งหมดเหล่านี้จากพื้นที่ไฟล์ ezwinportsไปยังไดเรกทอรีการจัดเตรียม จากนั้นใช้unpเพื่อแกะแต่ละอันไปยังไดเรกทอรีของตนเอง ใช้renameคำสั่งใน Cygwin เพื่อกำจัด-w32-binส่วนต่อท้าย

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

ใช้คำสั่งดังต่อไปนี้เพื่อรับรายการไดเรกทอรีที่คุณต้องการเพิ่มในPATH:

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

จากนั้นคุณสามารถย้ายสิ่งเหล่านี้ไปยังตำแหน่งที่ต้องการC:\Program Files (x86)ได้


2
เนื่องจากห้องสมุดสนับสนุนมีแนวโน้มที่จะเปลี่ยนแปลงฉันลังเลที่จะใช้เวลามากในการทำความสะอาดหรือทำให้สิ่งต่าง ๆ เป็นไปโดยอัตโนมัติ การยกเลิกและเปลี่ยนชื่อไม่จำเป็นจริงๆเพราะคุณสามารถunzipนำไฟล์เหล่านี้ไปไว้ในตำแหน่งที่ต้องการได้ แต่ฉันมีพวกมันอยู่รอบ ๆ ดังนั้นจึงง่ายต่อการใช้งาน
Michael Hoffman

4

ฉันรู้ว่านี้เป็นคำถามที่เก่า แต่ถ้ามีคนสะดุดนี้: ลองemacsbinw64หรือemacsbin พวกเขามีที่กำลังทั้งหมดและคุณไม่จำเป็นต้องแก้ไขการอ้างอิงด้วยตนเอง


โปรดทราบว่าดูเหมือนว่าจะหยุดการปรับปรุง
NetMage
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.