約 1,227,170 件
https://w.atwiki.jp/ntemacs/
【お知らせ】 ● 本サイトは NTEmacs の情報サイトなのですが、私が WSL版 Emacs に乗り換えたため、そちらに関連する情報が多くなってきています。WSL版 Emacs も Windows 上で動作する Emacs ですので、本サイトの目的とは合致していると思っています。 ● WSL版 Emacs に行き着くまで、Linux版 Emacs、MinGW版 Emacs、Cygwin版 Emacs といろいろ使ってきましたが、今のところ Windows で Emacs を使うには WSL Emacs on VcXsrv がベストな選択だと思っています。WSL コマンド(https //github.com/smzht/wsl-utils)や Windows コマンド(https //github.com/smzht/win-utils)の作成、Google日本語入力 と連携可能な mozc_emacs_helper.exe のビルドの成功(https //github.com/smzht/mozc_emacs_helper)、さらには以降で紹介している Emacs の設定の整備により、WSL 上で Emacs を使う場合の不便な点は概ね解消されていると思います。 ■ Windows 10 2004 がリリースされましたので、WSL から WSL2 に移行しました。多少の調整は必要でしたが、WSL の環境をほぼそのまま WSL2 で実現できました。調整が必要だった箇所は、「WSL で Emacs を使うための設定 」の 【お知らせ】 に記載しています。 ■ X Window Server は VcXsrv から GWSL に乗り換えました。GWSL も 内部で VcXsrv を利用しており、VcXsrv と同等に利用可能です。Microsoft 謹製の WSLg も Windows 11 では利用可能となっていますが、Windows の操作方法が独自になるなどの理由から、GWSL の方を利用しています。 【トピック】 ★ NTEmacs の設定とは関係ありませんが、Windows の操作を Emacs のキーバインドで行うための設定 を公開しています。OS まるごと Emacsキーバインドで操作することができ快適です。お試しください! Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) update! (2022/06/23) ★日本語キーボードを英語キーボード配列で使おうとした際に調べた情報 をまとめています。Keyhac + Fakeymacs で実現する設定のリンクも載せています。お試しください! 英語キーボード設定の OS で日本語キーボードを使うときの情報まとめ update! (2021/09/10) ★ WSL で Emacs を使うための設定 をまとめました。WSL Emacs は Windows との相性がとても良く、Linux、Windows 双方にアクセスするためのユーザインタフェースとしての利用にとても便利です。お試しください! WSL で Emacs を使うための設定 update! (2022/10/14) ● WSL の emacsclient を Windows から利用するための設定 をまとめました。WSL Emacs を Windows で起動するためのコマンドも紹介しています。お試しください。 WSL の emacsclient を Windows から利用するための設定 update! (2021/02/05) ● VSCode で開いているファイルを WSL の Emacs で開くための設定 をまとめました。Remote-WSL を設定した VSCode でも利用可能です。お試しください。 VSCode で開いているファイルを WSL の Emacs で開くための設定 update! (2019/11/06) ● WSL の Emacs から VSCode でファイルを開くための設定 をまとめました。VSCode の Remote Development にも対応しています。お試しください。 WSL の Emacs から VSCode でファイルを開くための設定 update! (2019/10/31) ● helm で peco もどきのコマンドを使うための設定 をまとめした。peco が使えない shell-mode で利用できます。お試しください。 helm で peco もどきのコマンドを使うための設定 update! (2019/04/16) ● google-translate を使いやすくするための設定 をまとめました。翻訳する文章が日本語か英語かを判別し、他方に翻訳する機能をサポートしています。お試しください。 google-translate を使いやすくするための設定 update! (2019/12/30) ● WSL から Windows の exe コマンドを管理者権限で実行するコマンド winsudo を公開しました。UAC が有効な場合、ポップアップによる確認後に管理者権限でコマンドが実行されます。お試しください。 https //github.com/smzht/wsl-utils#-winsudo ● WSL のシェルから Cygwin のコマンドを実行するためのコマンド cyg を公開しました。Cygwin から WSL へ移行する際の過渡期に利用するツールとして使えるかと思います。お試しください。 https //github.com/smzht/wsl-utils#-cyg ● Emacs の日本語マニュアル を公開されている方がいらっしゃいます。大作です。紹介させていただきます。 https //ayatakesi.github.io/ ● Lisp と JavaScript は似ているのですね。興味深い。確かに、JavaScript の旧名は、LI ve S cri P t ですね。 https //www.slideshare.net/taiju/javascriptlisp https //qiita.com/derui/items/6e8de68cc1b7295de3a6 【本題】 このウィキでは、Windows で GNU Emacs を 快適に利用するための設定についてまとめています。完全ではありませんが、以下の環境で動作確認しています。 Windows 11 + GWSL + WSL2 + Ubuntu-20.04 + Emacs-27 + emacs-mozc(Google日本語入力 と連携)(Linux版 Emacs) Windows 11 + WSLg + WSL2 + Ubuntu-20.04 + Emacs-26 + emacs-mozc(Google日本語入力 と連携)(Linux版 Emacs) Windows 10 ver 2004 + VcXsrv + WSL2 + Ubuntu-20.04 + Emacs-26 + emacs-mozc(Google日本語入力 と連携)(Linux版 Emacs) Windows 10 ver 1909 + VcXsrv + WSL + Ubuntu-18.04 + Emacs-25 + emacs-mozc(Google日本語入力 と連携)(Linux版 Emacs) ※ 現在のメイン環境です。「WSL で Emacs を使うための設定」で設定方法を紹介しています。 ※ この環境の特徴は、以下のとおりです。 ・MinGW版 Emacs と異なり、設定でのいろいろな workaround(fakecygpty の設定や UTF-8 を使うための設定など)が不要です。 ・Cygwin版 Emacs と異なり、MinGW版 Emacs 並に高速に動作します。 ・Google日本語入力 との連携を可能とした mozc_emacs_helper.exe の導入で、日本語入力にも対応しています。 ・Cygwin版 Emacs で度々発生する vfork 問題が一切起こりません。 ・Linux の OS 環境をフルに利用可能です。(MinGW版 Emacs の様に別途 UNIX 環境を準備する必要がありません。) ・設定により、dired から Windows のドキュメントを直接開くことができます。(wslstart という cygstart と同機能のコマンドの作成により実現しています。) ・設定により、dired で Windows のショートカットをシンボリックリンクの様に扱えます。(w32-symlinks.el から最低限必要な設定を流用することで実現しています。) ・設定により、Windows パスや UNC パスを Linux のパスと同様に利用できます。(Emacs の Magic File Names の仕組みを利用して実現しています。) ・ViirtualBox で Linux を動作させた環境と異なり、Keyhac との連携(ウィンドウの切り替えなど)が可能です。 ・一つデメリットを挙げれば、画面へのファイルのドラッグ&ドロップができないことです。これは、「dired を OS と連携して使うための設定」で代替になると思います。 Windows 10 + gnupack-13.06(Cygwin は最新に更新)+ emacs-mozc(Google日本語入力 と連携)(Cygwin版 Emacs) Windows 10 + gnupack-13.06(Cygwin は最新に更新)+ Cygwin の emacs-w32 での差替え + emacs-mozc(Google日本語入力 と連携)(Cygwin版 Emacs) ※ WSL に移行する前まで使っていた環境です。 ※ 比較的新しいバージョンが提供される Cygwin の Emacs を利用する方法は、「gnupack-13 の環境で Cygwin の Emacs を利用するための設定」を参考としてください。 ※ この環境の特徴は、以下のとおりです。(以前までお勧めしていたので、まとめています。) ・MinGW版 よりちょっと(かなり?)遅めですが、設定でのいろいろな workaround が不要です。 ・Cygwin 側で作成した Windows ショートカット(CYGWIN環境変数 が winsymlinks lnk に設定された状態で ln -s コマンドで作成したリンク)が、シンボリックリンクとして認識されるのが便利です。 ・Google日本語入力 との連携を可能とした mozc_emacs_helper.exe の導入で、日本語入力も安定して動作します。 ・何らかのタイミングで vfork関連のエラーが発生することがあります。これを解決するのが厄介で、Cygwin版 Emacs を使う上での大きなデメリットとなっています。(この症状が発生した場合、Cygwin に対して rebaseall を行った後、OS の再起動をすると改善するような気がします。Cygwin の更新をすると rebase が掛かるので、その後 OS の再起動をすると良いと思います。) Windows 10 + gnupack-11.00(Cygwin は最新に更新)+ NTEmacs64 での差替え (MinGW版 Emacs) Windows 10 + gnupack-11.00(Cygwin は最新に更新)+ GNU配布版 Emacs での差替え + emacs-mozc(Google日本語入力 と連携)(MinGW版 Emacs) ※ 最新の MinGW版 Emacs を利用する方法は、「gnupack-11.00 の環境で NTEmacs64 を利用するための設定」を参考としてください。 ※ Windows のパスがそのまま利用できるなど、Windows との親和性は高いです。但し、問題なく使うためのハードルも高い(本質的ではない、設定でのいろいろな workaround が必要)です。 VirtualBox + Ubuntu-18.04 + Emacs-25 or 26 + emacs-mozc(mozc-server と連携)(Linux版 Emacs) Hyper-V + Ubuntu-18.04 + Emacs-25 or 26 + emacs-mozc(mozc-server と連携)(Linux版 Emacs) ※ 仮想環境で動かしているのに、非常に高速に動作します。Windows 環境との連携が重要でなければ、この環境が一番お勧めなのかもしれません。 ※ 本ページで紹介する設定は、Emacs バージョン 24.4 以上で利用可能な設定となっています。 ※ MinGW版 Emacs を利用する場合、Cygwin の導入、cygdriveプレフィクス の / 設定、cygwin-mount.el のインストールが前提となっている設定箇所があります。 ※ Cygwin版 Emacs 、MinGW版 Emacs を利用する場合、以下の「【基本設定】」が行われていることが前提となっている設定箇所が多数あります。本ページの設定を利用する場合には、「【基本設定】」の利用を強くお勧めします。 ※ フォントを滑らかに表示させるためには、次の方法をお試しください。 http //121ware.com/qasearch/1007/app/servlet/relatedqa?QID=013964 ■ Cygwin版 Emacs 特有の設定 【基本設定】 Windowsパス と UNCパス を使えるようにするための設定 【推奨設定】 dired でディレクトリのシンボリックリンクを実体のパスで開くための設定 ※ 後半に Cygwin版 Emacs 特有の設定があります。 gnupack-13 の環境で Cygwin の Emacs を利用するための設定 (関連) Cygwin で sudo 的コマンドを使うための設定 Cygwin で sudoedit を使うための設定 singleton な動きをする cygstart 的コマンドを使うための設定 (Cygwin版) gnupack-13.xx の背景色やフォントを gnupack-11.00 の時代のものと同じにするためのパッチ ■ MinGW版 Emacs 特有の設定 【基本設定】 UTF-8 をベースとして利用するための設定 【基本設定】 fakecygpty を使うための設定 tramp を tramp-method “scp” で使うための設定 ※ 後半に MinGW版 Emacs 特有の設定があります。 emacsclientw を使うための設定 Cygwin の Python を使って run-python を動かすための設定 gnupack-11.00 の環境で NTEmacs64 を利用するための設定 ※ MinGW版 Emacs であれば NTEmacs64 以外にも適用可能です。 ■ Windows版 Emacs 共通の設定 (上記の「【基本設定】」が前提となっている設定があります) W32-IME を快適に使うための設定 emacs-mozc を動かすための設定(mozc_emacs_helper コンパイル編) emacs-mozc を動かすための設定(サーバ準備編) emacs-mozc を動かすための設定(Emacs 設定編) ※ 一部の設定を除き、Linux版 Emacs にも適用可能です。 locate を使うための設定 Notepad を使って印刷するための設定 emacs-eclim を使うための設定 Emacs で指定したファイルを Eclipse で開くための設定 Windows ショートカットを dired と連携して使うための設定 ← お薦めはこちら w32-symlinks を dired と連携して使うための設定 ■ Linux の Emacs で利用できる設定 リモートマシン上の Emacs から、ローカルマシンの Windowsアプリケーションソフトを起動するための設定 VirtualBox 上の Ubuntu から WSL を経由して Windows 環境にアクセスするための設定 ■ Windows Subsystem for Linux の Emacs で利用できる設定 【推奨設定】 WSL で Emacs を使うための設定 emacs-mozc を動かすための設定(WSL 設定編) Windowsパス と UNCパス を使えるようにするための設定(WSL 設定編) WSL で NTFS シンボリックリンクや Windows ショートカットを作成するための設定 WSL の emacsclient を Windows から利用するための設定 Windows ショートカットを dired と連携して使うための設定 ← お薦めはこちら w32-symlinks を dired と連携して使うための設定 Notepad を使って印刷するための設定(WSL 設定編) locate を使うための設定(WSL 設定編) WSL の Emacs から VSCode でファイルを開くための設定 VSCode で開いているファイルを WSL の Emacs で開くための設定 Windows の ssh から WSL2 の sshd に接続するための設定 (関連) WSL で cygstart 的コマンドを使うための設定 singleton な動きをする cygstart 的コマンドを使うための設定 (WSL版) ■ Emacs 全般で利用できる設定 shell-mode を使うための設定 shell-mode で複数の漢字コードを混在して利用できるようにするための設定 shellバッファ を簡単にポップアップするための設定 dired を OS と連携して使うための設定 dired をより便利に使うための設定 dired でディレクトリのシンボリックリンクを実体のパスで開くための設定 tramp を tramp-method “scp” で使うための設定 tramp による接続先で Xクライアント を実行するための設定 helm を使うための設定 helm から comint の入力履歴を検索するための設定 helm で peco もどきのコマンドを使うための設定 ediff をスマートに使うための設定 elscreen を使うための設定 whitespace を使うための設定 cua-mode を使うための設定 multiple-cursors を使うための設定 google-translate を使いやすくするための設定 ■ 説明ページを作るまでもない設定の紹介 沢山開いているバッファをできるだけ一度に閉じるための設定 (global-set-key (kbd "M-c") (lambda () (interactive) (desktop-clear) (tramp-cleanup-all-connections))) カレントバッファを一発で閉じるための設定 (global-set-key (kbd "M-k") (lambda () (interactive) (kill-buffer (buffer-name)))) ウィンドウの右端で改行をするかどうかを切り替えるための設定 (global-set-key (kbd "C-c C- return ") 'toggle-truncate-lines) 横スクロールするための設定(キー設定が逆の感覚の方もいるかも) (global-set-key (kbd "C-,") 'scroll-left) ; のキー (global-set-key (kbd "C-.") 'scroll-right) ; のキー other-window がなければ開き、その window に移動するための設定 http //d.hatena.ne.jp/rubikitch/20100210/emacs (defun other-window-or-split () (interactive) (when (one-window-p) (split-window-sensibly)) (other-window 1)) (global-set-key (kbd "C-x o") 'other-window-or-split) 2 分割しているバッファを入れ替えるための設定 http //www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow node=swap%20screen (defun swap-screen-with-cursor() "Swap two screen,with cursor in same buffer." (interactive) (let ((thiswin (selected-window)) (thisbuf (window-buffer))) (other-window 1) (set-window-buffer thiswin (window-buffer)) (set-window-buffer (selected-window) thisbuf))) (global-set-key (kbd "M-t") 'swap-screen-with-cursor) バッファの分割方向を縦と横とで入れ替えるための設定 https //github.com/daichirata/emacs-rotate (require 'rotate) (setq rotate-functions '(rotate even-horizontal rotate even-vertical)) (global-set-key (kbd "M-\\") 'rotate-layout) tramp を使っていて、NTEmacs の起動が遅くなる場合に必要な設定 (require 'recentf) (setq recentf-auto-cleanup 'never) (recentf-mode 1) その他参考 http //www.clear-code.com/blog/2012/3/20.html ■ おまけ ssh-agent や ssh-pageant を使って、ssh のパスフレーズの入力を省略するための設定(方法1) ssh-agent や ssh-pageant を使って、ssh のパスフレーズの入力を省略するための設定(方法2) ssh-agent や ssh-pageant を使って、ssh のパスフレーズの入力を省略するための設定(方法3) ← お薦めはこちら Windows の操作を Emacs のキーバインドで行うための設定 (AutoHotKey版) Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) ← お薦めはこちら ■ その他 MobaXterm を使おう Windows で sshfs を使うお薦めのソフト Subversion には dsvn を使っています。melpa からインストールできます。 Git には magit が便利です。 Vimacs というのもあるんですね。Evil と逆の発想のものだと思います。 http //blog.cnu.jp/2009/07/28/vimacs/ http //uguisu.skr.jp/Windows/vim.html spacemacsというのも見つけました。Windows版 Emacs でも動いているようです。 https //github.com/syl20bnr/spacemacs ■ 参考サイト Manual http //emacs.rubikitch.com/emacs245-manual-ja/ https //ayatakesi.github.io/ https //github.com/ayatakesi Lisp と JavaScript https //www.slideshare.net/taiju/javascriptlisp https //qiita.com/derui/items/6e8de68cc1b7295de3a6 Common Lisp http //www.geocities.jp/m_hiroi/xyzzy_lisp.html functional-programming https //postd.cc/an-introduction-to-functional-programming/ https //qiita.com/hiruberuto/items/26a813ab2b188ca39019 nadvice http //g000001.cddddr.org/3623238000 ` before'(lambda ( rest r) (apply FUNCTION r) (apply OLDFUN r)) ` after'(lambda ( rest r) (prog1 (apply OLDFUN r) (apply FUNCTION r))) ` around'(lambda ( rest r) (apply FUNCTION OLDFUN r)) ` override'(lambda ( rest r) (apply FUNCTION r)) ` before-while'(lambda ( rest r) (and (apply FUNCTION r) (apply OLDFUN r))) ` before-until'(lambda ( rest r) (or (apply FUNCTION r) (apply OLDFUN r))) ` after-while'(lambda ( rest r) (and (apply OLDFUN r) (apply FUNCTION r))) ` after-until'(lambda ( rest r) (or (apply OLDFUN r) (apply FUNCTION r))) ` filter-args'(lambda ( rest r) (apply OLDFUN (funcall FUNCTION r))) ` filter-return'(lambda ( rest r) (funcall FUNCTION (apply OLDFUN r))) generalized variables http //kawabata.github.io/blog/2013-03-14-general-variables.html http //qiita.com/kawabata@github/items/9a1a1e211c57a56578d8 lexical-binding http //sakito.jp/emacs/emacs24.html#emacs-lisp-lexical-binding http //d.hatena.ne.jp/mhayashi1120/20130327/1364396586 flet http //ja.stackoverflow.com/questions/5458/flet%E3%81%A8cl-flet%E3%81%AE%E5%B7%AE%E7%95%B0 noflet http //emacs.rubikitch.com/noflet/ function http //www.mew.org/~kazu/doc/elisp/function.html custom-set-variables http //kawamuray.hatenablog.com/entry/2013/11/03/180543 buffer local variable https //qiita.com/yoshrc/items/00f3c08f7a5cac911c3a https //qiita.com/tadsan/items/9d287a57c26711387043 Emacs http //qiita.com/ytoda129/items/58078d8c7e74d9144014 https //miyazakikenji.wordpress.com/2015/08/11/ac-mozc-on-emacs25-in-ubuntu/(誤記有: apt-add repository - apt-add-repository。インストールされるものが最新過ぎるかも。) http //nkenbou.hatenablog.com/entry/2015/06/30/051408 http //askubuntu.com/questions/87872/how-do-i-accept-the-configuration-screen-that-pops-up-when-installing-postfix http //tanehp.ec-net.jp/heppoko-lab/prog/zakki/emacs/emacs.html http //d.hatena.ne.jp/tomoya/20081228/1230421982 http //blog.ichiroc.in/entry/2013/08/30/185953 init-loader.el http //d.hatena.ne.jp/gin0606/20111021/1319196327 http //tech.kayac.com/archive/divide-dot-emacs.html http //qiita.com/catatsuy/items/5f1cd86e2522fd3384a0 font http //extra-vision.blogspot.com/2016/07/emacs.html http //mix-mplus-ipa.osdn.jp/migu/ http //save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html dabbrev http //konbu13.hatenablog.com/entry/2014/03/09/080947 emacsclient https //qiita.com/acple@github/items/4be7eb774a28d574281e helm https //github.com/emacs-helm/helm/wiki https //github.com/emacs-helm/helm/wiki/Developing http //syohex.hatenablog.com/entry/2015/10/10/171926 https //masutaka.net/chalow/2014-04-02-1.html mozc http //nyaruru.hatenablog.com/archive http //d.hatena.ne.jp/rti7743/20100513/1273710518 https //www.codeproject.com/Articles/13724/Windows-IPC http //myfuturesightforpast.blogspot.com/2015/08/googlemozcimewindowslinuxandroid.html https //github.com/kento1218/mozc-incog-switcher Google日本語入力 https //productforums.google.com/forum/#!topic/ime-ja/5CCIenG_0Zw https //productforums.google.com/forum/#!topic/ime-ja/xBJLDHyJVw0 eclim http //eclim.org https //github.com/senny/emacs-eclim OminiSharp https //github.com/omnisharp roslyn https //www.buildinsider.net/enterprise/roslyn/01 lsp https //github.com/emacs-lsp https //github.com/joaotavora/eglot https //microsoft.github.io/language-server-protocol/implementors/servers/ https //qiita.com/blue0513/items/acc962738c7f4da26656 https //qiita.com/atsushieno/items/ce31df9bd88e98eec5c4 https //qiita.com/515hikaru/items/8b364b4d091459a85dc0 TabNine https //qiita.com/blue0513/items/2634fcb3757629124c87 https //qiita.com/gorogoroyasu/items/f49ee019ea886181d972 IDE https //www.mediamaxjapan.com/techblog/articles/lets-start-using-ide/ WSL https //opcdiary.net/?p=32284 https //qiita.com/nishemon/items/bb3aca972404f68bfcd6 https //qiita.com/zophos/items/5cf66385a88186c2fac9 http //ascii.jp/elem/000/001/278/1278792/ http //ascii.jp/elem/000/001/402/1402257/ https //ascii.jp/elem/000/001/803/1803883/ http //www.clear-code.com/blog/2017/11/8.html https //www.atmarkit.co.jp/ait/articles/1711/09/news032.html for Windows 10 1803 https //kledgeb.blogspot.jp/2018/03/wsl-142-windows-101803wsl.html http //www.atmarkit.co.jp/ait/articles/1805/24/news022.html for Windows 10 1607 https //github.com/goreliu/wsl-terminal https //github.com/rprichard/wslbridge https //github.com/xilun/cbwin http //qiita.com/shiena/items/b8036514c217000a221 WSL2 https //ascii.jp/elem/000/004/007/4007561/ binfmt_misc http //ascii.jp/elem/000/001/428/1428626/ https //qiita.com/lnznt/items/c729d80d0800a8f78298 http //archive.linux.or.jp/JF/JFdocs/kernel-docs-2.6/binfmt_misc.txt.html D-Bus http //d.hatena.ne.jp/debug-ito/20130502/1367487352 http //www.usupi.org/sysad/175.html http //www.usupi.org/sysad/176.html http //wordpress.honobono-life.info/lin-base/linux%E3%81%AEdbus-daemon%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%A6%82%E8%A6%81/ bash http //www.akamoz.jp/you/uni/shellscript.htm https //orebibou.com/2017/04/shopt%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%8D%E3%82%8Bbash%E3%81%AE%E4%BE%BF%E5%88%A9%E8%A8%AD%E5%AE%9A%E3%81%BE%E3%81%A8%E3%82%81/ gsudo https //qiita.com/_masa_u/items/a799745d70b30c32a03b https //github.com/gerardog/gsudo stdbuf https //linuxcommand.net/stdbuf/ cocot https //vmi.jp/software/cygwin/cocot.html ssh http //kazuph.hateblo.jp/entry/2013/02/04/192358 http //qiita.com/kazuph/items/46e7f665f8c09ec29471 http //inaz2.hatenablog.com/entry/2013/04/30/221348 ssh-agent-wsl https //qiita.com/q1701/items/3cdc2d7ef7a3539f351d socat http //racchai.hatenablog.com/entry/2016/04/14/173000 SocksCap64 https //www.cup.com/staticip/manual/win_sockscap64.html Named Pipe TCP Proxy Utility http //shvechkov.tripod.com/nptp.html https //yamanxworld.blogspot.jp/2011/06/com-ems.html trac http //blog.kyanny.me/entry/2011/11/19/023643 DOS https //goo.gl/rS2qoh https //thinca.hatenablog.com/entry/20100210/1265813598 http //coelacanth-deepsea.hatenablog.com/entry/2013/01/13/162350 https //korokorokoron.hatenadiary.org/entries/2010/03/16 http //ykr414.com/dos/bat.html http //pentan.info/server/windows/cmd/dp0.html https //tunemicky.blogspot.com/2012/03/cmdexe-c.html http //www.atmarkit.co.jp/ait/articles/1306/07/news111.html UAC https //www.glamenv-septzen.net/view/832 fsutil http //www.atmarkit.co.jp/ait/articles/1306/28/news106.html https //blogs.technet.microsoft.com/jpntsblog/2016/08/31/smbandsymlink/ Windows Shortcut File Format https //storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/8bits/The_Windows_Shortcut_File_Format.pdf https //docs.microsoft.com/en-us/openspecs/windows_protocols/ms-shllink/16cb4ca1-9339-4d0c-a68d-bf1d6cc0f943 Android http //d.hatena.ne.jp/moerrari/20170723 http //ottan.xyz/android-linux-noroot-gui-5690/ http //qiita.com/z80oolong/items/4ef119a6af79a9276a0d http //www.mhatta.org/wp/blog/2017/08/06/emacs-on-android/ Keyhac https //sites.google.com/site/craftware/keyhac-ja https //github.com/crftwr/keyhac/blob/master/keyhac_main.py#L7-L21 closure http //www.lifewithpython.com/2014/09/python-use-closures.html?m=1 http //blog.starbug1.com/archives/290 AutoHotKey https //so-zou.jp/software/tool/system/auto-hot-key/introduction/ http //ahkwiki.net/Top http //fxrobot.hatenablog.com/archive/category/AutoHotKey Bat To Exe Converter http //blog.mukairiku.net/2012/10/%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92exe%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B-bat-to-exe-converter.html http //www.f2ko.de/en/b2e.php Emacs keybind https //linuxfan.info/emacs-key-theme https //qiita.com/shiena/items/37032aacc241b1333e13 xkeysnail https //qiita.com/mooz@github/items/c5f25f27847333dd0b37 https //github.com/mooz/xkeysnail q-text-as-data http //harelba.github.io/q/ja/ https //www.google.com/search?q=q-text-as-data qq https //github.com/mattn/qq https //mattn.kaoriya.net/software/lang/go/20160805190022.htm Open-usp-Tukubai https //github.com/usp-engineers-community/Open-usp-Tukubai article http //kledgeb.blogspot.jp/2016/07/wsl-31-windows-10ubuntuunityxubuntuxfce4.html https //github.com/Microsoft/BashOnWindows/issues/637 http //www.zdnet.com/article/how-to-run-run-the-native-ubuntu-desktop-on-windows-10/ http //winaero.com/blog/run-ubuntu-unity-on-windows-10/ https //blogs.msdn.microsoft.com/wsl/2016/10/19/windows-and-ubuntu-interoperability/ http //kledgeb.blogspot.jp/2016/10/wsl-51-bashwindows.html http //ascii.jp/elem/000/001/246/1246548/ http //ascii.jp/elem/000/001/250/1250797/ MacOS https //applech2.com/archives/45181430.html https //applech2.com/archives/47447129.html https //blog.amedama.jp/entry/lima-macos-amd64-vm https //zenn.dev/ciloholic/articles/bbc6927ecfbdb4 https //qiita.com/chibiegg/items/eede37345f7058ce604d https //dev.classmethod.jp/articles/intro-to-multipass/ (function(i,s,o,g,r,a,m){i[ GoogleAnalyticsObject ]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document, script , //www.google-analytics.com/analytics.js , ga ); ga( create , UA-40267130-1 , atwiki.jp ); ga( send , pageview );
https://w.atwiki.jp/ntemacs/pages/48.html
■ Windows版 Emacs 共通の設定 (一部の設定を除き、Linux版 Emacs にも適用可能) 【お知らせ】 2021/12/16 追記 相互リンク。こちらも参考になると思います。 https //ploversky.net/archives/463 2020/04/23 追記 ワンショットモディファイアの機能を利用し、左右の Alt キーに IME の切替えを割り当てられるようにしました。Keyhac の設定と連携することで動作します。US のキーボードを利用している場合にお試しください。 なお、次の設定も同じ操作性にできるように見直しました。 Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) 2020/04/13 追記 「IME を無効にするキー設定」と「IME を有効にするキー設定」を追加しました。初期設定では、「無変換」キーと「変換」キーを割り当てています。C-o の設定はトグル動作となっていますが、設定の中のコメントを見直すことで変更可能です。お勧めは、C-o のトグル設定は残して C-j に英数への切替えを設定するものです。日本語への切替えが C-o によるトグル操作による切替えの他、C-j C-o での一発切替えが可能となります。(helm 利用の際に C-j がバッティングしますが、C-o で逃げれます。) なお、次の設定も同じ操作性にできるように見直しました。 Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) 2019/05/17 追記 wdired 利用時に C-o による日本語入力を可能とする設定を追加しました。 2018/08/12 追記 mozc-im-mode 変数をバッファローカル変数にする方法を make-variable-buffer-local 関数を使う方法から defvar-local で定義する方法に見直しました。Emacs-24.3 以降で有効な設定となります。 https //qiita.com/tadsan/items/9d287a57c26711387043 2018/01/04 追記 mozc-candidate-dispatch の advice が helm の仕様変更により動作しなくなっていましたので見直しました。この対応で、dired 利用時に + キーで動作する dired-create-directory でも日本語が正常に入力できるようになりました。 2017/05/04 追記 本設定は Windows Subsystem for Linux でも利用可能です。設定は次のページから始めてください。 emacs-mozc を動かすための設定(WSL 設定編) 2016/12/01 追記 次のページで報告されている問題について対策しました。 https //github.com/d5884/mozc-im/pull/1 2016/09/13 追記 5) で mozc_emacs_helper.exe に対し IME を ON にするために発行しているキーを「Hiragana」から「Hankaku/Zenkaku」に変更しました。この対応で、Google日本語入力のキー設定が「MS-IME」以外の「ことえり」などでも emacs-mozc を使えるようになりました。(ただし、「Hankaku/Zenkaku」キーは「Hiragana」キーと異なり、IME の ON/OFF をトグルするキーとなります。必要な場合に一度のみ発行するように注意して利用する必要があります。(本設定を利用すれば問題は発生しません。)) 2015/12/07 追記 本設定とは直接関係ありませんが、isearch でキルリングを張り付けるには、C-s RET C-y とすればいいのですね。知りませんでした..。 http //kouritool.com/itdiary/emacs%E3%81%A7%E5%BC%B5%E3%82%8A%E4%BB%98%E3%81%91%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E6%A4%9C%E7%B4%A2/ 【本題】 【重要】 WSL版 Emacs の利用者は、最初に「emacs-mozc を動かすための設定(WSL 設定編)」を参照してください。 【重要】 Windows版 Emacs の利用者は、事前に「emacs-mozc を動かすための設定(mozc_emacs_helper コンパイル編)」を参照してください。 【重要】 「emacs-mozc を動かすための設定(サーバ準備編)」を行う方法もありますが、特に理由がなければ mozc_emacs_helper.exe を利用する方法をお勧めします。 【重要】 Linux で mozc(Google日本語入力ではなく)を利用する場合は、次の対応を行った後、(共通)の設定を進んで下さい。 $ sudo apt install emacs-mozc-bin $ sudo apt install mozc-utils-gui NTEmacs で emacs-mozc を動かすための Emacs 設定編です。 以下は設定手順です。 1) (共通)melpa package から、mozc、mozc-im、mozc-popup をインストールする。 ※ mozc-candidate-style を overlay に設定した場合、動作が遅く使用に耐えません。これを改善するのが mozc-popup です。tabbar との相性も良いとの情報もあります。 ※ mozc-im を使うことで、isearch の中でも mozc による日本語入力が可能となります。 2) (共通)次のページから mozc-cursor-color.el をダウンロードし、~/.emacs.d/site-lisp 等の load 対象となるディレクトリ配下にサブディレクトリを作成し格納する。 https //github.com/iRi-E/mozc-el-extensions 3) (「サーバ準備編」利用の場合)サーバ準備編で git により作成された vagrant-emacs-mozc ディレクトリ以下に mozc-emacs-helper.sh というファイルがあるので、このファイルを ~/bin 等の PATH の通ったフォルダにコピーする。既存の Linux環境を利用する場合は、mozc-emacs-helper.sh の中身を確認し、Linuxマシンに自動ログインできるスクリプトに書き換える。置き換えるスクリプトは以下のようなもの。 ssh user @localhost -p port mozc_emacs_helper "$@" また、MinGW版 Emacs を利用している場合は、「fakecygpty を使うための設定」を利用し、fakecygpty-program-list に "mozc-emacs-helper.sh" を追加する。 4) (共通)init.el 等に以下の elisp の設定を追加する。 (require mozc-im) (require mozc-popup) (require mozc-cursor-color) (require wdired) (setq default-input-method "japanese-mozc-im") ;; popupスタイル を使用する (setq mozc-candidate-style popup) ;; カーソルカラーを設定する (setq mozc-cursor-color-alist ((direct . "red") (read-only . "yellow") (hiragana . "green") (full-katakana . "goldenrod") (half-ascii . "dark orchid") (full-ascii . "orchid") (half-katakana . "dark goldenrod"))) ;; カーソルの点滅を OFF にする (blink-cursor-mode 0) (defun enable-input-method ( optional arg interactive) (interactive "P\np") (if (not current-input-method) (toggle-input-method arg interactive))) (defun disable-input-method ( optional arg interactive) (interactive "P\np") (if current-input-method (toggle-input-method arg interactive))) (defun isearch-enable-input-method () (interactive) (if (not current-input-method) (isearch-toggle-input-method) (cl-letf (((symbol-function toggle-input-method) (symbol-function ignore))) (isearch-toggle-input-method)))) (defun isearch-disable-input-method () (interactive) (if current-input-method (isearch-toggle-input-method) (cl-letf (((symbol-function toggle-input-method) (symbol-function ignore))) (isearch-toggle-input-method)))) ;; IME をトグルするキー設定 (global-set-key (kbd "C-o") toggle-input-method) (define-key isearch-mode-map (kbd "C-o") isearch-toggle-input-method) (define-key wdired-mode-map (kbd "C-o") toggle-input-method) ;; IME を無効にするキー設定 (global-set-key (kbd "C- f1 ") disable-input-method) (define-key isearch-mode-map (kbd "C- f1 ") isearch-disable-input-method) (define-key wdired-mode-map (kbd "C- f1 ") disable-input-method) ;; (global-set-key (kbd "C-j") disable-input-method) ;; (define-key isearch-mode-map (kbd "C-j") isearch-disable-input-method) ;; (define-key wdired-mode-map (kbd "C-j") disable-input-method) ;; IME を有効にするキー設定 (global-set-key (kbd "C- f2 ") enable-input-method) (define-key isearch-mode-map (kbd "C- f2 ") isearch-enable-input-method) (define-key wdired-mode-map (kbd "C- f2 ") enable-input-method) ;; (global-set-key (kbd "C-o") enable-input-method) ;; (define-key isearch-mode-map (kbd "C-o") isearch-enable-input-method) ;; (define-key wdired-mode-map (kbd "C-o") enable-input-method) ;; mozc-cursor-color を利用するための対策 (defvar-local mozc-im-mode nil) (add-hook mozc-im-activate-hook (lambda () (setq mozc-im-mode t))) (add-hook mozc-im-deactivate-hook (lambda () (setq mozc-im-mode nil))) (advice-add mozc-cursor-color-update around (lambda (orig-fun rest args) (let ((mozc-mode mozc-im-mode)) (apply orig-fun args)))) ;; isearch を利用する前後で IME の状態を維持するための対策 (add-hook isearch-mode-hook (lambda () (setq im-state mozc-im-mode))) (add-hook isearch-mode-end-hook (lambda () (unless (eq im-state mozc-im-mode) (if im-state (activate-input-method default-input-method) (deactivate-input-method))))) ;; wdired 終了時に IME を OFF にする (advice-add wdired-finish-edit after (lambda ( rest args) (deactivate-input-method))) gnupack 等で W32-IME の設定がされている場合は、以下の箇所をコメント化してください。 gnupack-11系: 「@ime」セクション gnupack-12,13系: 「@ language - input method」セクション、「@ screen - cursor」セクション、「@ search - isearch」セクションの後半 MinGW版 Emacs を使っている場合は、以下の設定を追加してください。 ;; IME が ON の時、カーソルの移動が遅くなるのを改善する (setq w32-pipe-read-delay 10) helm を使っている場合は、以下の設定を追加してください。 (require cl-lib) ;; helm でミニバッファの入力時に IME の状態を継承しない (setq helm-inherit-input-method nil) ;; helm の検索パターンを mozc を使って入力した場合にエラーが発生することがあるのを改善する (advice-add mozc-helper-process-recv-response around (lambda (orig-fun rest args) (cl-loop for return-value = (apply orig-fun args) if return-value return it))) ;; helm の検索パターンを mozc を使って入力する場合、入力中は helm の候補の更新を停止する (advice-add mozc-candidate-dispatch before (lambda ( rest args) (when helm-alive-p (cl-case (nth 0 args) ( update (unless helm-suspend-update-flag (helm-kill-async-processes) (setq helm-pattern "") (setq helm-suspend-update-flag t))) ( clean-up (when helm-suspend-update-flag (setq helm-suspend-update-flag nil))))))) ;; helm で候補のアクションを表示する際に IME を OFF にする (advice-add helm-select-action before (lambda ( rest args) (deactivate-input-method))) 5) (「mozc_emacs_helper コンパイル編」利用の場合)init.el 等に以下の elisp の設定を追加する。 ;; Windows の mozc では、セッション接続直後 directモード になるので hiraganaモード にする (advice-add mozc-session-execute-command after (lambda ( rest args) (when (eq (nth 0 args) CreateSession) ;; (mozc-session-sendkey (hiragana))))) (mozc-session-sendkey (Hankaku/Zenkaku))))) 6) (「サーバ準備編」利用の場合)init.el 等に以下の elisp の設定を追加する。 ;; https //github.com/igjit/vagrant-emacs-mozc (setq mozc-helper-program-name "mozc_emacs_helper.sh") (setq mozc-helper-process-timeout-sec 10) 7) (「mozc_emacs_helper コンパイル編」利用の場合)mozc のキーバインドを設定する。 「Google日本語入力」のプロパティで、「キー設定」を「ことえり」に選択してください。「ことえり」は Emacsキーバインドをベースとしたキー設定となっており、更に以下のキーが近いキー位置で利用可能となっています。 C-i (文節を縮める) C-o (文節を伸ばす) C-j (ひらがなに表示切替) C-k (全角カタカナに表示切替) C-l (全角英数に表示切替) C-; (半角に表示切替) C- /C- (半角英数に表示切替) ※ ターミナルソフトから Emacs を利用する場合、C-;、C- 、C- は利用できません。他のキーに置き換えてご利用ください。 8) (「サーバ準備編」利用の場合)mozc のキーバインドを設定する。 Linuxサーバ の mozc のキーバインドの設定は mozc_tool というコマンドで行いますが、Vargent で作成した Linuxサーバには mozc_tool はインストールされていません。このため、Windows PC に「Google日本語入力」をインストールして 7) の設定を行い、設定した結果が格納されている以下のファイルを Linux 側の ~/.mozc ディレクトリにコピーすることで対応してください。ファイルをコピーした後は Linuxサーバを再起動してください。 c /Users/ user /AppData/LocalLow/Google/Google Japanese Input/config1.db コマンド実行手順は以下のとおりとなります。 $ ssh -p 2422 -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1 mkdir -p ~/.mozc $ cd c /Users/ user /AppData/LocalLow/Google/Google Japanese Input $ scp -P 2422 -i ~/.vagrant.d/insecure_private_key config1.db vagrant@127.0.0.1 ~/.mozc $ cd gitした場所 /vagrant-emacs-mozc $ vagrant reload なお、Linuxサーバに mozc-utils-guiパッケージ をインストールすれば、mozc_tool コマンドの表示を Cygwin/X 等の Xサーバに表示させることができます。コマンドは以下のとおりです。 $ sudo apt install mozc-utils-gui $ /usr/lib/mozc/mozc_tool --mode=config_dialog ただし、「emacs-mozc を動かすための設定(サーバ準備編)」でインストールした Linuxサーバ では、LANG の設定をしただけでは日本語の表示はできないようです。 9) (共通)Emacs で C-o を入力することにより、mozc-emacs-helper が起動し、漢字が入力できることを確認する。 ※ 「emacs-mozc を動かすための設定(WSL 設定編)」から本ページに来た場合は、まだ漢字入力はできません。このまま進んでください。 10) (共通)Windows の IME の切換えキーで mozc を切り替えられるように調整する。 ※ Virtualbox の Linux で Emacs を動作させている場合は、本設定で利用している Keyhac は有効に機能しません。本設定は、Windows版 Emacs や Windows の Xサーバソフトを経由して Emacs を動作させている場合に有効な設定です。 Windows の IME の切換えキー(「半角/全角」(日本語キーボード用)や Alt-`(英語キーボード用))で mozc を切り替えられるようにするには、「Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版)」の併用を検討ください。(Fakeymacs extension の real-emacs を有効にしてください。)IME の切換えの対応のみ行いたい場合には、以下の設定が利用できます。設定の方法はコメントの URL を参照してください。 これらの設定は、NTEmacs(gnupack 含む)と Windows の Xサーバで動く Emacs で機能するようにしています。Windows の Xサーバで Emacs が動作しているかどうかは、ウィンドウのタイトルで判定しています。Emacs の設定でタイトルの表示内容を変更している場合には、re.search 内の検索する正規表現を調整することで対応してください。 # -*- mode python; coding utf-8-with-signature-dos -*- # http //qiita.com/hshimo/items/2f3f7e070ae75243eb8b import re from keyhac import * def configure(keymap) def is_real_emacs(window) if (window.getClassName() == "Emacs" or (window.getProcessName() in ["mstsc.exe", # WSLg "msrdc.exe", # WSLg "XWin.exe", # Cygwin/X "XWin_MobaX.exe", # MobaXterm/X "XWin_MobaX_1.16.3.exe", # MobaXterm/X "XWin_Cygwin_1.14.5.exe", # MobaXterm/X "XWin_Cygwin_1.16.3.exe", # MobaXterm/X "Xming.exe", # Xming "vcxsrv.exe", # VcXsrv "GWSL_vcxsrv.exe", # GWSL "GWSL_vcxsrv_lowdpi.exe", # GWSL "X410.exe", # X410 "Xpra-Launcher.exe", # Xpra ] and # ウィンドウのタイトルを検索する正規表現を指定する # Emacs を起動しているウィンドウを検索できるように、Emacs の frame-title-format 変数を # 次のように設定するなどして、識別できるようにする # (setq frame-title-format (format "emacs-%s - %%b " emacs-version)) # (別途公開している sglstart コマンドを利用している場合、%%b の後のスペースは必要) re.search(r"^emacs-", window.getText()))) return True else return False keymap_real_emacs = keymap.defineWindowKeymap(check_func=is_real_emacs) # IME 切り替え用のキーの置き換え keymap_real_emacs["(243)"] = keymap.InputKeyCommand("C-Yen") # 半角/全角 キー keymap_real_emacs["(244)"] = keymap.InputKeyCommand("C-Yen") # 半角/全角 キー keymap_real_emacs["A-(25)"] = keymap.InputKeyCommand("C-Yen") # Alt-` キー keymap_real_emacs["(29)"] = keymap.InputKeyCommand("C-F1") # 無変換 キー keymap_real_emacs["(28)"] = keymap.InputKeyCommand("C-F2") # 変換 キー # keymap_real_emacs["O-LAlt"] = keymap.InputKeyCommand("C-F1") # 左 Alt キーの単押し # keymap_real_emacs["O-RAlt"] = keymap.InputKeyCommand("C-F2") # 右 Alt キーの単押し 変更履歴 2014/10/30 このページを作成した。 2014/11/02 minibuffer-setup-hook の設定を追加した。 2014/11/04 wdired を使う際の設定を追加した。 2014/11/18 「emacs-mozc を動かすための設定(mozc_emacs_helper コンパイル編)」に対応した。 2014/11/20 IME が ON の時、カーソルの移動が遅くなる対策を追加した。(w32-pipe-read-delay の値を デフォルトの 50 から 10 に変更した。) 2014/11/24 minibuffer-setup-hook 内の unless の判定を Emacs-24.3 以前のバージョンでも有効なものに変更した。 2014/11/27 helm の検索パターンを mozc を使って入力した場合にエラーが発生することがある対策を追加した。 2014/11/29 helm の検索パターンを mozc を使って入力する場合、入力中は helm の候補の更新を停止するようにした。 2014/12/12 helm で候補のアクションを表示する際に IME を OFF にするようにした。 2015/01/17 mozc-popup を最新と思われるサイトのものの利用に変更した。 2015/03/11 mozc-helper-process-recv-response のアドバイスの内容を簡略化した。 2015/07/22 Emacs-24.3 以上の対応の記載とした。 2015/09/10 advice を Emacs-24.4 以降の書式に見直した。 2015/10/30 mozc-im を利用するように設定を全面的に見直した。 2015/11/12 mozc-candidate-dispatch の advice を一度削除していたが、やはりあるべき設定のようなので復活させた。 2015/12/28 keyhac の設定の内容を、Keyhac for Windows ver 1.70 用に見直しをした。 2016/12/01 https //github.com/d5884/mozc-im/pull/1 で報告されている問題について対策した。 2017/07/11 Emacs で mozc を利用する際に Windows の IME の切換えキーを mozc の切り替えキーとして機能させるための設定を見直した。 2017/12/21 keyhac の設定で import re の行が不足していたので、追加した。 2019/05/17 wdired 利用時に C-o による日本語入力を可能とする設定を追加した。 2020/04/13 「IME を無効にするキー設定」と「IME を有効にするキー設定」を追加した。 2020/04/19 ワンショットモディファイアの機能を利用し、左右の Alt キーに IME の切替えを割り当てられるようにした。
https://w.atwiki.jp/ntemacs/pages/69.html
【トピック】 ● WSL_トピック ● Docker_トピック ● Xpra_トピック 【お知らせ】 2022/10/14 追記 本ページの設定を多少変更すると WSLg で動かすこともできます。WSLg ではキーボードの設定がうまく行われない場合があるようですので、その場合は以下のどちらかの行の設定を行ってください。 setxkbmap -layout us setxkbmap -layout jp 2022/10/14 追記 X11 サーバを GWSL とするように、全体的な見直しを行いました。 2022/04/19 追記 2021年の補完UI事情とEmacs28に標準添付されるfido-vertical-modeについて https //qiita.com/tadsan/items/f1738cb463b1ec536f84 2022/01/04 追記 興味深いコマンドを2つ紹介します。 https //linuxcommand.net/stdbuf/ https //vmi.jp/software/cygwin/cocot.html 2021/12/10 追記 2019/04/22 追記 で winsudo というコマンドを紹介しておりますが、gsudo というコマンドがあるようです。まだ使ってみてはおりませんが、紹介します。 https //qiita.com/_masa_u/items/a799745d70b30c32a03b https //github.com/gerardog/gsudo 2021/09/17 追記 WSL2 で WSLg と GWSL を利用する場合の比較をしてみました。GWSL は VcXsrv を利用しているので、GWSL に記載してある内容は VcXsrv を利用する場合にも当てはまります。 <GWSL> ・新しい Microsoft IME を選択しているとカーソルのレスポンスが悪くなる(古いMicrosoft IME や Google日本語入力ではこの問題は発生しません) ・Emacs 起動時にウインドウが小さく表示される問題が発生する( 13) に回避対策の記載があります) ・DISPLAY 環境変数を独自に設定する必要がある( 0 では動きません) <WSLg> ・カーソルが遅くなる問題が発生しない ・Emacs 起動時にウインドウが小さく表示される問題が発生しない ・DISPLAY 環境変数が 0 で動作する ・Windows 10 では動作しない ⇒ (2022/11/18 追記)Windows 10 21H1 以降では、パッチ KB5020030 をインストールし、Microsoft Store版 WSLv1.0.0 をインストールすると動作するようです。 ・Emacs を最大化しても完全な最大化とならない(下部の最大化がならない部分から背景が見えてしまいます) ⇒ (2022/11/18 追記)Microsoft Store版 WSLv1.0.0 では改善していることを確認しました。 ・ウインドウ枠が独自のため、アクティブなウインドウの状況が分かりづらい(Windows でアクティブウインドウのタイトルバーの色を変える設定にしていても、WSLg のウインドウは対象になりません) ・Windows のウィンドウの操作作法が利用できない(画面の上画面外へのドラックで画面の最大化がされるなどの操作が使えません) 現時点では、後半の2つの問題を許容できないことから、GWSL を選択して利用しています。 2021/08/09 追記 X Window のキーリピートの速度を変更するには、以下のようなコマンドで対応できます。なお、 2020/08/08 追記 に記載しているとおり、VcXsrv は 新しい Microsoft IME と相性が良くありません。VcXsrv を利用する場合は、IME に Google 日本語入力や古い Microsoft IME を選択するようにしてください。 $ xset r rate 400 40 2021/06/25 追記 Emacs の設定は、leaf.el を使うのが人気のようです。お試しください。 https //qiita.com/conao3/items/347d7e472afd0c58fbd7 2021/06/17 追記 本ページでは、補完 UI として helm を紹介していますが、主流は変わりつつあるようです。以下が参考となりますので紹介させていただきます。 https //blog.tomoya.dev/posts/a-new-wave-has-arrived-at-emacs/ 2021/02/05 追記 本ページの内容は WSL2 でも動作します。DrvFs や VolFs の記載がある場合には、Windows 側のファイルシステム、WSL2 側のファイルシステムと読み替えてください。 2020/08/08 追記 Windows 10 ver 2004 の WSL/WSL2 で Emacs を VcXsrv に接続して使っていると、カーソル移動後の停止がワンテンポずれる症状が発生します。これは、IME に新しい Micorosoft IME が選択されているときに発生することが分かりました。IME に Google 日本語入力や古い Microsoft IME が選択されているときには発生しません。WSL/WSL2 の Emacs では、mozc_emacs_helper.exe を使って Google 日本語入力と連携して日本語入力を行っているため、なかなか気づきませんでした。 ⇒(2020/08/23 追記)この現象は MobaXterm の X サーバでは発生しないようです。 2020/08/06 追記 WSL2 から VcXsrv(GWSL の中でも利用)へのアクセスを許可する方法として、vcxsrv.exe の起動時に -ac オプションを付ける(Disable access control とする)方法があります。この方法は、以下のサイトで紹介しているようなセキュリティ的な問題が発生するので、避けることをお勧めします。 https //itpass.scitec.kobe-u.ac.jp/~itpass/hiki/hiki.cgi?%5BExp2010%5DX+Window+System#X+-E3-81-AE-E3-82-BB-E3-82-AD-E3-83-A5-E3-83-AA-E3-83-86-E3-82-A3 アクセスをコントロールする方法は、以下のようなものがあります。 xhost でアクセス許可を行う(説明の 10) に設定例あり) xauth でアクセス許可を行う ssh の -Y オプション(ForwardX11Trusted)を使う(-X オプション(ForwardX11)の場合、config に XAuthLocation の設定をしてもうまく機能しませんでした。ネットにも同様の報告があります。) ssh でポートフォワーディングをして使う 2020/07/14 追記 次のページを作成しました。この下の追記の設定とセットでご利用ください。 Windows の ssh から WSL2 の sshd に接続するための設定 2019/07/16 追記 ssh-agent-wsl を利用すると、Windows 側の ssh-agent を WSL から利用できるようです。 https //github.com/rupor-github/ssh-agent-wsl https //qiita.com/q1701/items/3cdc2d7ef7a3539f351d 次の設定を ~/.bash_profile に追加するのが良いと思います。 eval $( ssh-agent-wsl コマンドを置いた Windows のパス /ssh-agent-wsl -a ~/.ssh/ssh-agent-wsl.sock -r) ssh-add で登録した秘密鍵が保持されパスフレーズの入力が不要となるため、次の設定で紹介している wslemacs-start.exe との相性が良くなります。 WSL の emacsclient を Windows から利用するための設定 ⇒(2020/07/10 追記)同じ開発者から新しいプロジェクトがリリースされていました。 https //github.com/rupor-github/wsl-ssh-agent https //hnakamur.github.io/blog/2020/03/06/setup-wsl-ssh-agent/ 使ってみましたが、wsl-ssh-agent はまだ WSL2 で利用できないようですので、ssh-aget-wsl を使い続けることにしました。 2020/04/28 追記 新しい Linux ディストリビューションへのホームディレクトリの移行には、以下のバッチファイルをお試しください。バッチファイルですので、コマンドプロンプトからの起動となります。(変数の設定値は適宜変更してご利用ください。) set home_dir=user set src_distro=Ubuntu-18.04 set dst_distro=Ubuntu-20.04 wsl -d %dst_distro% -u root bash -c "mv /home/%home_dir% /home/%home_dir%.orig" wsl -d %src_distro% -u root bash -c "(cd /home; tar cvf - %home_dir%)" | wsl -d %dst_distro% -u root bash -c "(cd /home; tar xvf -)" 2019/09/20 追記 Xサーバを利用する際に「全角/半角」キーリピート問題が発生する場合には、次のページを参考に対応してください。(私は US キーボードを使っているため、この問題には遭遇していません。) https //seesaawiki.jp/w/kou1okada/d/20160905%3A%20Ubuntu%20%A4%CE%C6%FC%CB%DC%B8%EC%C6%FE%CE%CF%B5%A1%C7%BD%A4%CE%C9%D4%B6%F1%B9%E7 2019/08/09 追記 13) に「<フレームの高さを補正する設定>」の説明を追加しました。WSL Emacs on VcXsrv でフレームを開く際、高さが低く作成される状況が改善されます。 2019/04/22 追記 WSL から Windows の exe コマンドを管理者権限で実行するコマンド winsudo を公開しました。お試しください。 https //github.com/smzht/wsl-utils#-winsudo なお、このコマンドを利用する際は、【お知らせ】 の 2019/03/04 追記 に記載した「exec /dev/tty」の設定を解除する必要があります。解除時に利用できる exe コマンドを実行するためのコマンド win も併せて公開していますので、お試しください。 https //github.com/smzht/wsl-utils#-win 2019/04/19 追記 WSL で Emacs を使っている理由の大きな一つに、次の設定をすることにより Emacs の Dired で Windows ショートカットのハンドリングができることがあります。Windows ショートカットは Windows のデスクトップ環境で頻繁に使われており、ファイルシステムに依存していない一般ファイルであることから可搬性も高く(どこにでも移動や複写ができる)、Emacs の Dired で使えると非常に便利です。是非お試しください。 Windows ショートカットを dired と連携して使うための設定 WSL で NTFS シンボリックリンクや Windows ショートカットを作成するための設定 ディレクトリの Windows ショートカットがある場合、shell の cd コマンドでその Windows ショートカットを辿ることはできません。そのために、次の設定と組み合わせた利用をお勧めします。この設定は tramp の接続先でも動作します。 shellバッファ を簡単にポップアップするための設定 以上の設定は、すべて本ページで紹介しているものとなります。 2019/03/04 追記 Windows 10 1809 にアップデートしたところ、Emacs の shell-mode で exe コマンドを実行できなくなりました。(実行すると、プロンプトが帰ってこなくなります。)次のページで同様の問題が報告されています。 https //github.com/Microsoft/WSL/issues/3895 回避策として、以下の方法があるようです。 ipconfig.exe | cat のように、パイプで cat につなげる ipconfig.exe /dev/tty のように、/dev/tty にリダイレクトする 次の設定をする。(.bashrc に設定することで shell 起動時に有効にできます。ただし、【トピック】 の 2019/04/22 追記 に記載したとおり、不都合が発生するコマンドもありますので、ご留意ください。) $ exec /dev/tty 2019/03/13 追記 本設定で利用している Xサーバ VcXsrv(GWSL の中でも利用)について、次のページに不具合情報が報告されています。コピペ時の「–」の欠落などは注意が必要と思いました。内容を確認してみてください。 https //fujii.github.io/2018/08/30/emacs-on-wslinux/ ⇒(2021/09/17 追記)「–」の欠落の問題は、VcXsrv の最新のバージョンでは発生しないようです。 【本題】 Windows Subsystem for Linux で Emacs を使うための設定です。 ※ 以下では、WSL で Emacs を使うために推奨される設定のみを紹介しています。Emacs を使うための基本的な設定は別途必要です。 mozc_emacs_helper.exe で Windows 側の Google 日本語入力と連携可能。ユーザ辞書も一元管理! tramp で Linux サーバや Docker とも連携可能。GWSL(VcXsrv)を使っているので、X クライアントソフトも起動できる! eww でブラウザとしても利用可能。英語ページは google-translate で瞬時に翻訳! twitter も利用可能。アイコンも表示できるので、投稿者の識別が容易! 1) Windows 10 1903 以降をインストールする。 また、アクティブウインドウのタイトルバーの色を変更するための次の設定を有効にする。(オプション) https //www.softantenna.com/wp/tips/windows-10-change-titlebar-color/ ※ 設定すると、マルチディスプレイ使用時にアクティブウインドウの確認がし易くなります。 2) Microsoft Store から GWSL(X11 サーバアプリ)をインストールする。 https //opticos.github.io/gwsl/ https //opticos.github.io/gwsl/tutorials/manual.html 3) Windows Subsystem for Linux を有効にし、Microsoft Store から Ubuntu-22.04 をインストールした後、コンソールを起動する。 https //docs.microsoft.com/ja-jp/windows/wsl/install-win10 4) WSL に複数の Linux のディストリビューションをインストールしている場合は、コマンドプロンプトで次のコマンドを実行し、Ubuntu-22.04 ディストリビューションをデフォルトにしておく。(Windows 側から、bash.exe や wsl.exe を実行した際に使われる WSL ディストリビューションとなる。) wsl -l wsl -s Ubuntu-22.04 5) インターネットにプロキシを介して接続している場合は、.bashrc に http_proxy 等の環境変数を設定し、コンソールを再起動する。 6) 必要であれば sudo をパスワード無しで利用できるように設定する。 次のコマンドを実行し、 $ sudo -s # EDITOR=vi visudo 最終行に次の行を追加する。( username の部分は WSL の利用ユーザに変更する。) username ALL=(root) NOPASSWD ALL ※ wsl のユーザは sudo グループに所属しているため、%sudo の行以降に設定を追加する必要があるようです。 ※ /etc/sudoers.d ディレクトリ配下にファイルを置く方法もあります。この方法を採る場合は、sudo -s で root になってから作業を行うと、visudo -c でエラーが発生した場合に対処できると思います。 https //qiita.com/buchyanS/items/d240ea7e883bea734718 https //hnakamur.github.io/blog/2012/05/04/use-slash-etc-slash-sudoers-dot-d-slash/ 7) Ubuntu のアップデートおよび設定を行う。 $ sudo -E apt update $ sudo -E apt upgrade ※ プロキシが必要な環境下では、apt や add-apt-repository 実行時の sudo に -E オプションを付けて http* 環境変数を引き継ぐようにしてください。 http //qiita.com/aKenjiKato/items/18f9b8553f8ad4117d79 また、locale を変更する。 $ sudo -E apt install language-pack-ja language-pack-gnome-ja $ sudo update-locale LANG=ja_JP.UTF-8 必要であれば、日本語マニュアルをインストールする。 $ sudo -E apt install manpages-ja manpages-ja-dev さらに、タイムゾーンを JST にする。 $ sudo dpkg-reconfigure tzdata 8) Emacs 等をインストールする。 $ sudo -E apt install emacs emacs-el $ sudo -E apt install cmigemo ※ Ubuntu-22.04 では emacs-27 がインストールされます。emacs-28 をインストールしたい場合には、以下を実行してください。 $ sudo -E apt remove emacs emacs-el $ sudo -E apt autoremove $ sudo -E add-apt-repository ppa kelleyk/emacs $ sudo -E apt update $ sudo -E apt install emacs28 emacs28-el $ sudo -E apt install cmigemo 9) x11-xserver-utils パッケージをインストールする。 $ sudo -E apt install x11-xserver-utils 10) ログイン時の設定を行う。 ~/.bash_profile に次の設定を行う。 if which tasklist.exe /dev/null ! tasklist.exe | grep -q '^GWSL_vcxsrv'; then ( cmd.exe /c GWSL.exe /dev/null 2 1 sleep 3 if uname -v | grep -q 'Microsoft'; then export DISPLAY= 0 else export DISPLAY=$(ip route | awk '/^default/ {print $3; exit}') 0 xhost + $(ip -4 a show eth0 | grep -oP '(? =inet\s)\d+(\.\d+){3}') fi # access control を enabled にする xhost - ) fi [ -r ~/.bashrc ] source ~/.bashrc ※ 上記の設定は、22) で紹介している次の設定の wslemacs-start.exe を利用することにより、GWSL.exe を自動起動することを想定しています。 WSL の emacsclient を Windows から利用するための設定 ※ GWSL の内部から起動されている VcXsrv には、-noprimary オプションを付ける必要があります。VcXsrv のオプションを指定するには、GWSLアイコンの右クリック - XServer Profiles - Add A Profile で新しい Custom Profile を作成してください。設定後、メニューに追加された Custom profile を選択して有効とする必要があります。また、GWSL を一度終了し、wslemacs-start.exe を再起動するなどして上記のスクリプトを実行することで、X Window Server のセキュリティの設定が行われるようにしてください。なお、設定するオプションには次の値をお勧めします。 -multiwindow -clipboard -noprimary -wgl ※ VcXsrv のオプションは次のページを参照してください。 https //gist.github.com/ctaggart/68ead4d0d942b240061086f4ba587f5f ※ GWSL のメニューから、DPI Scaling Mode を選択することができます。初期値は「Linux」となっているようですが、私はリモートデスクトップ利用時に DPI の問題が発生したため、「Windows」に変更して利用しています。 ※ GWSL に X クライアントから接続できない場合は、次の対応をお試しください。 1. 「コントロールパネル」- 「システムとセキュリティ」- 「Windows Defender ファイアウォールによる PC の保護」を開き、メニュから「詳細設定」をクリックする 2. 「受信の規則」をクリックし、「GWSL VcXsrv windows xserver」と「GWSL PulseAudio server」の行があれば、全て削除する 3. Windows の GWSL アプリを起動する(既に起動していれば、再起動する) 4. VcXsrv のファイアウォールの通信許可設定ダイアログ画面が開くので、「パブリックネットワーク」のチェックボックスにチェックを入れ、通信を許可する また、~/.bashrc に次の設定を追加する。 if [ "$INSIDE_EMACS" ]; then TERM=eterm-color fi umask 022 if uname -v | grep -q 'Microsoft'; then export DISPLAY= 0 else export DISPLAY=$(ip route | awk '/^default/ {print $3; exit}') 0 fi unset LIBGL_ALWAYS_INDIRECT ※ LIBGL_ALWAYS_INDIRECT の設定は unset にしました。VcXsrv(GWSL の中で利用)の -wgl オプションとの組み合わせで、mesa の glxgears が動くことを確認しています。(ネットには、VcXsrv のオプションを -nowgl とすべきとの情報が多くありますが、-wgl で動いたので良しとしました。)次のページに関連する情報があります。 https //x.cygwin.com/docs/ug/using-glx.html https //www.web-dev-qa-db-ja.com/ja/xorg/libglalwaysindirect-1%E3%81%AF%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%E4%BD%95%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/957258497/ ※ Ubuntu が提供する .bashrc には、初めの方に次の設定があり、bash がインターラクティブモードで起動したとき以外は以降が実行されないようになっています。.bashrc に設定を追記する場合は、追記する場所にご留意ください。 # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac 11) 次のサイトから Migu 1M フォントをダウンロードして、ttf ファイルを ~/.local/share/fonts ディレクトリ配下にコピーする。(fonts ディレクトリ配下に、サブディレクトリを作って置いても大丈夫です。) http //mix-mplus-ipa.osdn.jp/migu/ ※ 生成が必要ですが Ricty 系もお勧めです。 本設定では使いませんが、Windows のフォントも WSL で使いたければ次のコマンドを実行する。 $ ln -s /mnt/c/Windows/Fonts ~/.local/share/fonts/windows 最後に次のコマンドを実行する。 $ fc-cache -fv 12) ~/.emacs.d/init.el 等に次のとおりのフォントの設定を行う。 ;; デフォルト フォント (set-face-attribute 'default nil family "Migu 1M" height 120) ;; プロポーショナル フォント (set-face-attribute 'variable-pitch nil family "Migu 1M" height 120) ;; 等幅フォント (set-face-attribute 'fixed-pitch nil family "Migu 1M" height 120) ;; ツールチップ表示フォント (set-face-attribute 'tooltip nil family "Migu 1M" height 90) ※ この設定は gnupack の init.el にある設定を転記したものです。 13) さらに ~/.emacs.d/init.el 等に次の設定を行う。 <色の設定> ;; 色を設定する (add-to-list 'default-frame-alist '(foreground-color . "white")) (add-to-list 'default-frame-alist '(background-color . "black")) <フレームの高さを補正する設定> (defun reset-frame-parameter (frame) (sleep-for 0.1) (set-frame-parameter frame 'height 32)) (add-hook 'after-make-frame-functions #'reset-frame-parameter) <coding-system の設定> (prefer-coding-system 'utf-8-unix) ;; プロセスが出力する文字コードを判定して、process-coding-system の DECODING の設定値を決定する (setq default-process-coding-system '(undecided-dos . utf-8-unix)) ※ 設定値の car を "undecided-dos" にしておくと、Windows コマンドの出力にも柔軟に対応できます。関連して 29) の説明も参照してください。 <shell の設定> (setq shell-file-name "/bin/bash") (setq shell-command-switch "-c") (setq explicit-shell-file-name shell-file-name) <migemo の設定> (setq migemo-command "cmigemo") (setq migemo-options '("-q" "--emacs")) (setq migemo-dictionary "/usr/share/cmigemo/utf-8/migemo-dict") (setq migemo-user-dictionary nil) (setq migemo-regex-dictionary nil) (setq migemo-coding-system 'utf-8-unix) (load-library "migemo") (migemo-init) 14) WSL のコンソールを再起動してから Emacs を起動し、X Window サーバ上に表示することを確認する。 15) 次を参考に emacs-mozc の設定を行う。 emacs-mozc を動かすための設定(WSL 設定編) ※ 以降はオプションです。 20) さらに次の設定を行う。これで、いろいろな操作が helm を通してできるようになる。 helm を使うための設定 21) さらに次の設定を行う。これで、find-file コマンドなどで Windows パスや UNC パスを直接利用可能となる。 Windowsパス と UNCパス を使えるようにするための設定(WSL 設定編) ※ この設定は、以降の 22) と 23) を使うために必要となります。 22) さらに次の設定を行う。これで、Windows 側から emacsclient が利用可能となる。 WSL の emacsclient を Windows から利用するための設定 23) さらに次の設定を行う。これで、dired で Windows ショートカットがシンボリックリンクのように利用可能となる。 Windows ショートカットを dired と連携して使うための設定 24) さらに次の設定を行う。これで、dired で ディレクトリのシンボリックリンクを実体のパスで開くことができるようになる。 dired でディレクトリのシンボリックリンクを実体のパスで開くための設定 ※ (setq-default find-file-visit-truename t) の設定を行っていない場合に意味のある設定となります。 25) さらに次の設定を行う。これで、dired で DrvFs ファイルシステム上に NTFS シンボリックリンクを作成できるようになる。また、Windows ショートカットも作成可能となる。 WSL で NTFS シンボリックリンクや Windows ショートカットを作成するための設定 ※ Windows ショートカットはファイルシステムに依存していないリンクファイルですので、ハンドリングが容易です。VolFs の他、tramp の接続先にも複写することができます。私は、DrvFs 上に置くリンクはできるだけショートカットを利用するようにしており、23) の設定をすることで dired から利用しています。 26) さらに次の設定を行う。これで、dired が Windows のファイラーのように利用できるようになる。 WSL で cygstart 的コマンドを使うための設定 dired を OS と連携して使うための設定 ※ こちらの設定もお勧めです。 singleton な動きをする cygstart 的コマンドを使うための設定 (WSL版) ※ 次の設定も行うと、Emacs で表示している URL を Windows のブラウザで開くことができます。 (require 'browse-url) (setq browse-url-browser-function 'browse-url-generic) (setq browse-url-generic-program "wslstart")) (global-set-key (kbd "C-c u") 'browse-url-at-point) 27) さらに次の設定を行う。これで、tramp の高速化が図られ、接続先の shell から Xクライアントが起動できるようになる。上記の「dired を OS と連携して使うための設定」と組み合わせると、xdg-open などを使ってリモートにあるドキュメント等が開けるようになる。(このページの最初の方にある画像の二番目のものは、この機能を使って表示したものです。) tramp を tramp-method “scp” で使うための設定 tramp による接続先で Xクライアント を実行するための設定 28) さらに次の設定を行う。これで、tramp 接続環境でも動作する shell-pop のような環境を利用できるようになる。 shellバッファ を簡単にポップアップするための設定 29) さらに次の設定を行う。これで、shell-mode で Windows のコマンドを発行しても、漢字が文字化けしなくなる。 shell-mode で複数の漢字コードを混在して利用できるようにするための設定 30) さらに次の設定を行う。これで Emacs のバッファの内容を Windows のテキストエディタを通して印刷できるようになる。 Notepad を使って印刷するための設定(WSL 設定編) 31) さらに次の設定を行う。これで Emacs から VSCode でファイルを開けるようになる。 WSL の Emacs から VSCode でファイルを開くための設定 32) さらに次の設定を行う。これで VSCode で開いているファイルを Emacs で開けるようになる。 VSCode で開いているファイルを WSL の Emacs で開くための設定 33) さらに次の「Emacs 全般で利用できる設定」や「説明ページを作るまでもない設定の紹介」の箇所にあるものから必要なものがあれば設定を行う。 https //w.atwiki.jp/ntemacs/ お勧めの設定は以下の辺りとなります。 helm から comint の入力履歴を検索するための設定 helm で peco もどきのコマンドを使うための設定 locate を使うための設定(WSL 設定編) ediff をスマートに使うための設定 elscreen を使うための設定 whitespace を使うための設定 cua-mode を使うための設定 multiple-cursors を使うための設定 google-translate を使いやすくするための設定 沢山開いているバッファをできるだけ一度に閉じるための設定 (global-set-key (kbd "M-c") (lambda () (interactive) (desktop-clear) (tramp-cleanup-all-connections))) カレントバッファを一発で閉じるための設定 (global-set-key (kbd "M-k") (lambda () (interactive) (kill-buffer (buffer-name)))) ウィンドウの右端で改行をするかどうかを切り替えるための設定 (global-set-key (kbd "C-c C- return ") 'toggle-truncate-lines) 横スクロールするための設定(キー設定が逆の感覚の方もいるかも) (global-set-key (kbd "C-,") 'scroll-left) ; のキー (global-set-key (kbd "C-.") 'scroll-right) ; のキー C-h を Backspace として使うための設定 https //qiita.com/takc923/items/e279f223dbb4040b1157 (define-key key-translation-map (kbd "C-h") (kbd " DEL ")) help の機能は、f1 キーで利用することができます。 34) 最後に次の設定を行う。これで Windows 全体を Emacsキーバインドで操作できるようになる。 Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) 変更履歴 2017/05/23 このページを作成した。 2017/06/12 Emacs 起動時のエラーを抑制するため、LIBGL_ALWAYS_INDIRECT 環境変数の設定を追加した。 2017/07/04 色の設定を追加した。 2017/08/21 locale の設定を追加しました。 2017/08/21 Emacs-25 のインストールする方法を追記した。 2017/09/04 「w32-symlinks を dired と連携して使うための設定」を見直しバージョン「Windows ショートカットを dired と連携して使うための設定」のリンクに置き換えた。 2017/11/01 オプションの設定に「 WSL で NTFS シンボリックリンクを作成するための設定」を追加した。 2017/11/04 パスの途中に NTFS シンボリックリンクを含むファイルを削除しようとするとフリーズする問題の対策を追加した。 2017/11/06 Emacs を起動するスクリプトを追加し、VcXsrv が起動していない場合は事前に起動するように対応した。 2017/11/11 emacsclient を使うための説明を追記した。 2018/03/09 21) の設定を全面的に見直し、UNCパスの利用にも対応した。 2018/03/14 25) の設定を見直し、Windows ショートカットの作成にも対応した。 2018/03/15 29) に設定を新たに追加した。 2018/03/16 22) の説明の内容を整理した。 2018/03/20 30) の設定を wslstart を使った方法に見直した。 2018/03/21 26) の設定に browse-url を使うための設定を追記した。 2018/03/22 VcXsrv 上に立ち上げた Emacs でリージョンの選択をすると、選択しただけでリージョンの内容が Windows のクリップボードに登録される症状が発生していたのを対策した。 2018/03/22 21) の設定で、コンピュータ名が IPアドレスの UNC パスを mount した際でも正常に動作するように対応した。 2018/03/23 wsl コマンドを使っている設定について、高速化対策を行った。 2018/04/11 10) に日本語キーボードを使う場合に必要そうな設定とそのコメントを追記した。 2018/04/12 33) にお勧めの設定のリンクを追加した。 2018/05/11 8) に tramp 利用時の不具合についての対応策について追記した。 2018/05/11 7) にタイムゾーンを JST にする説明を追加した。 2018/06/19 8) に Emacs-26系で動作させるための説明を追記した。 2018/06/26 11) のフォントを置くディレクトリを、~/.fonts ディレクトリから ~/.local/share/fonts ディレクトリに変更した。 2018/07/30 13) に最低限必要な coding-system の設定を追記した。 2018/08/19 13) に cmigemo の設定を追記した。 2018/11/11 6) に sudo をパスワード無しで利用するための設定の説明を追加した。 2018/11/21 1) にアクティブウインドウのタイトルバーの色を変更するための設定の説明を追加しました。 2019/08/09 13) に「<フレームの高さを補正する設定>」の説明を追加した。 (function(i,s,o,g,r,a,m){i[ GoogleAnalyticsObject ]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document, script , //www.google-analytics.com/analytics.js , ga ); ga( create , UA-40267130-1 , atwiki.jp ); ga( send , pageview );
https://w.atwiki.jp/ntemacs/pages/82.html
なぜ、Emacs を使っているか? 逆説的かもしれませんが、Emacsキーバインドが使えるカスタマイズブルなエディタだから です。 私は Windows を使っています。Windows は次の設定により、OS のあらゆる操作を Emacsキーバインドにすることができます。 Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) また、cygstart on Cygwin や wslstart on WSL と次の設定を組み合わせることにより、Emacs の Dired を Windows ドキュメントを開くファイラーとして利用することができます。 dired を OS と連携して使うための設定 Dired から 開いた Windows ドキュメントは、先の設定により Emacsキーバインドで操作できますので、Windows アプリケーションソフトがあたかも Emacs のプラグインソフトウェアであるかのような感覚で利用できます。 この操作感は、一度慣れてしまうと離れられないものです。そしてこの操作感を実現できているのは、モーダレスな Emacsキーバインドの存在 によるものだと思っています。 Emacs を Atom や VSCode などの他のエディタと比較する記事も見かけますが、Emacsキーバインドで使えるエディタであれば状況に応じて使い分ければ良いと思っています。次の設定をすれば、VSCode との相互利用も容易となります。 WSL の Emacs から VSCode でファイルを開くための設定 VSCode で開いているファイルを WSL の Emacs で開くための設定 いずれにせよ、私にとっては Emacsキーバインドで PC の操作を統一できることがとても重要で、その操作の基軸となるソフトウェアとして Emacs を選択して使っている。これが Emacs を使っている理由となっています。 ちなみに、私は vim も時々使います。顧客環境にあるサーバの設定変更などで必要になるときがあるためです。当然、カスタマイズしていない状態の vim を使うことになりますし、vim はそのような状態で使えれば良いと思っています。 一方、自分の PC で vim 使うことはほとんどありません。先に記載したようにすべてのアプリケーションソフトの操作性を統一したいからです。自分の PC からサーバの作業を行う場合でも、大抵は ssh の接続性があるので、Emacs の tramp を使って行っています。 vim の前身の vi は 5年間くらい使っていましたので、vim の優れた操作性はある程度は理解しているつもりです。しかし、Word や Excel など Windows アプリケーションソフトでも同じ操作性を!となると、Emacsキーバインドのようなモーダレスなキーバインドに統一する必要があります。そこで、そのようなキーバインドを持つエディタとして Emacs を選択し、OS のキーバインドを Keyhac の設定で Emacs-like にして使っている。これが現在の PC の利用環境となっています。
https://w.atwiki.jp/ntemacs/pages/78.html
ここは、次のページの【お知らせ】をまとめているページです。 Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) 【特に重要なお知らせ】 2020/04/23 更新 use_emacs_ime_mode 変数の設定により、Emacs日本語入力モードを使うかどうかを指定できるようにしました。Emacs日本語入力モードは、IME が ON の時に文字(英数字かスペースを除く特殊文字)を入力すると起動するモードです。(モードに入ると、▲のマークが表示されます。) Emacs日本語入力モードになると、Emacsキーバインドとして利用できるキーが以下のキーのみに限定され、その他のキーは Windows にそのまま渡されるようになります。このため、以下のキー以外は IME のショートカットキーとして利用することができるようになります。 ⇒ (2020/05/10 追記)emacs_ime_mode_key 変数の設定により、IME ショートカットキーの置き換えができるようになりました。 Emacs日本語入力モードで使える Emacsキーバインドキー ・C-[ ・C-b、C-f ・C-p、C-n ・C-a、C-e ・C-h ・C-d ・C-m ・C-g ・scroll_key 変数で指定したスクロールキー Emacs日本語入力モードは、以下の操作で終了します。 ・Enter、C-m または C-g が押された場合 ・[半角/全角] キー、A-` キーが押された場合 ・BS、C-h 押下直後に toggle_input_method_key 変数や set_input_method_key 変数の disable で指定したキーが押された場合(間違って日本語入力をしてしまった時のキー操作を想定しての対策) 利用する上での注意点としては、日本語入力を上記に記載している「Emacs日本語入力モードを終了する操作」(Enter や C-g などの押下)で終えないと、Emacs日本語入力モードが終了しないことです。例えば、文字を入力し BSキーで入力した文字を消したり Esc でキャンセルしたりすると日本語入力中ではなくなりますが Emacs日本語入力モードは終了していません。この場合は、C-g を押下することで明示的に Emacs日本語入力モードを終了させる必要があります。(BS、C-h 押下直後に toggle_input_method_key 変数や set_input_method_key 変数の disable で指定したキーが押された場合についても、Emacs日本語入力モードを終了させるようにしています。半角文字を入力するつもりで間違って日本語入力をしてしまった場合、BS、C-h で入力した文字を削除した後に IME を OFF にする操作をすることが想定されるため、その対策です。) 逆に、変換候補表示中に C-g を押下すると、日本語入力が終了していな状態でも Emacs日本語入力モードが終了してしまいます。変換候補表示をキャンセルする場合には Esc を使うようにし、C-g と使い分けて利用するようにしてください。 これで、Windows のキーを直接的に入力する方法は以下の5とおりとなっています。 本設定で置き換えしていないキーを入力する。(置き換えしていないので、入力したキーがそのまま Windows に渡される。C-c など。) side_of_ctrl_key 変数や side_of_alt_key 変数で設定した側でない Ctrlキーや Altキーと組み合せたキーを入力する。 C-q を入力した後にキーを入力する。(C-q の後に入力したキーが Windows に入力される。) Emacs日本語入力モード時に、C-[、C-b、C-f、C-p、C-n、C-a、C-e、C-h、C-d、C-m、C-g、scroll_key 変数で指定したスクロールキー、toggle_emacs_ime_mode_key 変数で指定したキー以外のキーを入力する。 2020/02/14 追記 Keyhac を利用する場合のメリットを考えてみました。 ポータブルであること(OS へのインストールが不要で、ソフトおよび設定を容易に持ち運びできる。Keyhac を動かすには「Visual Studio 2015 の Visual C++ 再頒布可能パッケージ 」のインストールが必要となっていますが、インストールされるものは C \Windows\SysWOW64\msvcp140.dll ですので、この dll を keyhac.exe と同じフォルダに置けば、「Visual Studio 2015 の Visual C++ 再頒布可能パッケージ 」をインストールしていない PC でも Keyhac を動かすことができるようになります。) keyhac.exe を起動している時のみ、キーバインドの設定が有効になること どこでも同じ環境を容易に構築でき、そして設定を簡単に無効にできる(ソフトのアンインストールが不要な)のはとても便利かと思います。 2019/12/17 追記 redo(undo の undo)を行うためには、Emacs と同様に C-g を入力した後に undo を実行します。ただし、notepad.exe の様に redo のキーバインド(C-y)を持たないアプリケーションソフトでは動作しません。 2016/10/12 追記 IME を Google 日本語入力 とし、プロパティの「キー設定」を「ことえり」にすると、C-i(文節を縮める)、C-o(文節を伸ばす)、C-j(ひらがなに表示切替)、C-k(全角カタカナに表示切替)、C-l(全角英数に表示切替)、C-;(半角に表示切替)、C- /C- (半角英数に表示切替)が近い位置(io と jkl; or jkl; はそれぞれ横並びの位置)のキーに設定され、Emacs日本語入力モードで有効としているキーとも被らない設定となるので、具合が良いです。(被らない設定となるのは、「ことえり」が Emacsキーバインドをベースとしたキー設定となっており、Emacs日本語入力モードで有効としているキーが 「ことえり」でも同じ目的のキーの設定となっているためです。またこのことは、本設定により Emacsキーバインドを有効としていないアプリケーションソフトで日本語入力する場合でも Emacsキーバインドを使えるということにもなります。) https //www.google.co.jp/ime/ http //little-beans.net/howto/google-jinput-win10/ ⇒ (2020/05/10 追記)emacs_ime_mode_key 変数の追加により、Google 日本語入力 のプロパティを「MS-IME」にしていても「ことえり」のキーバインドが利用できるようになりました。また、Micorosoft IME でも同様に利用できます。 【その他のお知らせ】 2021/04/11 追記 次の issue の報告の対策を行いました。 https //github.com/smzht/fakeymacs/issues/9 2021/04/06 追記 次の の issue(バグ)の対応と共に、VSCode 用の機能の実装を全面的に見直しました。 https //github.com/smzht/fakeymacs/issues/8 2020/11/19 追記 VSCode 向けに Ctl-x C-b(list-buffers)の機能をサポートしました。 2020/11/02 追記 利用している IME を設定する方法を見直しました。_config_personal.py 中の設定も変更となっていますので、config_personal.py を利用されている方は対応をお願いします。 https //github.com/smzht/fakeymacs/commit/f9f1e820486e837348cae9109f566bc1e26ca647 2020/10/15 追記 config.py の全面的な構成見直しにより、config_light.py のサポートを中止しました。config_light.py を利用されている方が居りましたら、ご了承願います。 2020/10/10 追記 リストウィンドウのリストを指定する変数名の見直しを行いました。cblister が clipboardList_listers に、lclister が lancherList_listers に変更となっています。_config_personal.py 中の設定も変更となっていますので、config_personal.py を利用されている方は対応をお願いします。 2020/10/10 追記 ほとんどの方が利用しないであろう config.py 内のオプション機能をオプション用の config ファイルに切り出し、config_personal.py の中から間接的に呼び出すように見直しました。また、「オプション機能」を「拡張機能」と呼ぶように見直しました。 2020/10/04 追記 VSCode では C-S- をモディファイアキーとして使うキーバインドが多く定義されています。このことから、定義が被るキーバインドを利用する Emacsシフトモードのサポートを中止することとしました。あまり利用されていない機能だと思っていますが、もし利用されている方が居りましたら、ご了承ください。 2020/10/01 追記 本ページで akinosign というソフトを紹介していましたが、このソフトを起動していると複雑な構成の Excel ファイルで処理が重くなるなど、問題が発生することが分かりました。ついては、本ページで akinosign 紹介することは取りやめることとしました。 2020/09/20 追記 VSCode の対応を強化しました。強化ポイントは次のページの説明を参照してください。この対応により、Code.exe の Emacs キーバインドが有効となるよう初期設定を変更しています。 https //github.com/smzht/fakeymacs#vscode-%E3%81%AE%E5%BC%B7%E5%8C%96%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88 2020/09/15 追記 toggle_emacs_keybind_key 変数の設定(初期値:C-S-Space)により、emacs キーバインドを利用する設定をしたアプリケーションソフトの Emacs キーバインドの利用を切り替えることができるようにしました。Emacs キーバインドを利用するアプリケーションでかつフォーカスが当たっているアプリケーションソフトに対して切り替えが機能します。また、Emacs キーバインドを OFF にしても、IME の切り替えは img_target に登録したアプリケーションソフトと同様に機能するようにしています。なお、emacs_target_class 変数に指定したクラス(初期値:Edit)に該当するアプリケーションソフト(NotePad など)は、Emacs キーバインドを切り替えの対象となりませんのでご留意ください。 2020/08/18 追記 Fakeymac で個人設定用ファイルを利用できるようにしました。詳しくは、以下のリポジトリにある _config_personal.py の最初のコメントを参照してください。 https //github.com/smzht/fakeymacs 2020/08/15 追記 skip_settings_key 変数を設定することにより、キーマップ毎にキー設定をスキップするキーを指定できるようにしました。現在、個人の設定を外部ファイルに外出しして管理できるようにする機能を追加しており、その機能を実現するための1機能となります。個人の設定を外部ファイルに外出しして管理できるようにする機能は develop branch で開発していますので、興味の有る方は覗いてみてください。 https //github.com/smzht/fakeymacs/issues/2 https //github.com/smzht/fakeymacs/tree/develop ⇒(2020/08/18 追記)develop branch は master branch に merge されました。 2020/08/11 追記 emacs_exclusion_key 変数を設定することにより、Emacs のキーバインドにするアプリケーションソフトで Emacs キーバインドから除外するキーを指定できるようにしました。例えば、C-t は Emacs キーバーインドで reconversion(再変換)の機能を割り当てていますが、ブラウザを利用しているときには「新しいタブを開く」機能のショートカットキーとして利用したいと思う方が多く居ると思います。このようにアプリケーションソフト側のショートカットキーを優先したい場合に利用することができます。この設定を行わなくても、左右のモディファイアキーを使い分けることで Windows 側のショートカットキーを入力することも可能ですが、頻繁に利用するキーについては Emacs キーバインドで使うモディファイアキーとの組み合わせで利用できるようになり便利かと思います。 (もう少し具体的な説明をすると、chrome.exe には Emacs のキーバインドから除外するキーとして C-l、C-t を割り当てています。この設定により chrome.exe では、C-l を「アドレスバーへの移動」、C-t を「新しいタブを開く」として使えるようになります。これに Emacs キーバインドとして設定してある M-k(A-k)の「開いているタブを閉じる」や chrome.exe のショートカットキーである C-Tab/C-S-Tab の「タブの切り替え」などを組み合わせると、ブラウザを容易に操作できるようになると思います。) 2020/06/03 追記 新しい Microsoft IME では、リージョンを選択した状態で Space キーを押下すると「再変換」が働きます。このときに日本語入力モードを使う設定にしていれば、日本語入力モードに移行するようにしました。 2020/05/29 追記 「キー割り当て変更ユーティリティを統合した「PowerToys v0.18.0」」。Keyboard Manager が統合されています。PowerToys Run もいい感じのデザインです。 https //pc.watch.impress.co.jp/docs/news/1253450.html ※ KeySwap や Change Key でのレジストリの設定を Keyboard Manager に移行することを試みましたが、Keyboard Manager は Keyhac との共存はできないツールのようでしたので、元に戻しました。Keyboard Manager はレジストリ設定型のアプリではなく、Keyhac や AutoHotKey と同様の常駐型のアプリのようです。 2020/05/28 追記 仮想デスクトップを操作する SylphyHorn というソフトを見つけました。Microsoft Store からインストールできます。仮想デスクトップは、OS 標準機能でもキーボードショートカットによる移動はできますが、ウインドウを仮想デスクトップ間で移動するキーボードショートカットはありません。このソフトはこの機能をサポートしています。 https //forest.watch.impress.co.jp/docs/news/1136124.html Fakeymacs では、仮想デスクトップの移動に Win+b と Win+f を割り当てています。(というか、今回見直しを行いました。)また、アクティブウィンドウを仮想デスクトップ間で移動するためのキーを設定する変数として、window_movement_key_for_desktops 変数を追加しました。SylphyHorn をインストールし、window_movement_key_for_desktops 変数を設定することにより、仮想テスクトップの操作をキーボードのみで行えるようになります。(window_movement_key_for_desktops 変数の設定例には、Win+p、Win-n を設定しています。Win+p は「プレゼンテーション表示モード選択画面」を表示するためのキーなのですが、Ctrl+q Win+p で機能を呼ぶことができます。RWin キーがあれば、RWin+p でも対応可能と思います。) なお、SylphyHorn には仮想デスクトップをループさせる機能があります。この機能は(何故か)背景を変更する機能を ON にすると利用できるようになるのですが、同時に仮想デスクトップ切替時にウィンドウのフォーカスが正しく切り替わらない(タスクバーのアイコンが点滅する)状況が発生するようになるため、利用は見合わせています。また、仮想デスクトップの切り替えを通知する機能がありますが、この機能は処理が重いので代わりにトレイアイコンにデスクトップ番号を表示する機能を使っています。これらの SylphyHorn の機能を有効するには、設定画面を閉じる必要があるようです。 さらに、仮想デスクトップのアニメーションを止めたい場合は、次のページを参照してください。 http //otsuka.hatenablog.com/entry/2016/08/05/214256 また、すべての仮想デスクトップのウィンドウのアイコンをタスクバーに表示させたい場合には、次のページを参照してください。 https //pc-karuma.net/windows-10-virtual-desktop-show-all-window-app/ 2020/05/26 追記 ThinkPad トラックポイント キーボード II が国内で販売開始となりました。Fakeymacs と相性バッチリではないかと思います。 https //pc.watch.impress.co.jp/docs/column/ubiq/1254581.html https //www.lenovo.com/jp/ja/accessories-and-monitors/keyboards-and-mice/keyboards/KBD-BO-TrackPoint-KBD-US-Eng/p/4Y40X49493 https //www.lenovo.com/jp/ja/accessories-and-monitors/keyboards-and-mice/keyboards/KBD-BO-TrackPoint-KBD-Japanese/p/4Y40X49522 2020/05/24 追記 仮想デスクトップを移動するためのキーは、Windows キーと組合わせたキー設定にしないと、仮想デスクトップを移動したときにアクティブフォーカスの設定が正しく行われないことが分かりました。このことから、Fakeymacs で Windows キーを正式にサポートすることとし、desktop_switching_key 変数の初期値を Win キーを利用するものに変更しました。(併せて、window_movement_key 変数 の初期値も Win キーを使うものに見直しました。) 2020/05/23 追記 IME の「再変換」の機能は、[変換] キーだけでなく、Win+/ キーでも機能することが分かりました。Windows 10 ver 2004 では [無変換] キー、[変換] キーのキーの機能を容易に変更できるようになるため、この影響を受けないように IME の「再変換」の機能を Win+/ キーで動作するように見直ししました。 2020/05/10 追記 Windows 10 May 2020 Update では、Microsoft IME の機能改善が図られ、Google 日本語入力と遜色ない IME になっているようです。ただし、キーバインドを変更する「キー設定」の編集画面が見当たりません。そこで、IME のキーバインドを変更するための機能を追加してみました。初期値は、Microsoft IME で Google 日本語入力の「ことえり」のキーバインドが利用できるようにする設定 としています。emacs_ime_mode_key 変数で設定の追加や変更ができますので、お試しください。 2020/04/30 追記 「Windows 10 2020年春の新機能 日本語入力が楽になる!変換/無変換キーで日本語入力がオン/オフに」。Fakeymacs では、set_input_method 変数の設定により、同様の機能をサポートしました。Windows 10 1909 までのバージョンでも IME の設定変更なくこの機能を利用できます。。 https //pcmanabu.com/windows10-ime/ 2020/04/26 追記 Keyhac のバージョン 1.82 がリリースされました。ワンショットモディファイアの機能に不具合の修正が入りましたので、Alt キーによる IME 切替え機能を利用される方は Keyhac のバージョンアップをお願いします。 https //github.com/crftwr/keyhac/blob/master/doc/changes.txt 2020/04/26 追記 数引数の指定に Ctrl + 数字キーを使うかどうかを指定する変数を追加しました。初期値は無効(False)としています。 2020/04/26 追記 Alt + 数字キー列や Alt + Shift + 数字キー列によるファンクションキー入力機能を追加しました。F1 から F12 までを Alt + 数字キー列で、F13 から F24 までを Alt + Shift + 数字キー列で指定できます。初期値はどちらも無効(False)としています。この設定は global に機能します。 2020/04/23 追記 ワンショットモディファイアの機能を利用し、左右の Alt キーで IME を切替えられるようにする機能を追加しました。set_input_method_key 変数のコメントを見直すことで動作するようになります。US のキーボードを利用している場合にお試しください。 https //github.com/smzht/fakeymacs なお、次の設定も同じ操作性にできるように見直しました。 emacs-mozc を動かすための設定(Emacs 設定編) 2020/04/16 追記 PC を落とす時や再起動する時、Windows のデスクトップを選択(クリック)して C-x C-c を押下すると、操作を選択するダイアログが表示されます。地味に便利なのでお試しください。 2020/04/13 追記 「IME を無効にするキー」と「IME を有効にするキー」を設定できるようにし、set_input_method_key 変数で指定できるようしました。初期設定では、「無変換」キーと「変換」キーを割り当てています。C-o の設定はトグル動作となっていますが、設定の中のコメントを見直すことで変更可能です。お勧めは、C-o のトグル設定は残して C-j に英数への切替えを設定するものです。日本語への切替えが C-o によるトグル操作による切替えの他、C-j C-o での一発切替えが可能となります。 https //github.com/smzht/fakeymacs なお、次の設定も同じ操作性にできるように見直しました。 emacs-mozc を動かすための設定(Emacs 設定編) 2020/03/16 追記 Microsoft PowerPoint でも Word と同様の改行対策を行いました。 2020/03/13 追記 Microsoft Excel 2019 では、セル内の文字列の改行の扱い方が変更となりました。(Word と同様、改行を選択可能となった。)この対策を行いました。 2019/12/24 追記 Keyhac の動作にに必要な「Visual Studio 2015 の Visual C++ 再頒布可能パッケージ 」ですが、次のリンクに書かれているとおり複数のバージョンがあるようです。 https //caddiary.com/?p=1669 https //tyawanmushi.hatenablog.com/entry/Microsoft-Visual-C%2B%2B-Redistributable-Lists Keyhac のダウンロードページにあるリンクは古いものを指しているようでしたので、次のリンクの新しいもの(14.0.24215.1 2016/09/15)のインストールをお勧めします。(x86版 のインストールが必要です。) https //www.microsoft.com/ja-jp/download/details.aspx?id=53840 なお、「Visual Studio 2019 の Visual C++ 再頒布可能パッケージ 」では 2015 が統合されているとのことです。ですのでこちらをインストールする選択肢もあると思いますが、この辺になると良く分かりません。 https //support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads https //nln.jp/wp/archives/4782 2019/11/20 追記 Emacsシフトモードを利用していない場合、シフトキー+移動キーでリージョンの設定ができる機能をサポートしました。この対応で、windows_movement_key と desktop_switching_key の初期設定値を見直ししています。 <2019/11/24 追記> use_region_reset 変数を False にした場合の挙動を保証できなくなったので削除することとしました。(初期値は True だったので、ほとんどの方には影響は無いと思います。) 2019/07/21 追記 Emacs日本語入力モードを使っている場合に発生する、ウインドウ切り替わり直後の日本語入力時に文字が二重に入力されることがある問題の対策を行いました。この問題は、Windows 10 1903 から顕著に発生するようになったものです。 <2019/03/27 追記> 数引数を指定してキーボードマクロを再生した際の再生再現性を高めました(まだ完全ではありませんが..)。また、この対応で C-u C-x e(数引数付きのキーボードマクロの再生)を行った際に、再生文字列中に「e」や「え」が混入することがある問題も解決されたように思います。 <2019/03/27 追記> キーボードマクロの再生時に IME の状態に依存した動作とならないようにするため、キーボードマクロの記録と再生の開始時に IME を強制的に OFF にするようにしました。 <2019/01/31 追記> Emacs のキーバインドにするウィンドウのクラスネームを指定できるようにし、Edit クラスを設定しました。この対応で、not_emacs_target に指定しているアプリなどでも、ダイヤログボックスなどにあるテキストフィールドで Emacsキーバインドが使えるようになりました。 2018/06/01 追記 kill-buffer に Ctl-x k とは別に M-k も割り当てしました。プラウザのタブを削除する際などにお使いください。 2018/04/17 追記 本設定は python のクロージャの仕組みを利用しています。クロージャについては、次のページの説明が参考になると思います。 https //www.lifewithpython.com/2014/09/python-use-closures.html 2018/04/03 追記 Logicool のマウスをお使いの方で、SetPoint アプリによる設定でキーストロークの割当を行う場合には、Keyhac のフックを OFF にしてから割当をするようにしてください。ON のまま割当すると正しく動作しないようです。(この現象が分かるまでかなり嵌りました..。)他のソフトでも同様の状況が発生する可能性があると思います。 2018/02/23 追記 clipboard 監視の対象外とするアプリケーションソフトで copy / cut した場合でも、クリップボードの内容をクリップボードリストに登録するように対策しました。 2017/10/12 追記 window_switching_key を None に設定した場合(タスク切り替え画面の起動を A-Tab で行う場合)でも、タスク切り替え画面内で A-p、A-n キーによる画面移動を可能としました。 2017/06/22 追記 ちょっと邪道との思いはあったのですが、word_register_key 変数に設定したキーにより IME の「単語登録」プログラムが起動するように対応しました。「単語登録」プログラムの起動は、IME のショートカットキーの設定によっても対応できるのですが、mozc_emacs_helper.exe を使って NTEmacs 等の Emacs 上で日本語入力している際にはこの IME のショートカットキーが有効とならないため、Keyhac 側で対応することとしました。Keyhac 側で対応したことにより、以下の設定で動かす Emacs からでも利用することができます。 WSL で Emacs を使うための設定 キーの初期設定は、C-] とし、起動する「単語登録」プログラムは「Google 日本語入力」のものとしています。単語登録したい単語(文でも OK)を選択もしくはグリップボードにコピー(Emacs はこちらの対応が必要)してから C-] を押下することで、容易に単語登録ができるようになります。IME のショートカットキーを利用した方法ではないため、英数直接入力モードの場合でも単語登録を行うことができます。 設定の中で「単語登録」プログラムを「MS-IME」のものに変更することもできるようにしていますが、こちらは IME のショートカットキーから起動した場合と動きが異なり、選択した単語の初期表示が行われないようです。IME に「MS-IME」を使うということであれば、mozc_emacs_helper.exe を利用していないと思われますので、その際は IME のシートカットから「単語登録」プログラムを起動するように設定することをお勧めします。 なお、この機能が不要な場合は word_register_key 変数に None を設定してください。機能が無効となります。 2017/05/24 追記 間違った数引数の指定により発生するコマンドのリピートが止まらなくなる事故を防ぐため、コマンドのリピート回数の最大値を指定できるようにしました。初期値は 1024 にしています。 2017/05/16 追記 cmd.exe と powershell.exe についても、C-n、C-p、C-w、M-w、C-k、C-s、C-r 辺りのキー(C-s、C-r が使えるのは Powershell のみ)は利用できるように対応しました。但し、powershell.exe では起動直後に C-w や C-k で切り取りをした際や、以降でも行の最終カラムで C-k を入力した際などにエラーとなります。これは既知の問題のようでもあり対策できていません。(Keyhac を利用していない状態でも、C-a - C-x で再現します。)⇒ (2019/4/1 追記)Windows 10 1809 で試したところ、この問題は発生しなくなっていました。 https //github.com/lzybkr/PSReadLine/issues/509 なお、範囲選択(リージョン指定)ができない場合は、プロパティの設定にある「テキスト選択を拡張する」が OFF になっている可能性があります。確認ください。 2017/05/16 追記 not_clipboard_target 変数で、clipboard 監視の対象外とするアプリケーションソフトを指定できるように対応しました。新しめのバージョンの Excel を使っているとクリップボードに関連する競合エラーが発生するため、初期設定では Excel を登録しています。 2017/04/12 追記 firefox で Googleカレンダーを使う際、ポップアップした予定入力画面で日本語入力をし Enter で変換を確定すると、ポップアップしている画面が閉じてしまうようです。Chrome では発生しません。影響を及ぼしている設定箇所は分かったのですが、その設定箇所を無効とはしたくないため、設定の変更は行わないこととします。日本語入力の変換の確定を C-m で行えばこの現象を回避できますので、この方法でご利用ください。 2017/03/16 追記 Microsoft Excel や Word などの Office系アプリを使ってコピー&ペーストをした際、「Ctrl」と表示される「貼り付けオプション」ボタンが表示される場合があります。これが Emacsキーバインドで利用している Ctrl キーの押下を検知して、想定外の動きをしてしまうようです。今のところ本設定での対策は難しいと思っておりますので(Ctrl をモディファイアキーとして使わない方法は考えられますが、影響が大きい)、以下のページで紹介している「貼り付けオプション」ボタンを消す対応で回避してください。 http //ciao.aoten.jp/ciao/2015/03/word-54e8.html 2017/03/10 追記 本設定をカスタマイズして Mac版を公開された方がいらっしゃいます。私は Mac を使わないので使用感が分からないのですが、Mac をお使いの方は是非お試しください。 https //github.com/hiroxy/keyhac-config 2015/11/09 追記 redo をサポートしてみました。undo キー(C-x u や C-/)で undo している時に、C-g を押下すると 以降の動作が redo に切り替わります。その後は、C-g を押すごとに undo と redo をトグルする動きとなります。 なお、redo は Windows に C-y キーを発行することで実現しているのですが、アプリケーションソフトによっては、C-y をサポートしていません。(Notepad など。)このため、このようなソフトで redo に移行すると、undo キーを押してもだんまりとなる場合があります。この場合は再度 C-g を押すことで復帰してください。(undo キー と C-g 以外のキーを入力することでも、undo のモードに復帰します。)また、アプリケーションソフト単位で redo の動作を無効にすることができます。undo 関数の中で行っていますので、必要であれば設定を追加してください。(初期設定では、Notepad を登録しています。) 2015/10/31 追記 Keyhac のクリップボードリスト画面で migemo 検索を可能とするためには、辞書ファイルを登録する必要があります。次のページの説明が参考となります。(dictフォルダの中をすべてコピーするのではなく、dict/utf-8 の中のファイルをコピーするところがポイントです。また、migemo 検索するには、検索文字列の一文字目を大文字で指定する必要があります。) http //blog.livedoor.jp/ryman_trainee/archives/1042315792.html 2014/10/17 追記 検索の繰り返し機能をサポートしました。C-g 等のコマンド入力で、検索のやり直しが可能です。検索の繰り返しは F3キー で行っているのですが、F3キーをサポートしていないアプリがあるため、繰り返し検索時にダンマリとなることがあります。その際は、C-g を押下後、C-s や C-r で検索を再開し、Windows の割当キー(Enter 等)を使って検索の繰り返しを行ってください。
https://w.atwiki.jp/ntemacs/pages/77.html
変更履歴 2012/11/02 C-o をIMEの切替の設定とした。 2012/11/02 C-k を C-u と連携可能とした。 2012/11/05 C-u の対応を強化した。 2012/11/06 マークの方法を見直した。 2012/11/26 キーボードマクロに対応した。 2012/11/30 Eclipse の ClassName が間違っていたのを訂正した。( SWT_Windows0 - SWT_Window0 ) 2013/07/20 keyhac ver 1.60(Python3系)でも動くスクリプトに修正した。 2013/07/25 C-x o ( other_window : 一つ前にフォーカスがあったウインドウに移動する)が正常に機能するように対策した。 2013/07/28 無効とするアプリケーションソフトに xyzzy を追加した。 2013/07/28 input method の切り替えだけができる設定の仕組みを追加した。 2013/08/19 キーバインドを設定するアプリケーションソフトの指定方法にプロセス名も使えるように設定を追加した。 2013/08/19 Sakura Editor のみ C-l に対応した。 2014/04/22 除外するアプリケーションソフトの指定方法等を processname で指定する方法にまとめた。 2014/06/02 前置引数付きで行削除した場合の動作に不具合があったので修正した。また、数点の改善を行った。 2014/09/17 repeat関数内にreset関数のコードとダブる部分があったので改善した。(機能の変更はない) 2014/09/30 「Emacs で指定したファイルを Eclipse で開くための設定」と連携するため、eclipse.exe の除外設定を解除(コメント化)した。 2014/10/07 ワードを操作するコマンドを追加した。 2014/10/14 キーボードマクロの実行処理に不具合(デグレード)が発生していたので修正した。 2014/10/15 左の Ctrlキー と Altキー のみを Emacs用のキー として使う様にし、左のキーは Windows のショートカットキー用として使えるようにした。 2014/10/15 仮想キーコードの指定方法を10進から16進に変更し、一部指定コードの見直しを行った。 2014/10/07 検索の繰り返し機能をサポートした。 2014/10/18 数引数による数字の繰り返し入力をサポートした。"C-u 数字 C-u 数字" で対応可能。 2014/10/18 キーボードマクロの記録後の C-x 削除処理に改善点があったので修正した。 2014/10/18 IME 切替時に現在の IME の状態を balloonヘルプ で表示するようにした。 2014/10/19 quoted-insertコマンド(C-q)で利用可能なキーに Ctrl-Shift- * キー と Alt-Shift- * キー を追加した。 2014/10/19 数引数の指定に Ctrl と Meta を利用できるようにした。 2014/10/21 キーボードマクロ実行時は、IME の状態表示バールーンを表示しないようにした。 2014/10/30 スクリプトのコメントを追記した。機能に変更はありません。 2014/11/24 Emacs 利用時に角/全角」(日本語キーボード用)と Alt-`(英語キーボード用)を C-\ に置き換える設定(オプション)を追加した。 2014/11/26 「半角/全角」(日本語キーボード用)と Alt-`(英語キーボード用)押下時に toggle_input_method 関数をコールするようにした。 2014/12/03 Emacs 利用時に C-\ に置き換えるキーを追加した。(但し、「if 0」でデフォルト無効とした。)また、普段英語キーボードを使っているため確認が甘かった部分を、日本語キーボードを接続して確認・調整した。 2014/12/05 日本語キーボードで C-o による IME の切り替えを素早く2回行おうとした際、「ファイルを開く..」のダイアログが開くことがあったのでこれを改善した。 2015/01/21 「「IMEの切替え」のキー設定」の箇所の keymap_im の設定で、「(244)」のキーの設定が漏れていたのを追加した。 2015/01/22 IME 切替時の balloonヘルプ の表示で、半角英数直接入力の表示内容を「[_A]」から「[A]」に変更した。 2015/02/23 日本語キーボード用に Ctrl+@ の対応を行った。 2015/02/26 mark_whole_buffer() と mark_page() を Excel 以外の時は C-Home - C-a として機能するように変更した。 2015/03/11 Excel については個別に検索の繰り返しをサポートした。 2015/03/12 kill_ring_save を実行した際、Excel 以外では ESC も発行していたが、これを Sakura Editor の時のみに限定した。 2015/07/04 Emacs のキー設定(オプション)に「英数キー」を追加した。 2015/07/05 「C-k, A-d, C-BSなど範囲選択後に切り取りをするスクリプトのタイミング依存の問題」について対策した。 2015/07/17 backward_kill_word、kill_word、kill_line コマンドの repeat の指定方法を変更した。 2015/07/23 2015/07/17 の修正においてデグレ(Microsoft Word で kill_line を利用した際の不具合)が発生していた。これを修正した。 2015/09/18 LC-Underscore が正常に機能していなかったので対策した。併せて、日本語キーボードか英語キーボードかの指定方法を変更した。(スクリプトの最初の方にある is_japanese_keybord という変数の設定で切り替えるように対応した。) 2015/09/18 LC-Atmark の指定方法を変更した。 2015/10/11 C-[a-z]キーを Shiftキーと一緒に押した時は、Shiftキーをとったキー(C-[a-z])が Windows に入力される設定を追加した。 2015/10/20 キーボードマクロの繰り返し実行(C-u を付けての実行)にバグがあったので対策した。 2015/10/31 クリップボードリストでの検索機能を実装した。 2015/11/01 クリップボードリストでの検索機能の実装を改善した。 2015/11/02 クリップボードリストを拡張する設定の説明を追加した。 2015/11/04 クリップボードリストとは別に、LA-l で起動するランチャーリストを作成した。 2015/11/04 コードの一部リファクタリングを行った。 2015/11/06 クリップボードリストとランチャーリストの項目の横幅を決めるダミー行の設定方法を変更した。 2015/11/09 redo をサポートしてみた。 2015/11/15 other_window(C-x o)が Windows8 以降の OS で動かなかったのを対策した。 2015/11/15 クリップボードリストの機能を Emacsキーバインドを適用していないアプリケーションソフトでも利用できるようにする機能を追加した。 2015/11/15 ランチャーリストに現在開いているウィンドウを選択する機能を追加した。 2015/11/15 リファクタリングを実施した。また、設定を一つに固め、設定を取り込みやすくした。 2015/11/17 ランチャーリストの設定にある getWindowList 関数にて、ランチャーリストに載せたくないアプリケーションソフトを正規表現で指定できるようにした。 2015/11/19 other_window と popWindow 関数で、setForeground 関数を呼ぶ前に getLastActivePopup 関数を呼ぶようにした。 2015/11/20 ランチャーリストの Window リストにデスクトップを表示するための項目を追加した。また、ランチャーリストでフォーカスのあるウィンドウがなくなった際のエラー対策を追加した。 2015/11/20 switch_to_buffer(C-x b)と query_replace(M-%)をサポートした。 2015/11/21 shell_command(M-!)をサポートした。 2015/11/22 keymap.command_ShellExecute 関数の第二引数を raw文字列での指定方法に統一して変更した。 2015/11/27 ランチャーリストのウィンドウリストの表示にフォーマッターを噛ませた。 2015/11/28 ランチャーリストのウィンドウリストの表示用に適用したフォーマッターの改善を行った。 2015/11/29 ウィンドウリストの表示改善に不具合があったので対策した。 2015/12/07 ランチャーリストによるアプリケーションソフト切替え時に、諸々の変数を初期化するようにした。 2015/12/09 リストウィンドウで検索を行い、選択した行を確定したい場合、一回の Enter で済むように対応した。 2015/12/10 OS を Windows 10 にしたところ、クリップボードリストのフォントが乱れた表示となったので対応した。 2015/12/11 OS を Windows 10 にしたところ、ウィンドウリストに表示される不要と思われるアプリケーションソフトが増えていたので、多少の改善を行った。 2015/12/15 ランチャーリストのウィンドウリストに既に存在しないウィンドウの行が存在する場合、その行を選択してもエラーとならないように対策した。 2015/12/15 仮想デスクトップの切り替えるためのキーとして、LA-p と LA-n を割り当てた。(Windows 10 用) 2015/12/15 ランチャーリストの Desktop の機能と仮想デスクトップの切り替えを交互に利用した際などにエラーが発生することがあるため、その対策を行った。 2015/12/17 クリップボードリストやランチャーリストのリストウィンドウ内のみの対応として、基本、Altキーを Ctrlキーと同じキーとして扱うように対応した。 2015/12/17 テスクトップ内のウィンドウを切り替えるためのキーとして、LA-S-p と LA-S-n を割り当てた。 2015/12/18 use_virtual_desktop 変数を追加し、仮想デスクトップを切り替えるキー設定をするかどうかを指定できるようにした。 2015/12/23 クリップボードリストを起動するためのキーとして、LC-x C-y と LA-y を登録していたが、LC-x C-y の設定を廃止とした。 2015/12/23 use_virtual_desktop 変数の初期設定値を False(仮想デスクトップを切り替えるキー設定を“しない”)に変更した。 2015/12/24 仮想デスクトップを利用する場合のキー設定を選択するための virtual_desktop_mode 変数を追加した。 2015/12/28 keyhac のバージョン 1.70 に対応し、一部関数名の変更を行った。 2015/12/31 restore_window 関数がエラーとなる場合があったので、対策した。 2015/12/31 command_ShellExecute も廃止予定の関数となっていたので、ShellExecuteCommand に関数名を変更した。 2016/01/04 use_virtual_desktop 変数とvirtual_desktop_mode 変数を廃止し、desktop_switching_key 変数と window_switching_key 変数で切り替えキーを直接指定できるようにした。 2016/01/04 keyhac が ver 1.70 になり、k が大文字の Keyhac となった。アプリケーションソフトのクラス名等も変更となっていたため、スクリプトが正常に動作していなかった箇所があり、その対策を行った。 2016/01/08 Windows 10 を利用していると、ランチャーリストのウィンドウリストに直接は起動していない、プロセス名が ApplicationFrameHost.exe でタイトル名が「設定」、「ストア」もしくは「フォト」というウィンドウが表示される。これを表示されないように対策した。 2016/02/19 query_replace 関数内で、Sakura Editor と Hidemaru Editor は C-h ではなく C-r を発行するように対応した。 2016/02/20 秀丸で、行末での C-k による行削除に対応した。 2016/03/22 マルチディスプレイを利用している際に、表示しているウィンドウをディスプレイ間で移動するためのキーを window_movement_key 変数で指定できるようにした。 2016/03/23 other_window 関数に A-o キーを設定した。 2016/03/28 ウィンドウ操作関数での動作に統一性を持たせるため、操作対象とするウィンドウのリストを getWindowList 関数で生成し、そのウィンドウリストに対して操作するように処理を変更した。 2016/04/24 アクティブウィンドウの最小化、最小化されているウィンドウのリストアのキーを window_minimize_key 変数で指定するようにした。 2016/04/05 新たにother_window_key 変数、clipboardList_key 変数、lancherList_key 変数を導入し、設定の汎用化を行った。 2016/04/07 仮想デスクトップでの利用を踏まえ、ウィンドウの最小化を現在のデスクトップ内に表示しているウィンドウに対してのみ行われるように変更した。 2016/04/14 window_switching_key 変数と window_movement_key 変数に割り当てているキーを変更した。 2016/04/18 リストウィンドウのフォーマット(リスト幅の指定)の方法を変更した。 2016/04/25 use_esc_as_meta 変数により、Escキーを Metaキーとして使うかどうかを指定できるようにした。 2016/04/28 Ctrl-x を Windows のショートカットキー(cut)として利用する選択肢を持たせるため、Emacs の Ctl-xプレフィックスキーに使うキーを ctl_x_prefix_key 変数で指定できるようにした。 2016/04/29 アクティブウィンドウを切り替えるキーを指定する window_switching_key 変数の初期値を変更した。 2016/05/03 Ctrl-v を Windows のショートカットキー(paste)として利用する選択肢を持たせるため、スクロールキーに使うキーを scroll_key 変数で指定できるようにした。 2016/05/07 左右どちらの Ctrlキーや Altキーを使うかを side_of_ctrl_key 変数と side_of_alt_key 変数で指定できるようにした。 2016/05/08 A-[a-z]キーを Shiftキーと一緒に押した時は、Shiftキーをとったキー(A-[a-z])が Windows に入力される設定を追加した。 2016/05/15 toggle_input_method_key 変数の設定により、IME を切り替えるキーを指定できるようにした。 2016/05/18 use_emacs_ime_mode 変数の設定により、Emacs日本語入力モードを使うかどうかを指定できるようにした。また、C-S-[a-z] - C-[a-z]、A-S-[a-z] - A-[a-z] の置き換えの機能(Emacsシフトモード)を使うかどうかを use_emacs_shift_mode 変数で指定できるようにした。 2016/05/18 Emacs日本語入力モードが起動している状況で C-g を押下した場合は、Esc を2回発行してから Emacs日本語入力モードを抜けるようにした。 2016/05/19 toggle_emacs_ime_mode_key 変数の設定により、明示的に Emacs日本語入力モードを切り替える(トグルする)キーを指定でできるようにした。 2016/05/22 フォーカスウィンドウが切り替わった際、Emacs日本語入力モードが OFF となるように調整した。 2016/05/24 Emacs日本語入力モードの時に漢字キーを押した時、Emacs日本語入力モードを終了してから IME を OFF とするように調整した。 2016/05/25 Emacs日本語入力モードの時の誤動作を少なくするため、マウスクリック時に Emacs日本語入力モードが OFF となるように調整した。 2016/05/26 カーソルキー(←、→、↑、↓)が、C-b、C-f、C-p、C-n と同じ振る舞いとなるように設定した。 2016/05/27 use_ctrl_i_as_tab 変数の設定により、C-iキーを Tabキーとして使うかどうかを指定できるようにした。 2016/05/31 Emacs日本語入力モードの時、常に「I」の文字(Input の頭文字)がポップアップするようにし、Emacs日本語入力モードの状態が分かるように対応した。 2016/06/01 Evernote で C-g を押下した際、Esc を発行しないようにした。 2016/06/03 Emacs日本語入力モードの時に C-a、C-e、C-d そして scroll_key 変数で指定したスクロールキーも利用できるようにした。 2016/06/04 Emacs日本語入力モードの使用を有効にした際、emacs_ime_mode_balloon_message 変数の設定でバルーンメッセージとして表示する文字列を指定できるようにした。 2016/06/04 emacs_ime_mode_balloon_message 変数の初期値を「▲」に変更した。 2016/06/04 is_ime_target 関数で指定した IME の切り替えのみをしたいアプリケーションソフトでも、Emacs日本語入力モードと Emacsシフトモードが動作するように設定した。 2016/06/09 Windows 10 の Internet Explorer で本設定が正常に動作していなかったのを改善した。 2016/06/09 Emacs の挙動とは異なるようですが、ヤンク(C-y)の数引数による繰り返しをサポートした。 2016/06/17 「Excel の場合、C-Enter に F2(セル編集モード移行)を割り当てる(オプション)」の機能を初期値では"無効"とした。 2016/06/27 mark の際のカーソルの動きが遅いなどの問題があったので、delay の入れ方を全面的に見直した。 2016/07/28 Emacs日本語入力モードを使っている際に、文字が重なって入力されることがあったので、その対策を行った。 2016/08/05 IMEツールバーにより入力モードの切り替えが行われた際、Emacs日本語入力モードの切替えが適切に行われていなかったので、その対策を行った。 2016/09/23 scroll_key 変数が None の場合、C-v に yank の設定を行うように調整した。 2016/10/27 変数の管理方法を変更した。 2016/11/04 ウィンドウの判定に関する3点の改善を行いました。 2016/11/14 Keyhac for Windows が ver 1.75 になり、keymap.updateKeymap() がサポートされたので設定を見直した。 2016/11/16 新しめのバージョンの Excel を使っているとクリップボードに関連する競合エラーが発生するので、その対策を行った。 2017/03/17 本設定で使っている mouseup フックが他のソフトに悪影響を及ぼしていることが分かったので、該当箇所を削除した。 2017/05/16 not_clipboard_target 変数で、clipboard 監視の対象外とするアプリケーションソフトを指定できるように対応した。 2017/05/16 cmd.exe と powershell.exe についても、C-n、C-p、C-w、M-w、C-k、C-s、C-r 辺りのキー(C-s、C-r が使えるのは Powershell のみ)は利用できるように対応した。 2017/05/20 Emacsキーバインドの対象としないアプリケーションソフトに vcxsrv.exe を追加した。 2017/05/24 間違った数引数の指定により発生するコマンドのリピートが止まらなくなる事故を防ぐため、コマンドのリピート回数の最大値を指定できるようにした。 2017/05/28 Microsoft Edge を起動した状態でウインドウリストを表示するとエラーが発生するので、この対策を行った。 2017/06/09 window_switching_key 変数で設定するアクティブウィンドウを切り替えるキーが行う挙動を A-Tab、A-S-Tab に変更した。 2017/06/10 Emacsキーバインドの対象としないアプリケーションソフトに XWin_MobaX.exe を追加した。 2017/06/11 window_movement_key 変数で設定するアクティブウィンドウをディスプレイ間で移動するキーおよび desktop_switching_key 変数で設定する仮想デスクトップを切り替えるキーの初期設定値をデフォルトで設定されているキーから想定できるキーに変更した。 2017/06/22 word_register_key 変数に設定したキーにより、IME の「単語登録」プログラムが起動するように対応した。 2017/06/29 window_switching_key 変数に設定したキーで起動するタスク切り替え画面で A-g がキャンセル(A-Esc)として動作するように対応した。 2017/08/23 Excel のファイルを開いた直後一回目、kill_emacs が正常に動作しない。その対策を行った。 2017/10/12 window_switching_key を None に設定した場合(タスク切り替え画面の起動を A-Tab で行う場合)でも、タスク切り替え画面内で A-p、A-n キーによる画面移動を可能とした。 2017/10/14 リージョンを解除する機能を追加した。 2017/10/16 C-c(コピー)ではリージョンを解除しない設定に変更した。 2017/10/17 リージョンを解除する機能を使うかどうかを指定する変数(変数名は use_region_reset。初期値は True)を追加した。
https://w.atwiki.jp/ntemacs/pages/43.html
■ MinGW版 Emacs 特有の設定 【お知らせ】 2019/07/30 追記 最新の Thuderbird で External Editor が動かない件については、次の情報があります。 http //zetamatta.hatenablog.com/entry/2017/06/01/105852 2017/11/28 追記 WSL の Emacs と連携可能な emacsclient コマンドも作成しています。次のページを参照ください。 WSL の emacsclient を Windows から利用するための設定 2017/11/28 追記 gnupack の emacsclient コマンドは、startup_emacsclient.exe を利用できます。emacsclient のオプションは、 startup_config.ini ファイルの [startup_emacsclient.exe] セクションで設定できるようになっています。 2017/11/13 追記 Thunderbird のアドオンである External Editor は、設定がうまくできなくなっているようです。(OK ボタンを押せない..。) 【本題】 emacsclientw を使うための設定です。「Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版)」を使うことで、2) と 3) の必要性はあまり感じませんが、4) は「emacs-eclim を使うための設定 」と連携する上で便利かと思います。 1) emacsclientw を使うためのベースの設定を行う。 次のページを参照して設定してください。 http //shigemk2.hatenablog.com/entry/2013/11/21/gnupack%E3%81%A7emacsclient%E3%82%92%E4%BD%BF%E3%81%84%E3%81%9F%E3%81%84 ただし、次のページの内容と同じ問題が発生するので、Emacs の設定は以下とおりとしている。 http //chanpon-memo.blogspot.jp/2013/11/sendto-emacs.html (require server) (server-force-delete) (server-start) 2) Windows のテキストファイルを emacsclientw を利用して Emacs で開けるようにする。 (1) テキストファイルを右クリックして「プログラムから開く」→「既定のプログラムの選択」をクリックする。 (2) 「参照」ボタンをクリックし、emacsclientw.exe を指定する。 (3) 「この種類のファイルを開く時は、選択したプログラムをいつも使う」にチェックを付ける。 3) Thunderbird の外部エディタとして Emacs を利用できるようにする。 次のページを参照して設定してください。 http //news.mynavi.jp/articles/2014/02/06/thunderbird/001.html 4) Eclipse の外部エディタとして Emacs を利用できるようにする。 次のページを参照して設定してください。 https //github.com/anirudhsasikumar/emacs-eclipse ファイルを Emacs で開こうとして「Emacsclient ERROR」のダイアログが表示される場合は、一度 PC をリスタートしてみてください。 上記の他、Eclipse のメニューから以下を辿って、ファイルタイプのエディターに emacsclientw を追加する方法があります。 ウインドウ 設定 一般 エディター ファイルの関連付け 前者の設定の方が、Emacsアイコンの設定がされたり、Emacs でファイルを開いた際にカーソルの移動をしてくれたりと機能が優れていますが、後者の設定の方が plugin の追加の必要がないため、お手軽かと思います。 なお、emacsclientw で開いたバッファの終了は、C-x # となります。 変更履歴 2014/09/29 このページを作成した。
https://w.atwiki.jp/ntemacs/pages/42.html
■ Windows版 Emacs 共通の設定 【お知らせ】 2017/05/25 追記 Language Server Protocol client for Emacs というのもあるようです。 https //github.com/emacs-lsp/ 2017/04/05 追記 OmniSharp も面白そうです。 http //qiita.com/haripo/items/bbe2b91b83bf3c71dac8 2015/05/19 追記 Cygwin版 Emacs に対応しました。設定を MinGW版 Emacs と Cygwin版 Emacs で共有できるようにするため、パスの指定方法を cygpathコマンド で言うところの unix形式 に統一しています。MinGW版 Emacs を利用する場合、Cygwin の導入、cygdriveプレフィクス の / 設定、cygwin-mount.el のインストールが行われていれば(gnupack-11.00 の標準設定)、うまく動くと思います。(もしうまく動かない場合には、パスを mixed形式(c /foo/bar のような形式) に変更してみてください。) 2015/05/18 追記 Eclipse に pleiades をインストールする場合に eclimd が起動しない対策をアドバイスを用いて対応しました。 (この対応により、eclipse.ini の修正は不要となりました。) 【本題】 emacs-eclim を使うための設定です。 1) Eclipse、JDK をインストールする。 2015/5/18 時点で最新の eclim は、v2.4.1です。 http //eclim.org このeclim を利用するには、Eclipse 4.4.x(Luna) と JDK 1.7 以上が必要です。 http //eclim.org/install.html 必要に応じて、pleiades もインストールしてください。 2) eclim をインストールする。 次のコマンドでインストールできます。途中、vimfiles のディレクトリがないと怒られますが、"作らない"(いいえ)を選択し、「Do not install vim files (emacs users only)」にチェックを入れ、進んでください。 java -jar eclim_2.4.1.jar http //eclim.org/install.html#installing-upgrading 3) emacs-eclim、auto-complete をインストールする。 melpa からインストールしてください。 4) emacs-eclim の設定をする。 https //github.com/senny/emacs-eclim 上記のページを参考にしながら、以下のような設定を行ってください。eclim-executable の変数の設定では、コメントに書いているとおり、ドライブの指定方法に留意してください。 また、Eclipse のインストールパスと workspace のディフォルトパスは適宜変更してください。 (require cl-lib) (require eclim) (global-eclim-mode) (require eclimd) (custom-set-variables (eclim-eclipse-dirs ("/c/opt/eclipse")) ;; MinGW版 Emacs の場合、「c /」を使った表記とすると eclim--call-process から ;; 呼ばれる shell-command-to-string が正常に動作しない。 ;; (shell-quote-argument で追加されたエスケープ文字をうまく処理できないようだ。) ;; 理由は分らないが、「c /」の前にスペースを入れるか、unixタイプのパスとすると ;; 動作することを確認している。 ;; × (eclim-executable "c /usr/local/eclipse_4.4/eclim.bat") (eclim-executable "/c/opt/eclipse/eclim.bat") (eclimd-executable "/c/opt/eclipse/eclimd.bat") (eclimd-default-workspace "/c/home/workspace") ;; eclimd の起動が完了するのを待たない(*eclimd* バッファで起動の状況を確認できます) (eclimd-wait-for-process nil)) ;; Eclipse に pleiades をインストールしている場合に eclimd が起動しないことの対策 (advice-add start-eclimd around (lambda (orig-fun rest args) (let ((default-directory (file-name-directory (expand-file-name eclimd-executable)))) (apply orig-fun args)))) ;; executable-find によるチェックにより、eclimd が起動できない場合の対策 (advice-add start-eclimd around (lambda (orig-fun rest args) (cl-letf (((symbol-function executable-find) (symbol-function identity))) (apply orig-fun args)))) ;; Workspace directory を windows形式のパス に変換する (advice-add start-eclimd before (lambda (orig-fun rest args) (interactive (list (read-directory-name "Workspace directory " eclimd-default-workspace nil t))) (setf (nth 0 args) (if (fboundp cygwin-convert-file-name-to-windows) (cygwin-convert-file-name-to-windows (expand-file-name (nth 0 args))) (expand-file-name (nth 0 args)))))) (when (eq os-type cygwin) ;; 作成するコマンドにファイルのパスが含まれていれば、mixed形式 のパスに変換する (advice-add eclim--make-command around (lambda (orig-fun rest args) (cl-letf (((symbol-function shell-quote-argument-original) (symbol-function shell-quote-argument)) ((symbol-function shell-quote-argument) (lambda (argument) (shell-quote-argument-original (replace-regexp-in-string "^/\\([a-zA-Z]\\)/" "\\1 /" argument))))) (apply orig-fun args))))) ;; auto-complete の設定を行う ;; http //dev.ariel-networks.com/wp/documents/aritcles/emacs/part9 ;; http //cx4a.org/software/auto-complete/manual.ja.html (require auto-complete-config) (ac-config-default) ;; emacs-eclim source の追加を行う (require ac-emacs-eclim-source) (ac-emacs-eclim-config) ;; 補完を自動的に開始しない (setq ac-auto-start nil) ;; TABキーで補完を開始する(TABキーをコンテキストに応じて補完用のキーにする) (ac-set-trigger-key "TAB") ;; 次候補、前候補を選択するキーを設定する (define-key ac-complete-mode-map (kbd "C-n") ac-next) (define-key ac-complete-mode-map (kbd "C-p") ac-previous) ;; デバッグメッセージを表示する ;; (eclim-toggle-print-debug-messages) ;; java-mode で eclim-mode を有効にする (add-hook java-mode-hook eclim-mode) 5) eclimd を起動する。 M-x start-eclimd で起動してください。 正常に起動したかは、別途開く DOS窓 で確認してください。 なお、Windows から eclimd.bat をダブルクリックすることでも起動可能ですが、この場合、パラメータとして workspaceパスを渡すことができません。 次のページの「For Windows」で始まる行以降にこの対策方法が載っていますので、eclimd.bat を直接起動させたい方は参考としてください。 http //eclim.org/faq.html 6) NTEmacsを立ち上げ、eclim-emacs を起動する。 M-x eclim-project-mode 7) Eclipse のプロジェクトを選択し、編集するソースファイルを開く。 8) eclim で始まるいろいろなコマンドを試す。 helm の場合、C-c C-e C-h でコマンドの一覧を確認できます。 9) eclimd を停止する。 M-x stop-eclimd で停止してください。DOS窓 の×で停止すると、Javaエラーとなります。 なお、M-x start-eclimd を使わずに Eclipse を GUI で立ち上げ、eclimd を起動する方法があります。 この場合は、5) の代わりに Eclipse を立ち上げ、メニューから以下を辿って eclimd を起動してください。起動は初回のみで OK です。 日本語メニューの場合) ウインドウ ビューの表示 その他 Eclim eclimd 英語メニューの場合) Window Show View Other Eclim eclimd また、eclimd を外部の DOS窓 を開かずに、Emacs のバッファ内で起動する方法があります。 ちょっとトリッキーな設定が必要となりますが、興味のある方は以下を参考にして試してみてください。 1) eclimd-executable の設定を次のとおりに変更する。 (custom-set-variables (eclimd-executable "/c/opt/eclipse/eclimd.sh")) Eclipse のインストールパスは適宜変更してください。 2) Eclipse のインストールディレクトリ(eclim.bat がある場所)に次のスクリプトを eclimd.sh として格納する。 eclimd.sh #!/bin/sh # -*- coding utf-8-unix -*- export SHELLOPTS set -o igncr function pwd() { cygpath -m `/bin/pwd`; } export -f pwd `dirname $0`/plugins/org.eclim_2.4.1/bin/eclimd "$@" 3) eclimd を起動する。 M-x start-eclimd で起動してください。 正常に起動したかは、*eclimd* バッファを確認することでわかります。 こちらの環境では次のページに書かれている問題が発生したので、「%JAVA_HOME%\bin」をPathの一番最初に移動しました。 http //d.hatena.ne.jp/happynow/20120521/1337599059 4) eclimd を停止する。 M-x stop-eclimd で停止してください。 変更履歴 2014/09/26 このページを作成した。 2014/09/27 start-eclimd と stop-eclimd を動かすための設定を追加した。 2014/09/29 eclimd を eclimd.bat で起動した際の停止方法を追記した。 2014/09/29 eclimd-wait-for-process の設定を追加した。 2014/09/30 eclimd.sh のスクリプト内容の見直しを行った。 2014/09/30 eclim-executable の設定内容を変更した。(「/c/」から始まる文字列を、最初にスペースの入った「 c /」の文字列で始まるようにした。) 2014/10/01 eclimd.bat の起動方法を変更した。また、eclimd.sh の内容を修正した。 2015.05.18 Eclipse に pleiades をインストールする場合に eclimd が起動しない対策をアドバイスを用いて対応しました。(eclipse.ini の修正は不要となりました。) 2015.05.19 Cygwin版 Emacs に対応した。 2015/09/13 advice を Emacs-24.4 以降の書式に見直した。
https://w.atwiki.jp/oxon/pages/66.html
Emacs Unixで長い歴史を持つ定番のエディタである。OS Xにも/usr/binに標準でインストールされている。 キーバインディング Cocoa?で記述されたアプリケーションのキーバインディングは、bashやEmacsの主要なキーバインディングと一致する。そのため、Cocoaのキーバインディングに慣れたユーザにとっては、Emacsは馴染みやすいエディタであろう。 X Window System対応 /usr/bin/emacsはコンパイル時のフラグのせいで、X Window Systemでの使用ができない。そのため、-nwオプションをつけたのと同じ動作しかしてくれない。X Window System上でEmacsを使用したいユーザは、Finkから導入するのが簡単である。 日本語入力 Carbon Emacsをインストールすることで、ことえり?やATOK?での日本語入力に対応する。またFinkなどからCannaなどを導入することもできる。 Leopardからは、Terminal.appで起動したEmacsが日本語入力を受け付けるようになった。そのため、LeopardでEmacsを使う分には、普段使用していることえり?がそのまま使えるので、Carbon Emacsなどを導入しなくともよい。 Last Updated 2008-04-11
https://w.atwiki.jp/ntemacs/pages/50.html
■ Windows版 Emacs 共通の設定 ■ Windows Subsystem for Linux の Emacs で利用できる設定 【お知らせ】 2022/06/14 追記 最近ビルドした方はさらに苦労されているようです。お疲れ様です。 https //zenn.dev/ignorant/scraps/6132afb5915f34 2018/08/12 追記 最近、mozc_emacs_helper.exe をビルドされた方の情報が次のページにあります。 https //qiita.com/ignorant/items/1c4f729f9147fb878f10 最新の mozc には src/data_manager/packed/packed_data_manager.gyp が無くなったようで、そのパッチが削除されています。また、ひとつ下のコメントで紹介している rzl24ozi さんのパッチを利用しているので、セッション接続直後 direct モードになる問題が対策された実行モジュールがビルドされるようになっています。独自ビルドされる方は参考とされてください。 2017/06/08 追記 rzl24ozi さんの次のページを見つけました。私はまだ試せていませんが、本ページの代わりのものとして利用できそうです。ただし、WSL版 Emacs で Windows の Google日本語入力を利用したい場合には、次のページの方法は利用できません。 https //github.com/rzl24ozi/mozc-emacs-helper-module 2017/06/08 追記 本ページの記載内容は古くなってきています。本ページを作成するために参考とした情報の最新のものが次のページにありますので、こちらのページも併せて確認してください。 https //github.com/google/mozc/blob/master/docs/build_mozc_in_windows.md なお、公開しているバイナリ(mozc_emacs_helper.exe)もかなり前にコンパイルしたものですが、こちらは現在でも問題なく動いています。 2016/09/13 追記 mozc_emacs_helper.exe のテストの際に IME を ON にするために入力しているキーを「Hiragana」から「Hankaku/Zenkaku」に変更しました。この対応で、Google日本語入力のキー設定が「MS-IME」以外の「ことえり」などでもテストが通るようになりました。(ただし、「Hankaku/Zenkaku」キーは「Hiragana」キーと異なり、IME の ON/OFF をトグルするキーとなります。必要な場合に一度のみ発行するように注意して利用する必要があります。) 2015/10/01 追記 OSS mozc の Wish List が書かれた blog がありました。 http //nyaruru.hatenablog.com/ 【本題】 関連して「emacs-mozc を動かすための設定(Emacs 設定編)」、「emacs-mozc を動かすための設定(WSL 設定編)」も参照ください。 Windows版 Emacs や WSL の Emacs で 「Google日本語入力」と連携可能な emacs-mozc を動かすための mozc_emacs_helper コンパイル編 です。 mozc_emacs_helper.exe の取得のみが目的であれば、次のページからバイナリをダウンロード可能です。かなり前にビルドしたものですが、現在でも問題なく動作しています。 https //github.com/smzht/mozc_emacs_helper 0) 事前に「Google日本語入力」のインストールを行う。 http //www.google.co.jp/ime/ 1) 次のページから Visual Studio Community 2013 をインストールする。 https //www.visualstudio.com/ja/vs/older-downloads/ (参考)http //www.softantenna.com/wp/windows/visual-studio-community-2014/ ※ Visual Studio Community 2013 のインストールでは、最低「Microsoft Foundation Classes for C++」のインストールを行ってください。Language Pack は無くても構いません。 ※ (2017/11/27 追記)上記【お知らせ】にも記載していますが、本ページの記載内容は古くなってきています。現在は、Visual Studio Community 2015 の利用が推奨されています。次のページも併せて参照してください。 https //github.com/google/mozc/blob/master/docs/build_mozc_in_windows.md https //qiita.com/ignorant/items/1c4f729f9147fb878f10 2) Cygwin 上で depot_tools.zip をダウンロードし、解凍する。 $ mkdir c /work $ cd c /work $ wget https //src.chromium.org/svn/trunk/tools/depot_tools.zip $ unzip depot_tools.zip 3) 作成された depot_toolsディレクトリ を PATH に追加し、gclient を二回実行する。 $ export PATH=`pwd`/depot_tools $PATH $ gclient $ gclient 4) mozc のソースをダウンロードする。 $ git.bat clone https //github.com/google/mozc.git --recursive 5) 作成された mozcディレクトリ に移動し、以下のパッチを適用する。 $ cd mozc $ patch -b -p0 src.patch src.patch は以下のとおりです。 packed_data_manager.gyp のパッチはコンパイルエラーを回避するためのもので、内容は適当です。(というか、どうすれば良いか分からない。) diff -urN src.orig/data_manager/packed/packed_data_manager.gyp src/data_manager/packed/packed_data_manager.gyp --- src.orig/data_manager/packed/packed_data_manager.gyp2014-11-17 19 23 22.000000000 +0900 +++ src/data_manager/packed/packed_data_manager.gyp2014-11-17 20 02 09.379555300 +0900 @@ -47,5 +47,12 @@ }, includes [ packed_data_manager.gypi ], }], + [ branding=="GoogleJapaneseInput" , { + variables { + dataset_dir oss , + dataset_tag oss , + }, + includes [ packed_data_manager.gypi ], + }], ], } diff -urN src.orig/win32/build32/build32.gyp src/win32/build32/build32.gyp --- src.orig/win32/build32/build32.gyp2014-11-17 19 25 33.000000000 +0900 +++ src/win32/build32/build32.gyp2014-11-17 20 02 52.369617200 +0900 @@ -49,6 +49,7 @@ ../broker/broker.gyp mozc_broker32 , ../ime/ime.gyp mozc_ime , ../tip/tip.gyp mozc_tip32 , + ../../unix/emacs/emacs.gyp mozc_emacs_helper , ], conditions [ [ use_dynamically_linked_qt!=1 , { 6) srcディレクトリ に移動し、次のコマンドを実行する。 $ cd src $ python.bat build_mozc.py gyp --msvs_version=2013 --noqt --branding=GoogleJapaneseInput $ python.bat build_mozc.py build -c Release package 7) out_win/Release に移動し、 mozc_emacs_helper.exe が作成されていることを確認する。 8) Cygwin や WSL の環境で次のコマンドを実行し、mozc_emacs_helper.exe が動作することを確認する。 $ echo -e (0 CreateSession)\n(1 SendKey 1 Hankaku/Zenkaku)\n(2 SendKey 1 97) | ./mozc_emacs_helper.exe ((mozc-emacs-helper . t)(version . "1.13.1641.0")(config . ((preedit-method . roman)))) ((emacs-event-id . 0)(emacs-session-id . 1)(output . ())) ((emacs-event-id . 1)(emacs-session-id . 1)(output . ((id . "14187429124963392915")(mode . hiragana)(consumed . t)(status . ((activated . t)(mode . hiragana)(comeback-mode . hiragana)))))) ((emacs-event-id . 2)(emacs-session-id . 1)(output . ((id . "14187429124963392915")(mode . hiragana)(consumed . t)(preedit . ((cursor . 1)(segment ((annotation . underline)(value . "あ")(value-length . 1)(key . "あ")))))(candidates . ((size . 3)(candidate ((index . 0)(value . "あああ")(annotation . ((deletable . t)))(id . 0))((index . 1)(value . "安比")(annotation . ((deletable . t)))(id . 1))((index . 2)(value . "あ")(annotation . ((description . "ひらがな")))(id . 2)))(position . 0)(category . suggestion)(display-type . main)(footer . ((label . "Tabキーで選択")))))(status . ((activated . t)(mode . hiragana)(comeback-mode . hiragana)))(all-candidate-words . ((candidates ((id . 0)(index . 0)(key . "あああ")(value . "あああ")(annotation . ((deletable . t))))((id . 1)(index . 1)(key . "あっぴ")(value . "安比")(annotation . ((deletable . t))))((id . 2)(index . 2)(value . "あ")(annotation . ((description . "ひらがな")))))(category . suggestion)))))) ※ Linux で mozc_emacs_helper を実行した場合は、セッション接続直後に hiraganaモード になるのですが、Windows の環境では directモード になるようです。このため、「(1 SendKey 1 Hankaku/Zenkaku)」を挟んでいます。このための対策を「emacs-mozc を動かすための設定(Emacs 設定編)」の設定で行っています。 ※ Windows 8.1 では、一回の「Hankaku/Zenkaku」キーの発行だけでは hiraganaモード に移行しない場合があるようです。その場合は次のコマンドをお試しください。ただし、この現象による「emacs-mozc を動かすための設定(Emacs 設定編)」の変更は必要ありませんでした。(※ 2016/10/12 追記: 時間的なタイミングの問題の可能性もあるので、「Hankaku/Zenkaku」キーの発行の後に delay(sleep)を入れることでも解決するかもしれません。現在、Windows 8.1 の環境がない(全て、Windows 10 に upgrade してしまった)ため、確認ができておりません。) $ echo -e (0 CreateSession)\n(1 SendKey 1 Hankaku/Zenkaku)\n(2 SendKey 1 Hankaku/Zenkaku)\n(3 SendKey 1 97) | ./mozc_emacs_helper.exe 9) Windows版 Emacs を使っている方は、mozc_emacs_helper.exe をコマンドパスの通ったディレクトリ(~/bin 等)に配置する。WSL の Emacs を使っている方は、次に進む。 10) Windows版 Emacs を使っている方は「emacs-mozc を動かすための設定(Emacs 設定編)」を、WSL の Emacs を使っている方は「emacs-mozc を動かすための設定(WSL 設定編)」の設定を行う。 変更履歴 2014/11/17 このページを作成した。 2014/11/19 mozc_emacs_helper のバイナリを追加した。 2015/07/04 Windows8.1 で検証を行った結果のコメントを追記した。