「
選択範囲のURL・パスを開く
」を編集中
2018年12月5日 (水) 22:37時点における
Sukemaru
(
トーク
|
投稿記録
)
による版
(
→
ソースコード
)
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
ナビゲーションに移動
検索に移動
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
ダメ文字を含むためにダブルクリックやコンテキストメニューの「URLを開く」コマンドで開けない URL 文字列を既定のブラウザで開きます。<br> '''mailto:''' が付いていないメールアドレスも開きます。 また、文字列がファイルやフォルダのパスであればこれも既定のプログラムで開きます。 仕様についてはソースコードの /**コメントドキュメント*/ を参照してください。 == ソースコード == #title = "選択範囲のURL/パスを開く" #tooltip = "選択範囲のURLやパスを既定のプログラムで開く" // #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",40 /** * ① Meryでは " < > 以外にも ! ' ( ) * [ ] ^ ` { | } が URL のダメ文字扱いになっているが、 * ダメ文字をふくむURL文字列でも既定のブラウザで開く。 * ※多分「日本語URL」にも対応可。 * ※丸投げするだけなので、URLエンコードはブラウザ任せ。 * * ※encodeURI() 関数の行を使用する場合、「%hh」をふくむURL文字列は * パーセントエンコードされたものとし、二重エンコードしない。 * encodeURI() 関数でエスケープされない文字: A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # * ref. encodeURI() - JavaScript | MDN * https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/encodeURI * * ② 選択範囲の文字列がファイルやフォルダのフルパスなら実在確認して既定のプログラムで実行する。 * ※環境変数/短縮パス/shell:コマンドなどは不可。 * * ③ メールアドレスなら既定のメールクライアントでメッセージを新規作成する。 * ※メールアドレスの判定基準はテキトーなので、範囲選択して実行すること。 * * ④ file://~ やネットワークフォルダへの絶対パスなら既定のプログラムで実行する。 * ※実在確認なしで試行する。ファイルやフォルダが実在しない場合に * エラーになることがあるので ④ のコードは初期状態でコメントアウトしてある。 * * ⑤,⑥ 現在のドキュメントのカレントディレクトリからの相対パスとして * ファイルやフォルダの実在確認ができるなら既定のプログラムで実行する。 * ※処理できる ..\相対パス の形式は先頭の '''..\''' または '''.../''' のみで、 * パスの途中にも '''..\''' などがあるものは不可。実在確認の確度は保証なし。 * * ・基本的に範囲選択して実行する前提だが、論理行の文字列を取得して実行させることもできる。 * 選択範囲や行の先頭/末尾の「空白文字」「 "" 」「 <> 」は無視するが、 * それ以外の余計な文字列があるときは実行しない。 * * '''以下のような文字列/論理行を開くことができる''' ▼ 日本語や半角スペースなどのダメ文字を含むURL ▼ https://www.haijin-boys.com/wiki/<nowiki>よくある質問#.E6.97.A5.E6.9C.AC.E8.AA.9E.E3.82.92.E5.90.AB.E3.82.80_URL_.E3.82.92.E8.AA.8D.E8.AD.98.E3.81.97.E3.81.9F.E3.81.84</nowiki> https://www.haijin-boys.com/wiki/<nowiki>マクロリファレンス:Selection インターフェイス</nowiki> ▼ "mailto:" のないメールアドレス ▼ < hogehoge@example.com > ▼ ファイル/フォルダパス ▼ C:\Program Files "c:\windows\system32\notepad.exe" file:///c:\boot.ini ▼ 相対パス(このマクロを Mery\Macros フォルダに保存している場合)▼ ..\Mery.txt * */ <source lang="javascript"> // 選択範囲がないときは論理行を選択して先頭/末尾の空白文字と " < > を除去 var s = document.selection; var line = document.GetLine( s.GetActivePointY( mePosLogical ), 0 ); var st = ( s.IsEmpty ? line : s.Text ).replace( /^[\s "<>]*|[\s "<>]*$/g , "" ); var WshShell = new ActiveXObject( "WScript.Shell" ); var Fso = new ActiveXObject( "Scripting.FileSystemObject" ); Status = ""; if ( st.match( /\n(?!$)|["<>]/ ) ) Status = " URL/パス として開けませんでした"; // ①文字列がURLなら既定のブラウザで開く else if ( st.match( /^https?:\/\// ) ) WshShell.Run( '"' + st + '"' ); //WshShell.Run( st.match( /%[0-9a-f]{2}/i ) ? st : encodeURI( st ) ); // ②文字列がファイル/フォルダパスなら既定のプログラムで開く(実在確認して実行) else if ( Fso.FileExists( st ) || Fso.FolderExists( st ) ) WshShell.Run( '"' + st + '"' ); // ③文字列がメールアドレスなら既定のメールクライアントで開く(エンコードなし) else if ( st.match( /\S+@\S+\.\S+/ ) ) WshShell.Run( "mailto:" + st.replace( /^mailto:/ , "" ) ); // ④文字列が file:// ~ などの場合(実在確認なし、エンコードなしで実行) // else if ( ! st.match( /[,;"*?<>|]/ ) && st.match( /(?:\:\/{2,3}|:\\|^\\\\)[^\\/:,;"*?<>|]/ ) ) // WshShell.Run( '"' + st + '"' ); // ⑤文字列がカレントフォルダ内の相対パスの場合(実在確認して実行) else if ( st.match( /^(?!\.)[\\/]?(?:[^\\/:,;"*?<>|]+[\\/])*[^\\/:,;"*?<>|]+(?:\.\w+)?$/ ) ) { var relativePath = document.Path + "\\" + st; if ( Fso.FileExists( relativePath ) || Fso.FolderExists( relativePath ) ) WshShell.Run( '"' + relativePath + '"' ); } // ⑥文字列が ..\相対パス の場合(実在確認して実行) else if ( st.match( /^\.+(?:[\\/][^\\/:,;"*?<>|]+)+/ ) ) { var dotCount = st.search( /[\\/]/ ); var pathArray = document.Path.replace( /\\/g , "/" ).split( "/" ); for( var i = 0; i < dotCount; i ++ ) pathArray.pop(); var relativePath = pathArray.join( "\/" ) + "\/" + st.replace( /^\.+[\\/]/ , "" ); if ( Fso.FileExists( relativePath ) || Fso.FolderExists( relativePath ) ) WshShell.Run( '"' + relativePath + '"' ); } else { Status = " URL/パス として開けませんでした"; } </source> == メモ == 試作品です。動作の確実性については全く自信ありません。<br> 一応、相対パスで記述した M3U プレイリストファイルからメディアファイルを開くことはできるようです。(2018/12/05 sukemaru) * ascii 文字 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ * Mery のエディタ上で URL として扱われる文字群(ascii) [-\\0-9A-Z_a-z#$%+,./=?@~&:;] <nowiki>http://example.com/#$%+,-./0123456789=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~&:;\</nowiki> * Mery における URL のダメ文字群(ascii) [ !"'()*<>\[\]^`{|}] <nowiki>http://example.com/!"'()*<>[]^`{|}</nowiki> * ファイル名のダメ文字 \ / : , ; " * ? < > |
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク