[ 新規に投稿する ]

URL、ファイルパスなどをダブルクリックで起動などに関する要望No.03479
vauhatto さん 12/11/03 01:54 [ コメントを投稿する ]
  秀まるお様


1.ファイルパスやフォルダーパスなどをダブルクリックで起動
・ファイルのパスなんかをメール本文に貼り付けて、この資料は、ここにあるよ
〜みたいな感じでよくメールしたり、受け取ったりするのですが、そのとき、メ
ール文のファイルパスをダブルクリックしたら、フォルダーやファイルが開くよ
うにするようにできれば、非常に便利だと思うので、検討の方をお願いします。

・例えば、<> とか、"" に囲まれているパスを強調表示するようにすれば、半角
スペース等が入っているパスにも対応するのではと思います。
(例)
   <\\abcdef\abcdef\abcdef\abcdef ghij\>

・「右クリック→フォルダー&ファイルパスの挿入」というのもいいのかもしれ
ません。


2.URLの途中スペースが入ると、URLリンクパスが分断されるので、改善して欲
    しい

・URLの途中にスペースが入ると、URLリンクパスが分断されるので、<> とか、
"" に囲まれているURLは、分断しないなどの対策をして欲しいです。

・file:/// や FTPについても、同様にお願いします。
[ ]
RE:03479 URL、ファイルパスなどをダブルクリックで起動などに関すNo.03483
h-tom さん 12/11/03 14:14 [ コメントを投稿する ]
 
h-tom です。

>1.ファイルパスやフォルダーパスなどをダブルクリックで起動
<省 略>
>2.URLの途中スペースが入ると、URLリンクパスが分断されるので、改善して欲
>    しい
現状でも、設定にもよりますが、日本語やスペースが含まれない場合は、ファイルパス
はダブルクリックで開きますよ。
日本語を含む場合や、「""」や「<>」で囲まれた場合なども、
  「Email,URL,ファイル名のカラー表示のカスタマイズ」
で、正規表現使えば可能でしょう。
(「記号類の表示とカラー」から、ファイル名やURLを選択してカスタマイズを選ぶ)

個人的には、ファイルパスに関しては範囲選択して「...を開く」で済ましてますけど。
[ ]
RE:03483 URL、ファイルパスなどをダブルクリックで起動などにNo.03487
秀まるお さん 12/11/03 19:41 [ コメントを投稿する ]
   h-tomさんにコメントしていただいた通りではありますが、僕からもコメント
させていただきますと…

 ファイル名のカラー化機能はありますが、果たして何を「ファイル名」として
認識するかどうか、今までにもいろいろご意見があって、こちらとしても「あち
らをたてればこちらがたたず」的になってしまって対応に苦慮する時期がありま
した。それで、何をもってファイル名と扱うかについては、標準の設定で気に入
らない場合は、正規表現でユーザー様の方で定義してもらう仕様にしました。

 その設定は、「全般的な設定・メール表示」の「記号類の表示とカラー」から、
さらに「場所の一覧」から「ファイル名と思わしき場所」を選択して、右側に出
てくる「カスタマイズ」ボタンを押していただく形になります。

 (かなり奥深い所にあって分かりにくいのですけども、その辺はご勘弁くださ
い)



 URLのカラー化についてもそうでして、たとえば日本語URLがうまくカラー化さ
れないからバグじゃないかって話もあったりしますが、それを認めてしまうとた
とえば全角の()の中にURLを書いたりしたのが余計にカラー化されたりするし、
これまた「あちらをたてれば…」的なことが出てきてしまいます。

 ということで、すみませんが正規表現でうまく指定してやってほしいです。

 ただ、正規表現で実際指定してみても、じゃぁそれで万能になるかというと、
なかなか思うようにいかないケースが多々出てきます。その度に正規表現とにら
めっこするのも実際問題大変なので、結局の所、h-tomさんの話にあるように、

> 個人的には、ファイルパスに関しては範囲選択して「...を開く」で済ましてますけ
> ど。

 となってしまうかなぁという気がします。

 なかなか難しいです。
