情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | 編集

AutoHotkeyにおけるラベルの優先度と3キー同時押しの定義 このエントリーを含むはてなブックマーク

AutoHotkey(Version v1.0.48.05.L61)のホットキーの定義方法だと、どのラベルの内容が実行されるのか迷うときがあります。その優先度についてのまとめです。

後に書いた方が優先される(コンビネーションキー)

次のコンビネーションキー二つから成るコードを実行します。

a & z::msgbox, "a&z"
b & z::msgbox, "b&z"

このときに、「a,b,z」を同時押し(正確にはaとbを押した状態でz)すると、「b&z」と表示され、二つの行を入れ替えて、

b & z::msgbox, "b&z"
a & z::msgbox, "a&z"

としたときは「a&z」が表示されます。 このことから、後ろに書いた方が優先的に実行されると考えられます。

コンビネーションキーが優先される(通常ホットキーラベルとコンビネーションキー)

続いて、「Ctrl+z」と「a+z」のホットキーを定義してみます。

^z::msgbox, "^z"
a & z::msgbox, "a & z"

このときに、「Ctrl,a,z」を同時押し(Ctrlとaを押した状態でz)すると、今度は行を入れ替えたとしても必ず「a & z」と表示されます

このことから、コンビネーションキーに書いたことが優先的に実行されると考えられます。

3キー同時押しのホットキーを定義するときに注意

つまり、たとえばCtrlと無変換を修飾キー(prefix key)として利用し、「Ctrl+k」「無変換+k」、「Ctrl+無変換+k」をそれぞれ別々に独立して制御したい場合、「^k::」と「vk1Dsc07B & k::」を書いて二つ同時押し(「Ctrl+k」と「無変換+k」)、どちらかの中で三つ同時押しの動作を定義することになります。これは、Ctrl、Alt、Shift、Win以外のキーを二つ以上含む三つ同時押しを直接定義する方法がAutoHotkeyには存在しないからです

つまり、「^k::」側に書く方式

^k::
	If GetKeyState("vk1Dsc07B", "P")
		msgbox, "Ctrl+無変換+k"
	Else
		msgbox, "Ctrl+k"
	Return
vk1Dsc07B & k::msgbox, "無変換+k"

と、「vk1Dsc07B & k::」側に書く方式

^k::msgbox, "Ctrl+k"
vk1Dsc07B & k::
	If GetKeyState("Ctrl", "P")
		msgbox, "Ctrl+無変換+k"
	Else
		msgbox, "無変換+k"
	Return

が考えられるのですが、どちらにせよ、3つのキー(Ctrl,無変換,k)を同時押ししたときに実行されるのは「^k::」ではなく「vk1Dsc07B & k::」なのです。つまり、後者が正解で、前者は間違いとなります(前者を実行して三つ同時押しをしても、「無変換+k」が表示されてしまいます)

まとめ

AutoHotkeyには、このような優先順序があるようです。例に挙げたように、特に3キー同時押しを細かく制御しようとする場合には注意が必要です。ちなみに、ここで細かく、と言っているのは、

vk1Dsc07B & k:: Send, {Blind}{Left}

のように、CtrlキーなどのUp/Downを素通ししてしまうことで3キー同時押しを行うことも出来るからです。ただし、これでは制限が非常にきついので、本文中で紹介したような方法が必要になると思います。

3キー同時押しのうまいやり方が本当にこれなのかは分かりません。もっといい3キー同時押し方法があるのかもしれません。ただ、とりあえずこういうことが起こるということに気がついて、実際にはまってしまったのでメモしておきました。落とし穴うめうめ。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Advanced Windows 第5版 上 (マイクロソフト公式解説書)
インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)
APIで学ぶWindows徹底理解
スポンサーサイト
AutoHotkey | コメント:0 | トラックバック:0 | 編集

MS Office用のAutoHotkeyスクリプトを書くときの注意 このエントリーを含むはてなブックマーク

MS Office、ExcelやWord、OneNoteなどを利用する人には、専用AutoHotkeyスクリプトの作成をおすすめします。作業効率を大きく上げることが可能です。

しかし、設定したはずのホットキーがうまく働かないことがあります。

