「singleton な動きをする cygstart 的コマンドを使うための設定 (Cygwin版)」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
&bold(){【お知らせ】}
----
&bold(){<2018/09/11 追記>}
sglstart を使っている場合、内部から呼ばれている winactivate.exe コマンドを更新してください。Emacs のタイトルの影響によるウィンドウのアクティベートの誤動作が解消されます。
・https://github.com/smzht/win-utils
&bold(){<2018/01/24 追記>}
この設定の WSL版 もあります。お試しください。
・[[singleton な動きをする cygstart 的コマンドを使うための設定 (WSL版)]]
&bold(){<2017/09/15 追記>}
本設定で紹介しているコマンドは次の設定と一緒に使うことを想定しています。Windows 上のドキュメントファイルを Emacs の dired から開くことができ、開いたファイルの操作を Emacs のキーバインドで行うことができるようになるため、OS 全体を Emacs で操作している感覚となります。本設定と併せ、お試しください。
・[[dired を OS と連携して使うための設定]]
・[[Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版)]]
&bold(){【本題】}
----
singleton な動きをする cygstart 的コマンドを使うための設定です。
例えば、テキストファイル(サフィックスが .txt のファイル)が Notepad で開く設定になっている場合、同じテキストファイルを複数回開くと別々のウィンドウに開いてしまいます。また、Office2013 や SDI で開くように設定した Office2010 などで同じファイルを開こうとした場合には、開き直すか聞かれたり、既に開いていると警告されたりします。Explorer のように、開くディレクトリが既に開いていればそのウィンドウをポップアップするだけのアプリケーションソフトもありますが、すべてのアプリケーションソフトがそのような動きをする訳ではありません。
この問題を解決するため、singleton な動きをする cygstart 的コマンドを作成してみました。完全な対策とはなっている訳ではありませんが(誤作動の可能性はありますが)、以下の動きとすることで多くの場合の問題を解決しています。
1. 開くターゲットがディレクトリの場合は、そのディレクトリを開く。(Explorer は singleton な動きをするので、敢えて何もしていない。)
2. 開くターゲットがファイルの場合、以下の動きとする。
2-1. 既に開いてるウィンドウのタイトルに&bold(){開くターゲットファイルの名称が含まれていれば}、そのウィンドウをポップアップする。
(この判定が単純な文字列の部分マッチであるため、誤作動する(想定外のウィンドウがポップアップされる)可能性があります。例えば、別なフォルダから同名のファイルを開いている場合など。)
2-2. 2-1 に該当しない場合、そのファイルを開く。(サフィックスから判断される適切なアプリケーションソフトで開かれる。cygstart と同じ動き。)
利用するための設定は以下のとおりです。
1) 以下にある sglstart というスクリプトをコマンドパスが通ったフォルダ(~/bin 等)に格納し、必要であれば chmod +x sglstart することにより実行可能とする。
・https://github.com/smzht/cyg-utils
2)以下にある winactivate.exe というコマンドを上記と同じフォルダに格納する。
・https://github.com/smzht/win-utils
3) コマンドの動作の精度を高めるため、以下に従い「ファイル名の拡張子を表示する」設定を行う。
・http://qa.nifty.com/cs/catalog/faq_nqa/qid_15385/1.htm
※ 設定を行わなくてもコマンドは動作しますが、suffix だけが異なる名前をもつ複数のファイルを開いている際などの動作精度が高まりますので、設定することをお薦めします。
4)Cygwin 上で sglstart <filename> を複数回実行し、singleton な動きをする cygstart 的コマンドとして機能することを確認する。
なお、本設定は Emacs の dired-open パッケージや「[[dired を OS と連携して使うための設定]]」 と連携することを目的として作成しました。Emacs の dired と連携しなければ利用場面が限られ、あまり有効な設定ではないかもしれません。
----
<変更履歴>
・2015/11/26 このページを作成した。
・2015/12/16 フォルダオプションで「ファイルの拡張子を表示しない」設定にしていると正常に動作しなかったので、その対応をした。
・2015/12/21 指定したファイルが開いているかどうかの判定方法を一部改善した。
・2015/12/24 Office を 2016 にしたところ、ファイルを正常に開けない場合があるので、その対策を行った。
・2016/01/04 ポップアップするかどうかを判定するアプリケーションソフトから Emacs を除外した。
・2016/02/18 Keyhac for Windows ver 1.71 以降で動作するようにスクリプトを書き換えた。
・2016/09/16 本コマンドをとおして Excel ファイルを開こうとしたとき、正常に開かないことがあったので、スクリプトの調整を行った。
・2016/09/19 引数に URL を指定した時でも動作するように改善した。
・2017/05/23 Keyhac のインストールパスの指定方法を一部変更した。
・2017/09/16 ウィンドウをポップアップする判定条件を見直した。
・2017/11/24 ウィンドウをアクティベートする方法を AutoHotKey を使った方法に見直した。
----
#javascript(){{
<script>
(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');
</script>
}}
&bold(){【お知らせ】}
----
&bold(){<2018/09/11 追記>}
sglstart を使っている場合、内部から呼ばれている winactivate.exe コマンドを更新してください。Emacs のタイトルの影響によるウィンドウのアクティベートの誤動作が解消されます。
・https://github.com/smzht/win-utils
&bold(){<2018/01/24 追記>}
この設定の WSL版 もあります。お試しください。
・[[singleton な動きをする cygstart 的コマンドを使うための設定 (WSL版)]]
&bold(){<2017/09/15 追記>}
本設定で紹介しているコマンドは次の設定と一緒に使うことを想定しています。Windows 上のドキュメントファイルを Emacs の dired から開くことができ、開いたファイルの操作を Emacs のキーバインドで行うことができるようになるため、OS 全体を Emacs で操作している感覚となります。本設定と併せ、お試しください。
・[[dired を OS と連携して使うための設定]]
・[[Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版)]]
&bold(){【本題】}
----
singleton な動きをする cygstart 的コマンドを使うための設定です。
例えば、テキストファイル(サフィックスが .txt のファイル)が Notepad で開く設定になっている場合、同じテキストファイルを複数回開くと別々のウィンドウに開いてしまいます。また、Office2013 や SDI で開くように設定した Office2010 などで同じファイルを開こうとした場合には、開き直すか聞かれたり、既に開いていると警告されたりします。Explorer のように、開くディレクトリが既に開いていればそのウィンドウをポップアップするだけのアプリケーションソフトもありますが、すべてのアプリケーションソフトがそのような動きをする訳ではありません。
この問題を解決するため、singleton な動きをする cygstart 的コマンドを作成してみました。完全な対策とはなっている訳ではありませんが(誤作動の可能性はありますが)、以下の動きとすることで多くの場合の問題を解決しています。
1. 開くターゲットがディレクトリの場合は、そのディレクトリを開く。(Explorer は singleton な動きをするので、敢えて何もしていない。)
2. 開くターゲットがファイルの場合、以下の動きとする。
2-1. 既に開いてるウィンドウのタイトルに&bold(){開くターゲットファイルの名称が含まれていれば}、そのウィンドウをポップアップする。
(この判定が単純な文字列の部分マッチであるため、誤作動する(想定外のウィンドウがポップアップされる)可能性があります。例えば、別なフォルダから同名のファイルを開いている場合など。)
2-2. 2-1 に該当しない場合、そのファイルを開く。(サフィックスから判断される適切なアプリケーションソフトで開かれる。cygstart と同じ動き。)
利用するための設定は以下のとおりです。
1) 次のリポジトリにある sglstart というスクリプトをコマンドパスが通ったフォルダ(~/bin 等)に格納し、必要であれば chmod +x sglstart することにより実行可能とする。
・https://github.com/smzht/cyg-utils
2)次のリポジトリにある winactivate.exe というコマンドを上記と同じフォルダに格納する。
・https://github.com/smzht/win-utils
3) コマンドの動作の精度を高めるため、次の説明に従い「ファイル名の拡張子を表示する」設定を行う。
・http://qa.nifty.com/cs/catalog/faq_nqa/qid_15385/1.htm
※ 設定を行わなくてもコマンドは動作しますが、suffix だけが異なる名前をもつ複数のファイルを開いている際などの動作精度が高まりますので、設定することをお薦めします。
4)Cygwin 上で sglstart <filename> を複数回実行し、singleton な動きをする cygstart 的コマンドとして機能することを確認する。
なお、本設定は Emacs の dired-open パッケージや「[[dired を OS と連携して使うための設定]]」 と連携することを目的として作成しました。Emacs の dired と連携しなければ利用場面が限られ、あまり有効な設定ではないかもしれません。
----
<変更履歴>
・2015/11/26 このページを作成した。
・2015/12/16 フォルダオプションで「ファイルの拡張子を表示しない」設定にしていると正常に動作しなかったので、その対応をした。
・2015/12/21 指定したファイルが開いているかどうかの判定方法を一部改善した。
・2015/12/24 Office を 2016 にしたところ、ファイルを正常に開けない場合があるので、その対策を行った。
・2016/01/04 ポップアップするかどうかを判定するアプリケーションソフトから Emacs を除外した。
・2016/02/18 Keyhac for Windows ver 1.71 以降で動作するようにスクリプトを書き換えた。
・2016/09/16 本コマンドをとおして Excel ファイルを開こうとしたとき、正常に開かないことがあったので、スクリプトの調整を行った。
・2016/09/19 引数に URL を指定した時でも動作するように改善した。
・2017/05/23 Keyhac のインストールパスの指定方法を一部変更した。
・2017/09/16 ウィンドウをポップアップする判定条件を見直した。
・2017/11/24 ウィンドウをアクティベートする方法を AutoHotKey を使った方法に見直した。
----
#javascript(){{
<script>
(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');
</script>
}}