[ ]
RE:03487 URL、ファイルパスなどをダブルクリックで起動などにNo.03507
vauhatto さん 12/11/09 21:06 [ コメントを投稿する ]
  秀まるお 様

>  URLのカラー化についてもそうでして、たとえば日本語URLがうまくカラー化さ
> れないからバグじゃないかって話もあったりしますが、それを認めてしまうとた
> とえば全角の()の中にURLを書いたりしたのが余計にカラー化されたりするし、
> これまた「あちらをたてれば…」的なことが出てきてしまいます。

>  ということで、すみませんが正規表現でうまく指定してやってほしいです。


 カラー表示カスタマイズの、ホームページURLを自動判断から、正規表現で指
定(正規表現を選択したときに初期に表示される正規表現)で、設定完了したと
ころ、次のURL等について、カラー表示しなくなりました。(自動判別より、機
能が劣化しました)

 ・<file:C:\Windows> は、カラー表示しない。
 ・また、<>で囲まれていた日本語を含むURLについて、カラー表示しなくなった。

 自動判別については、正規表現で制御しているのかどうかはわかりませんが、
自動判別時のカラー表示を、正規表現で提示頂くことは可能でしょうか?

 私のスキルでは、それを改良するくらいしかできません。


>  ただ、正規表現で実際指定してみても、じゃぁそれで万能になるかというと、
> なかなか思うようにいかないケースが多々出てきます。その度に正規表現とにら
> めっこするのも実際問題大変なので、結局の所、h-tomさんの話にあるように、
>
> > 個人的には、ファイルパスに関しては範囲選択して「...を開く」で済ましてますけ
> > ど。

>  となってしまうかなぁという気がします。

>  なかなか難しいです。

 ファイルパスに関しては範囲選択して「...を開く」は、知りませんでした。
 h-tom様、秀まるお 様 、ありがとうございました。

 ちなみに、範囲選択して「...を開く」について、URLやパスなど、改行コード
や、引用符を無視して開くような、仕様にすることは可能でしょうか?
 特に改行コードを無視する仕様は、とても便利だと思います。

[ ]
RE:03507 URL、ファイルパスなどをダブルクリックで起動などにNo.03508
秀まるお さん 12/11/09 21:44 [ コメントを投稿する ]
  >  自動判別については、正規表現で制御しているのかどうかはわかりませんが、
> 自動判別時のカラー表示を、正規表現で提示頂くことは可能でしょうか?

 標準のカラー化処理は正規表現では処理してなくて,それを正規表現で正確に