たとえば、Excelでホットキーから「Send {Home}」や「Send ^+`;」をしたり、OneNoteでホットキーから「Send {Down}」や「Send {Up}」をしようとすると、うまく動きません。

AutoHotkey | コメント:3 | トラックバック:0 | 編集

Eclipseが不安定になったり起動できなくなる問題について このエントリーを含むはてなブックマーク

eclipseが不安定の原因

今回、Eclipseが非常に不安定になり、起動してすぐ応答無しになってしまうこともあり、使い物にならなくなってしまいました。今では解決しましたが、そのときの解決方法と、「現時点で解決されたのかどうか、はたまた未解決なのか」をメモしておきます。

問題

問題が発生した環境は、Windows 7 64bit、Java SE Runtime Environment build 1.6.0_21-b06 64bit(JRE 6u21)、Eclipse 3.6 Helios(64bit)です。

対策

対策は、「Windows 7 x64 への Eclipse Helios のインストール」を参考に、eclipse.iniファイルに

--launcher.XXMaxPermSize
256M

を加えただけです。変更後のeclipse.iniはこんな感じ。

-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.0.v20100503
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-XX:MaxPermSize=256m
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m

これだけで、無事解決できました。

現在は?

ここまでは、作業履歴のようなもので、これからJREとEclipseをインストールする人がどうするべきかのほうが大事です。そして、Eclipseのサイトに、次のような記述がありました。

UPDATE: The latest JDK/JRE downloads have fixed this problem, so the reecommended way to resolve the problem is to download and re-install from http://www.java.com (alternative link is http://java.sun.com/javase/downloads/index.jsp). Make sure you have b07 or higher by running java -version
(FAQ How do I run Eclipse? Oracle/Sun VM 1.6.0_21 on Windows より)

つまり、現在新しくJRE(JDK)をダウンロードしてインストールする分にはこの問題は発生しないようです。そのため、少なくともこの問題を回避するためにJRE 6u20をインストーする必要はもうなさそうです。以上、メモ終わり。

Eclipseで学ぶはじめてのJava
Eclipse PDTではじめるPHPプログラミング入門
Eclipse 3.4 プラグイン開発 徹底攻略

Eclipse | コメント:0 | トラックバック:0 | 編集

コピー&ペーストが出来ない病の原因 このエントリーを含むはてなブックマーク

最近、コピー&ペーストができなくなるという現象が数回発生。コピーしても、ペーストができなくなります。

原因はSleipnir

症状を分析したところ、とりあえず原因がSleipnirにあることが判明。

とりあえず、分かったことを列挙します。参考までに

  • Sleipnirを閉じれば問題解決
  • とあるサイトを開いていたタブを閉じるだけでも解決
  • 閉じた後、再び開いても大丈夫。問題なし。
  • しかし、再び開いた後、ほかのアプリにフォーカスを移してから戻ってくると再発。
  • 「オプション>クライアント>クリップボード>タブを閉じたときにクリップボードを空にする※脆弱性対策」をオフにしても解決せず。意外。
  • ATOKのクリップボードビューアを見ると、該当タブが開かれているときに、Sleipnirからフォーカスを移すと、「現在のクリップボードの内容」が「(表示できません)」になる。
  • クリップボードビューアを見ながらいろいろ試してみると、ほかのアプリにフォーカスを移さずとも、タブを切り替えるなど、IMEが利用できない状態になった瞬間クリップボードの内容が利用できなくなっている模様。
  • さらにクリップボードビューアを観察すると、Ctrl+Cを押した瞬間はクリップボードにコピー内容が格納されているが、一瞬でまた「(表示できません)」に戻っている。
  • ちなみに、右クリックからのコピーであろうが関係ない。
  • 該当ページをセキュアモードで開く分には問題が発生しない→JavaScriptのせい?
  • キーボードのショートカットの設定をデフォルトに戻しても関係なし
以上。いろいろ試してみた結果です。

結論

ずばり、「原因はSleipnir」これだけ分かれば十分かと。そして、「特定のページが問題を起こしている」ということも重要かもしれない。

つまり、Sleipnirを再起動して問題が引き続き発生するなら、「最近開いたタブから順に閉じて、症状が発生するかどうかを確かめてみる」というのが私なりの処方箋。

コピペができない病になってしまったら、ぜひお試しあれ原因はほかにもいっぱいあるでしょうけど

Windows | コメント:2 | トラックバック:0 | 編集

Messenger と ATOK の改行がおかしくなる問題の解決方法 このエントリーを含むはてなブックマーク

Windows Live Messenger のメッセージ入力スペースにATOKで文字を入力すると、改行(Ctrl+EnterまたはShift+Enter)が2回必要になり、めんどうでした。今回、原因と解決方法がはっきりしたので、メモしておきます。

ATOK+Messengerで起こる問題

具体的に、どのような問題かというと、「改行」して、続けて文字を入力しようとすると、前の行(一つ上の行)の末尾にカーソルが戻ってしまうという問題です。

これは、入力している文字列の一番最後の行の末尾で改行を行って、まだ1文字も入力されていない行に入力しようとすると発生します。つまり、何かしらの行や文字がカーソルよりも前にある場合は、上記のような「カーソルが前の行に勝手に戻る」問題は発生しません

そこで、今までは、2回改行して、1行戻って入力していました。

つまり、

一太郎
メッセンジャー

と、入力したい場合は、「一太郎」「Ctrl+Enter」「Ctrl+Enter」「カーソルキー上」「メッセンジャー」「カーソルキー下」「バックスペース」と、入力していました。

問題の原因と対策方法

問題の原因は、ATOKの設定にありました。以下、ATOK 2008の場合ですが、ATOK 2009や、それ以前でも、同じような項目があるはずなので、参考にしてみてください。

ATOK プロパティ(Ctrl+F12)の、「入力・変換タブ>変換補助」を選択すると、「変換に関する補助的な設定を行います」という項目が表示されます。

この項目の中の、「カーソル位置前後の文章を参照して変換する」が、ずばり原因です。

もし、この項目にチェックが入っていたら、チェックを外してみてください

すると、今回の問題が解決されます。 もちろん、私の環境でのことなので、「直らないよ」というときは、コメントでお知らせお願いします。

考察

なぜ、このような問題が発生するのか。実は、この「前後を参照して変換する」という機能は、利用するエディタ(今回の場合は、Windows Live Messenger)が対応している必要があります。

ここで、Windows Live Messengerでこの機能が利用できるか試してみると、たしかに前後の文字を参考にして変換していることが分かります。ようするに、ちゃんとMessengerはこの機能を実装しているのです。

このことから、今回の問題は、実装上の手違いというか、「MS IME用に作ったら、ATOKの仕様とすこしずれちゃったよ」ということではないかと予想してみました。

追記

すいません、考察は必要ありませんでしたね。 この問題にはまっている人がいたら、ぜひ、上記の解決方法を試してみてください。

ここのところ少し忙しかったのですが、若干解消されたので、またプログラミングをがんばっていこうと思います。では。

Windows | コメント:0 | トラックバック:0 | 編集
 | HOME | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。