-
Notifications
You must be signed in to change notification settings - Fork 168
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
コマンドプロンプトを開くためのメニューを実装 #603
コマンドプロンプトを開くためのメニューを実装 #603
Conversation
FuncID_To_HelpContextID に ID を足す必要があります。 |
「shellexecute コマンドプロンプト」でググるとこういうのが出てきます。 windows apiの使い方は何語でもほぼ同じです。 API関数名をググるとhspとかdelphiのブログにたどり着くことはよくあります。 issueのほうに powershell にも対応して欲しい旨ありました。 |
別 PR で対応するのが、いいと思います |
パス指定なしで、cmd.exe を指定すると、パスが見つからないと言うエラーになったので、フルパス指定してます。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
具体的な箇所にコメントしないと意図が伝わりにくい気がしたのでレビューコメント付けました。
一応、これのステータスはヘルプ分の修正コミット積みまちな認識です。
あと、「エクスプローラーで開く」と同様にメニューアイコンの実装が未な認識です。
メニューアイコンについては「後日」で進めてしまっていいつもりですが 😸
#607 を作成しました。 |
CMD.EXEは、UNCパスはエラーになったかと。 PowerShellは、 |
347b646
to
650c461
Compare
650c461
to
a49416a
Compare
pushd は開くたびにドライブを割り当てるのでよろしくないと思います。 |
レジストリをいじればUNCを使うことも可能です。 REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001 ただ、ちゃんと動かない内部コマンドもあったような気がしますが。 |
ドキュメントも追加しました。 |
UNC パスの場合にエラーにする対応とメニュー項目を無効化する対応を入れました。 |
この PR で対応しようすると収拾つかなくなるので、やるとしても別 PR かと思いました。 |
ユーザーの設定によっては可能なので、SakuraとしてはUNCについては特別な対処は不要ではと思いました。(あるいはヘルプにcmdの設定を記載する程度。) 追記:もしcmdの設定に応じてメニューの項目をon/offするということを考えているのであれば、HKCUだけでなくHKLMの設定も見ないといけないです。 |
|
ググったら出てきた↓ 一番下になんか書いてありますね・・・。 UNCパスが割り当て済みのネットワークドライブ配下のパスに一致する場合はCDで行けるのかな? |
ああ、ちゃんと動かない内部コマンドというのはまさに |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if
の後の{
の位置が統一されていないのも少し気になりました。
} | ||
|
||
std::wstring strFolder(GetDocument()->m_cDocFile.GetFilePath()); | ||
::PathRemoveFileSpecW(&*strFolder.begin()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C++はよく分かっていないのですが、std::(w)string の中身をこうやって書き換えるのって、許容されているんでしたっけ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PathRemoveFileSpecW をつかないようにするために
#613 を作成しました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C++はよく分かっていないのですが、std::(w)string の中身をこうやって書き換えるのって、許容されているんでしたっけ?
方針次第の認識です。いまいるメンバーなら「許容」でいいと思います。
std::stringの管理外でメモリを流用する行為なので、後始末が必要です。
そのことを理解して実践していけるならとくに問題はないと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
自分は理解していませんし怖くてできません。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Java でもコピーした方がいいということで廃止されましたし、C++ では新しい規格によってそういう実装が禁止された不可能になったというようなことを聞いた気がしますが、std::string を Copy on Write で実装する例が過去にはあったようです。配列や std::vector を使わない理由がわかりません。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
自分は理解していませんし怖くてできません。
なんか東仙隊長のセリフを思い出しました。
ま、それはいいとして、ニュアンスは了解しました。
対策案ですがこんな感じかなぁ。
TCHAR xxx[MAX_PATH]
してstrcpy
するstd::make_unique<TCHAR[]>
してstrcpy
する- 上記どちらかの後 独自関数
SplitPath_FolderAndFile
を使う - パス分割用のグローバル関数を新設する
個人的に #613 の対策案は違うと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
「文字列取得バッファとしてのstd::string - yohhoyの日記」
新規格に限定すると許されてしまうわけですが。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
stringに格納したところで、c_str()
を使ってC関数に渡すことしかしていないですから、
TCHAR xxx[MAX_PATH]
してstrcpy
する
で十分なのではと思うわけですが、C++11以降ならば規格上問題ないということであれば、まあいいのかもしれません。(リンク先のように&strFolder[0]
と書いた方がすっきりしてると思いますが。)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PathRemoveFileSpecW をつかないようにするために
#613 を作成しました。
#613 (comment)
に基づき 008e210 で修正しました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
動作確認してみたところ問題無く動いていると思います。
共通設定のメインメニューのプロパティシートでは種別の「ファイル操作系」のリストの下の方に「ファイルの場所を開く」と「コマンドプロンプトを開く」の項目がありますが、共通設定のツールバーのプロパティシートには無いのが気になりましたがそもそもアイコンがまだ無いからですねきっと…。
はい、そうです。 共通設定 ⇒ ツールバータブ のリストに表示させるコードは書いていません。 |
明日マージするので、反対の人はそれまでにお願いします。 |
「コマンド ウィンドウをここで開く(&W)」というのは毎日使う機能です。主に svn や git のために。 今サクラエディタで Ctrl+F5 を押すと入力欄には「cmd」とだけ入っていました。出力を取り込まない設定で実行するとファイルの場所でコマンドプロンプトが開くわけですね。反対があるわけがありません。 |
突っ込んだほうがいいかな?
1438行目。ニーモニックが指定されてないです。
こういうコメントがありますが、現在のサクラエディタはニーモニックがかぶっても大丈夫なようになっているので、安心してテキトーに決めて大丈夫です。 どうでもいいけど、(&W)なんですね。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
既にLGTM出てますが、重ねてapprove出します。
思ったこと何点か書きましたけど、気になったら誰かが対応する、で進めてよりと思っています。
approve いただきましたが、指摘に対応しました。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
メニューの項目にアクセスキーが付いて効く事を確認しました。
…nd-prompt コマンドプロンプトを開くためのメニューを実装
#556: コマンドプロンプトを開くためのメニューを実装
(powershell は別 PR で)
#549 の真似をして実装
ヘルプは未実装です。(#599 のマージ後にこの PR に積みます)