Emacs Windowsサポートライブラリをインストールする最も簡単な方法


15

Emacs 24.4 for Windowsのバイナリをインストールし、Emacs for WindowsのREADMEに記載されているサポートライブラリをインストールしたい。最新のプリコンパイルライブラリはezwinportsプロジェクトから入手できますが、インストールには少し時間がかかります。EmacsのREADMEに記載されているすべてのライブラリを選択し、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 RemoteSignedPowerShellで実行されている必要があります。

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

これらすべてをezwinportsファイル領域からステージングディレクトリにダウンロードします。次に、unpを使用して、これらの各ディレクトリを独自のディレクトリに展開します。renameCygwin のコマンドを使用して、-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これらのファイルを目的の場所に簡単に移動できるため、Unpと名前の変更は実際には必要ありません。しかし、私はそれらを周りに持っていたので、使いやすくなりました。
マイケルホフマン14年

4

私はこれが古い質問であることを知っていますが、誰かがこれに出くわした場合:emacsbinw64またはemacsbinを試してください。必要なすべてのdllが含まれているため、依存関係を手動で解決する必要はありません。


更新が停止したように見えることに注意してください。
NetMage
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.