表現させるのはちょっと難しいです。

 とりあえず「file:」もカラー化するなら、

    (https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+

 となってる標準の正規表現を、

    (https?|ftp|file)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+

 にすればいいです。他、とにかく「http: https: ftp: file:」で始まる物は全部ってことでしたら、

    (https?|ftp|file)://[^ \t]+

 にしてしまってもいいんじゃないかと思います。

 <http://....>

    (https?|ftp|file)://[^ \t>]+

 とかでどうでしょうか。URLから除外したい文字を[^...]の中に指定してやれ
ばいいんじゃないかと思います。

>  ちなみに、範囲選択して「...を開く」について、URLやパスなど、改行コード
> や、引用符を無視して開くような、仕様にすることは可能でしょうか?

 改行コードを除去する程度ならやってもいいかなぁとは思いますが、これまた
人それぞれ除外したい文字が異なるってことるなると、そういうカスタマイズま
で対応しなくて大変ってことになって、だとすると、マクロでやってくださいっ
て話になりそうです。

 マクロでやるとしたら、とりあえず改行コードを除いて開くなら、


    $s = gettext( seltopx, seltopy, selendx, selendy, 1 );
    #i = 0;
    #len = strlen($s);
    while( #i < #len ) {
        #code = ascii( midstr( $s, #i, 1 ) );
        if( #code == '\n' || #code == '\r' ) {
            $s = leftstr( $s, #i ) + midstr( $s, #i + 1, 9999 );
            #len = #len - 1;
        } else {
            #i = #i + 1;
        }
    }
    openbyshell $s;
    if( ! result ) {
        message "オープン失敗: " + $s;
    }

 になります。

 行頭にある「>」の類を省くとしたら、こんなマクロかなぁと思います。


    $s = gettext( seltopx, seltopy, selendx, selendy, 1 );
    while(1) {
       $top = leftstr( $s, 1 );
       if( $top == " "
        || $top == ">"
        || $top == "|" ) {
          $s = midstr( $s, 1, 9999 );
       } else {
           $top = leftstr( $s, 2 );
           if( $top == " "
            || $top == ">"
            || $top == "|"
            || $top == "》" ) {
              $s = midstr( $s, 2, 9999 );
           } else {
               break;
           }
    }
    #i = 0;
    #len = strlen($s);
    while( #i < #len ) {
        #code = ascii( midstr( $s, #i, 1 ) );
        if( #code == '\n' || #code == '\r' ) {
            $s = leftstr( $s, #i ) + midstr( $s, #i + 1, 9999 );
            #len = #len - 1;
        } else {
            #i = #i + 1;
        }
    }
    openbyshell $s;
    if( ! result ) {
        message "オープン失敗: " + $s;
    }
[ ]
RE:03508 ・・で開く(改行コード等除外)マクロに関することNo.03510
vauhatto さん 12/11/10 00:46 [ コメントを投稿する ]
  秀まるお様

> >  ちなみに、範囲選択して「...を開く」について、URLやパスなど、改行コード
> > や、引用符を無視して開くような、仕様にすることは可能でしょうか?

>  改行コードを除去する程度ならやってもいいかなぁとは思いますが、これまた
> 人それぞれ除外したい文字が異なるってことるなると、そういうカスタマイズま
> で対応しなくて大変ってことになって、だとすると、マクロでやってくださいっ
> て話になりそうです。

>  マクロでやるとしたら、とりあえず改行コードを除いて開くなら、

> <省略>

>  になります。

 マクロ動きました。ありがとうございました。非常に便利です。

 ちなみに、ドラッグした文字列について、

\n[  ]*([>>||》][  ]*)*    (正規表現) 

を含む文字列を、除外して 開くマクロはどうなるのでしょうか?
・作成頂いた、マクロで、"#code ==" の条件を増やすだけでは、できそうにな
かったので、よろしくお願いします。

=====
(例1)
http://www.yahoo.
> > >  co.jp/

↓↓↓↓↓

http://www.yahoo.co.jp/

=====
(例2)
C:\
> > >  Program Files

↓↓↓↓↓

C:\Program Files
[ ]
RE:03510 ・・で開く(改行コード等除外)No.03511
山紫水明 さん 12/11/10 10:31 [ コメントを投稿する ]
   vauhattoさん,

>・作成頂いた、マクロで、"#code ==" の条件を増やすだけでは、できそうにな
>かったので、よろしくお願いします。

1バイト文字と2バイト文字が混在しているとこのままではうまくいかないでしょう。
次のようにしたらどうでしょう。
//-----------------------------------------------------------
$s = gettext( seltopx, seltopy, selendx, selendy, 1 );
#i = 0;
#len = strlen($s);
while( #i < #len ) {
    #code = ascii( midstr( $s, #i, 1 ) );
    if( #code == '\n' 
        || #code == '\r'
        || #code == ' '
        || #code == '>'
        || #code == '>' ) {
        $s = leftstr( $s, #i ) + midstr( $s, #i + 1, 9999 );
        #len = #len - 1;
    } else {
        #i = #i + 1;
    }
}
#i = 0;
#len = strlen($s);
while( #i < #len ) {
    #code = ascii( midstr( $s, #i, 2 ) );
    if( #code == ' '
        || #code == '>'
        || #code == '》' ) {
        $s = leftstr( $s, #i ) + midstr( $s, #i + 2, 9999 );
        #len = #len - 2;
    } else {
        #i = #i + 1;
    }
}
openbyshell $s;
if( ! result ) {
    message "オープン失敗: " + $s;
}
endmacro;
//-----------------------------------------------------------

次のような書き方もできると思います。
//-----------------------------------------------------------
$s = gettext( seltopx, seltopy, selendx, selendy, 1 );
#i = 0;
#len = wcslen($s);
while( #i < #len ) {
    #code = ascii( wcsmidstr( $s, #i, 1 ) );
    if( #code == '\n' 
        || #code == '\r'
        || #code == ' '
        || #code == '>'
        || #code == '>'
        || #code == ' '
        || #code == '>'
        || #code == '》' ) {
        $s = wcsleftstr( $s, #i ) + wcsmidstr( $s, #i + 1, 9999 );
        #len = #len - 1;
    } else {
        #i = #i + 1;
    }
}
openbyshell $s;
if( ! result ) {
    message "オープン失敗: " + $s;
}
endmacro;
//-----------------------------------------------------------

あるいは,
//-----------------------------------------------------------
loaddll "HmJre.dll";
$s = gettext( seltopx, seltopy, selendx, selendy, 1 );
$s = dllfuncstr( "ReplaceRegular", "[  >>》\n\r\n]", $s, 0, "", 1 );
openbyshell $s;
endmacro;
//-----------------------------------------------------------

                          山紫水明
                          SANSHISUIMEI
[ ]
RE:03511 ・・で開く(改行コード等除外)No.03513
vauhatto さん 12/11/10 23:20 [ コメントを投稿する ]
  山紫水明 様

 サンプルの作成、ありがとうございました。

 参考にさせて頂き、作成したところ、次の、半角スペースが空いているファイ
ルパスも、思い通りに開くことができました。

---------------
> > C:\
> >  >      
> > >     Program 
   Fil
   es

↓↓↓↓↓↓

C:\Program Files


にして開く。
---------------

//・・・で開く(引用符、改行コード無視).mac-----------------------
loaddll "HmJre.dll";
$s = gettext( seltopx, seltopy, selendx, selendy, 1 );
$s = dllfuncstr( "ReplaceRegular", "(^|\n|\r)[  ]*([<>>||》][  ]*)*", $s, 0, "",9999);
// $s = dllfuncstr( "ReplaceRegular", "[  ]*([>>||》][  ]*)+", $s, 0, "",9999);
openbyshell $s;
if( ! result ) 
{
    message "オープン失敗: " + $s;
}
endmacro;
//-----------------------------------------------------------

 思い通りにできたのですが、何点か質問がありますので、よろしければ教えて
ください。

@上記マクロに、

$s = dllfuncstr( "ReplaceRegular", "[  ]*([>>||》][  ]*)+", $s, 0, "",9999);

を追加すると、$s の値が空欄になる理由。



A
$s = dllfuncstr( "ReplaceRegular", "(^|\n|\r)[  ]*([<>>||》][  ]*)*", $s, 0, "",9999);
では、改行コードは、削除されるが、

$s = dllfuncstr( "ReplaceRegular", "(\n)[  ]*([>>||》][  ]*)*", $s, 0, "",9999);
では、改行コードが削除されない理由。

B
$s = dllfuncstr( "ReplaceRegular", "(^|\n|\r)[  ]*([<>>||》][  ]*)*", $s, 0, "",9999);

の、"0" 及び、"9999" は、何を意味するのか?


以上よろしくお願いします。

[ ]
RE:03513 ・・で開く(改行コード等除外)No.03514
h-tom さん 12/11/11 01:30 [ コメントを投稿する ]
 
h-tom です。

ReplaceRegular に関しては、秀丸メール本体と同じ所にある、Hmjre.dllのヘルプ
(HmJre.chm)を参照して下さい。

>@上記マクロに、
>
>$s = dllfuncstr( "ReplaceRegular", "[  ]*([>>||》][  ]*)+", $s, 0, "",99
>99);
>
>を追加すると、$s の値が空欄になる理由。
ヒットしていないから。& 第5引数が2でないから。
ReplaceRegular は正規表現にヒットしない場合は、""を返す。

>A
>$s = dllfuncstr( "ReplaceRegular", "(^|\n|\r)[  ]*([<>>||》][  ]*)*", $s,
> 0, "",9999);
>では、改行コードは、削除されるが、
>
>$s = dllfuncstr( "ReplaceRegular", "(\n)[  ]*([>>||》][  ]*)*", $s, 0, "
>",9999);
>では、改行コードが削除されない理由。
gettextで取り込んだ改行コードは\r\nなので、\rが残っているから。

>B
>$s = dllfuncstr( "ReplaceRegular", "(^|\n|\r)[  ]*([<>>||》][  ]*)*", $s,
> 0, "",9999);
>
>の、"0" 及び、"9999" は、何を意味するのか?
引数に関しては、ヘルプ参照のこと。
まぁ、"9999"は、間違いでしょう。2 が無難なところかな?
[ ]
RE:03514 ・・で開く(改行コード等除外)No.03520
vauhatto さん 12/11/11 14:33 [ コメントを投稿する ]
  h-tom 様

丁寧な回答ありがとうございました。
おかげさまで、理解できました。
[ ]
RE:03510 ・・で開く(改行コード等除外)マクロに関することNo.03532
vauhatto さん 12/11/19 00:38 [ コメントを投稿する ]
 
 次のマクロで、ドラッグ部を開くとき、メールアドレス(改行ありなし共に)
を開くことができないので、メールアドレスを開く方法があれば、教えてくださ
い。

//   …を開く(改行・引用符・行頭スペース無視)マクロ-------
loaddll "HmJre.dll";
$s = gettext( seltopx, seltopy, selendx, selendy, 1 );
$s = dllfuncstr( "ReplaceRegular", "(^|\n|\r)[  ]*([<>>||》][  ]*)*", $s, 0, "",2);
$s = dllfuncstr( "ReplaceRegular", "[  ]*([>>||》][  ]*)+", $s, 0, "",2);
$s = dllfuncstr( "ReplaceRegular", "[\n\r\n]", $s, 0, "", 2 );

openbyshell $s;
if( ! result ) 
{
    message "オープン失敗: " + $s;
}
endmacro;
//-----------------------------------------------------------
[ ]
RE:03532 ・・で開く(改行コード等除外)マクロに関することNo.03534
秀まるお さん 12/11/19 10:42 [ コメントを投稿する ]
   メールアドレスは先頭に「mailto:」を付けてやらないと関連づけで開く動作
にならないので、マクロでやるとしたら、以下のようにしたらいいかと思います。

 FindRegularしてるのは、選択した文字列がメールアドレスかどうかの判定を
してるだけで、もっと簡単に「strstr( $s, "@" ) >= 0」のようにしてもいいか
と思います。



//   …を開く(改行・引用符・行頭スペース無視)マクロ-------
loaddll "HmJre.dll";
$s = gettext( seltopx, seltopy, selendx, selendy, 1 );
$s = dllfuncstr( "ReplaceRegular", "(^|\n|\r)[  ]*([<>>||》][  ]*)*"
                , $s, 0, "",2);
$s = dllfuncstr( "ReplaceRegular", "[  ]*([>>||》][  ]*)+", $s, 0, "",2);
$s = dllfuncstr( "ReplaceRegular", "[\n\r\n]", $s, 0, "", 2 );

if( dllfunc("FindRegular"
    , "^[a-z][a-z0-9-.~]*@[a-z0-9-~]+\\.[a-z0-9-~.]+$", $s, 0) >= 0 ) {
    $s = "mailto:" + $s;
}

openbyshell $s;
if( ! result ) 
{
    message "オープン失敗: " + $s;
}
endmacro;
//-----------------------------------------------------------
[ ]

[ 新規に投稿する ]