■ Windows Subsystem for Linux の emacs で利用できる設定


【お知らせ】


<2018/12/06 追記>
clipboard_text からパスを抽出する際、キャリッジリターン(\r)も除去するように対応しました。

【本題】


Windows Subsystem for Linux の emacslient を Windows から利用するための設定です。

1) 以下の設定を行う(前提条件)。これで、find-file コマンドなどで Windows パスや UNC パスを直接利用可能となる。

2) emacs で emacs-server の立上げを行う。これで、WSL 側で emacsclient が利用可能となる。
(require 'server)

(unless (server-running-p)
  (server-start))
※ EDITOR 環境変数の設定をすることにより、git などとも連携が可能となります。
export EDITOR=emacsclient

3) DrvFs ファイルシステム上のフォルダに wslclient.exe を配置する。これで、Windows 側から emacsclient が利用可能となる。

4) Keyhac で以下のような設定を行う(オプション)。この設定により、クリップボードにコピーした Windows パスや UNC パスをワンキーで emacs で開けるようになる。

※ 「<Windows パス>」の部分は書き換えてお使いください。
※ 「Windows の操作を emacs のキーバインドで行うための設定 (Keyhac版)」に取り込んで使うことお勧めします。
# -*- mode: python; coding: utf-8-with-signature-dos -*-
# http://qiita.com/hshimo/items/2f3f7e070ae75243eb8b

from keyhac import *

def configure(keymap):

    keymap_global = keymap.defineWindowKeymap()

    # emacsclient プログラムを起動するキーを指定する
    emacsclient_key = "C-Period"

    # emacsclient プログラムを指定する
    emacsclient_name = r"<Windows パス>\wslclient.exe"

    # emacsclient プログラムの起動
    def emacsclient():
        clipboard_text = getClipboardText()
        if clipboard_text:
            # 引数となるパスに空白が含まれている場合でも上手く動くように、最初にだけ
            # ダブルコーテーションを一つ入れている(上手く動くようになる理由は分からない)
            keymap.ShellExecuteCommand(None, emacsclient_name,
                                       '"' + re.sub("\n|\r", "", clipboard_text.strip()), "")()

    # define_key(keymap_global, emacsclient_key, emacsclient) # fakeymacs に取り込む場合
    keymap_global[emacsclient_key] = emacsclient


<変更履歴>
  • 2018/03/16 このページを作成した。
  • 2018/12/06 clipboard_text からパスを抽出する際、キャリッジリターン(\r)も除去するように対応した。