inputchar( s1 )のs1についてNo.00332
つよきち さん 98/12/18 09:54
 
表題の通り、inputchar( s1 )のパラメータs1について質問があります。

s1にfilenameキーワードを指定しますと、タイトルバーにフルパスが表示されますよ
ね。
それで、そのパスが長くなった場合、当然ずらずらとそのパスが表示されます。
ところが、秀丸自身の表示を見てみると、「c:\...\何とか\何とか.txt」のように省
略されて表示されます。
この、省略された表示用のキーワード、もしくはその実現方法は存在するのでしょう
か?

[ ]
RE:00332 inputchar( s1 )のs1についてNo.00335
杉浦 まさき さん 98/12/26 01:54
 
つよきちさん、こんばんは。
 杉浦 まさき です。

>この、省略された表示用のキーワード、もしくはその実現方法は存在するのでしょう
>か?

まず、キーワードはないと思います。

で、マクロでこの表示を実現するには、
 以下のような感じでいいと思います。
 #但し、2バイト文字への対応はサボってます。

//------------------------------------------------------//
$s1 = filename;
call SPLIT $s1, "\\";
#num = ##return;
if( #num > 4 )
    $s1 = $spl[0] + "\\...\\" + $spl[#num-2] + "\\" + $spl[#num-1];
$c = inputchar($s1);
// ...
endmacro;

// 指定文字列を指定文字(列)で分割するサブルーチン
//   $$1 : 分割する文字列
//   $$2 : セパレータとして用いる文字(列)
//   返り値: 分割数
//   #分割された文字列は $spl という配列に格納される。
SPLIT:
    ##l = strlen( $$1 );
    ##p = strlen( $$2 );
    ##a = 0;
    while( 1 ){
//  $$1の最後が$$2だった場合に最後の配列を""として返したければ
//  このすぐ後の一行をコメントアウトして下さい。
        if( !##l ) break;
        ##s = strstr( $$1, $$2 );
        if( ##s == -1 ){
            $spl[##a] = $$1;
            ##a = ##a + 1;
            break;
        }
        $spl[##a] = leftstr( $$1, ##s );
        ##l = ##l - ##s - ##p;
        $$1 = rightstr( $$1, ##l );
        ##a = ##a + 1;
    }
    return ##a;
//--------------------------------------------------------//


[ ]
RE:00335 inputchar( s1 )のs1についてNo.00337
つよきち さん 98/12/26 10:14
 
杉浦まさきさん、こんにちわ
お世話になってます(^-^)
いつもいつも、たいした質問でもないのに、回答、感謝です。

>つよきちさん、こんばんは。
> 杉浦 まさき です。
>
>>この、省略された表示用のキーワード、もしくはその実現方法は存在するのでしょう
>>か?
>
>まず、キーワードはないと思います。
>
>で、マクロでこの表示を実現するには、
> 以下のような感じでいいと思います。
> #但し、2バイト文字への対応はサボってます。
>
>//------------------------------------------------------//
>$s1 = filename;
>call SPLIT $s1, "\\";
>#num = ##return;
>if( #num > 4 )
>    $s1 = $spl[0] + "\\...\\" + $spl[#num-2] + "\\" + $spl[#num-1];
>$c = inputchar($s1);
>// ...
>endmacro;
>
>// 指定文字列を指定文字(列)で分割するサブルーチン
>//   $$1 : 分割する文字列
>//   $$2 : セパレータとして用いる文字(列)
>//   返り値: 分割数
>//   #分割された文字列は $spl という配列に格納される。
>SPLIT:
>    ##l = strlen( $$1 );
>    ##p = strlen( $$2 );
>    ##a = 0;
>    while( 1 ){
>//  $$1の最後が$$2だった場合に最後の配列を""として返したければ
>//  このすぐ後の一行をコメントアウトして下さい。
>        if( !##l ) break;
>        ##s = strstr( $$1, $$2 );
>        if( ##s == -1 ){
>            $spl[##a] = $$1;
>            ##a = ##a + 1;
>            break;
>        }
>        $spl[##a] = leftstr( $$1, ##s );
>        ##l = ##l - ##s - ##p;
>        $$1 = rightstr( $$1, ##l );
>        ##a = ##a + 1;
>    }
>    return ##a;
>//--------------------------------------------------------//
>

なるほど、セパレータの数が一定数以上になると、ケツの2レベルのパスを表示させ
るようになっているわけですね。
ということは、

>if( #num > 4 )

の判定を、

if( XX < strlen(filename) )

にすると、XX文字を超えたら、というふうにも出来そうですね。
(秀丸は、どうも文字数で判定しているようです。)

どうもありがとうございます。

追伸
鯖、ごくろうさまです。
時間を見つけて、とりあえず遊んでみようと思ってます。
(しかし、秀丸+田楽鯖があったら他は何も要らないと思う位、異常(^^;)に強力です
ね。
ここまで来たら、開発用にVisual田楽鯖とかReleaseされては如何ですか?(^^;))

[ ]
RE:00337 inputchar( s1 )のs1についてNo.00339
杉浦 まさき さん 98/12/28 00:40
 
つよきちさん、こんばんは。
 杉浦 まさき です。

>if( XX < strlen(filename) )
>にすると、XX文字を超えたら、というふうにも出来そうですね。
>(秀丸は、どうも文字数で判定しているようです。)

確かにそちらの方が自然ですね。
 というわけで、そのように直して下さい(^^;。


>ここまで来たら、開発用にVisual田楽鯖とかReleaseされては如何ですか?(^^;)

う〜ん、やれないこともないんですが…
 #少なくとも鯖を作るよりは簡単だろうと…(^^;。
 当面は鯖本体に集中するつもりなんで、
 やるとしても大分後の話になると思いますm(_ _)m。


[ ]