要望:読み込み時にSPACE->TABNo.18178
よしおか さん 04/10/21 20:24
 
はじめまして、初めて書き込みさせて頂きます、よしおかと申します。
主にC言語を利用する、プログラマーです。

仕事の一部のプロジェクトで「インデントはスペースで」ということになってしまい
ました。
自分としてはインデントはタブ(4)で今まで利用していましたので入力はTABキーでイ
ンデントしたいと思っています。
すると既存のファイルを編集時にインデントでスペースとタブが混在することになり、
編集時のカーソル移動やマクロの動作などで、意外と違和感があります。

そこで要望なのですが、
「ファイルを読み込み時にスペースをタブに変換する機能」
が「ファイルタイプ別の設定」で欲しいと思います。
「ファイル保存時のスペース/タブ変換機能」設定を変更て一旦保存し、読み込み直
すことで可能なのですが何とも手数がかかりますし、間違いやすいです。

タブ変換のマクロを教えてもらおうと思ったのですが、手数もかかるし、
保存時にできるなら、読み込み時も容易かな?と思いお願いしてみた次第です。

また、同じ「*.c」でも一つのプロジェクトではTAB=4SPACE、他のプロジェクトではT
AB=4TABということがあるので、簡単にこの設定の切換えができると助かります。
(これこそマクロで実現した方が良いのかな?)
例えば、「ファイルタイプセット」など称して秀丸&常駐秀丸のメニューで選択でき
るようになるとか...。うーん、わがままですね。

何かの修正の折りに検討していただければ幸いです。

[ ]
RE:18178 要望:読み込み時にSPACE->TABNo.18180
よしおか さん 04/10/21 22:56
 
自分でコメントします。

全選択後、[編集]-[変換]のメニューで同じことができますね。
マクロの方が良いかもしれませんね。
編集行の表示をするようにしていると、全行が編集行扱いになってしまい、ちょっと
気になります。

編集時のみタブ(スペース)を使いたいという場合に、なにか良いやり方はないもの
でしょうか?

[ ]
RE:18180 要望:読み込み時にSPACE->TABNo.18183
Takahito さん 04/10/21 23:20
 
よしおかさん、はじめまして。

秀まるおさんからの正式コメント前ですが、失礼いたします。

以前よしおかさんと背景も同じだったため、同じ質問をしましたが取りあえずマ
クロで、という回答をいただきました。

#私もその機能が欲しいと思っているんですが…


簡単ですが下記になります。


//---------------- totab.mac ------------------------------------------//

disabledraw;
selectall;
totab;
escape;
save;
enabledraw;
prevpos;
endmacro;

// ここまで------------------------------------------------------------//


起動と同時にファイル種別を判断してこのマクロを動かせればいいんですが
良くわかりません(^^;

今はファイルのダブルクリック時に秀丸のコマンドラインオプションを使っ
て起動してます。
上記マクロを動かしたくないときは秀丸へドラッグアンドドロップとかしてます。


エクスプローラー→フォルダオプション から、.c等の拡張子を選び、

詳細設定→アクションのopenを選択して「編集」

アクションを実行するアプリケーションの中に、

"C:\Program Files\Hidemaru\Hidemaru.exe" /x totab.mac %1

のように書けばOKです。

>編集行の表示をするようにしていると、全行が編集行扱いになってしまい、ちょっと
>気になります。

こちらは正確な解決になりませんが、(ちょっと邪道ですけど)上記マクロは毎
回saveをいれて編集行の見た目を強引に直してます(^^;
(更新日時が変わってしまってMake等の対象になってしまいますが、元ファイル
  がAllSpaceならsaveしても問題ないはずですよね?)

完全とはいきませんが、かなり近い動作をしてくれると思います。


ご参考になれば…。

[ ]
RE:18183 要望:読み込み時にSPACE->TABNo.18192
よしおか さん 04/10/22 17:08
 
Takahitoさん、マクロありがとうございます。
キーやメニュー登録して一発でできてかなり快適になりました。
とりあえず、これでしばらくしのぎます。

スペース主導のプロジェクトは一部なので、開く時のマクロ実行は
控えましたが、拡張子毎の起動時マクロ組み込みの勉強になりました。
ありがとうございます

>#私もその機能が欲しいと思っているんですが…
私だけのワガママじゃなかったんですね…ちょっとうれしい。

[ ]
RE:18192 要望:読み込み時にSPACE->TABNo.18193
秀丸担当 さん 04/10/22 17:28
 

読み込み時に自動でマクロを実行するようにすることはできません。
現在の所、Takahitoさんの書かれているような方法がいいと思います。

ファイルタイプ別の設定にある、保存するときの変換と同じように、読み込むと
きの変換で空白をタブにすることはできません。
同じような機能が重複することになるので、もし将来的にやるとしたら、ファイ
ルを開いたときに自動実行するマクロをやったほうがいいかもしれません。

[ ]
RE:18183 要望:読み込み時にSPACE->TABNo.18198
プックン さん 04/10/22 22:02
 
>起動と同時にファイル種別を判断してこのマクロを動かせればいいんですが
>良くわかりません(^^;

こんなんでどうでしょ?。
ファイル種別を判定するのは、"filetype"を使用すればいいのでは
ないでしょうか?。

//---------------- totab.mac ------------------------------------------//
$$ver  = "1.00";
$$date = "2004.10.22";
$$author = "プックン" ;
$$fname = currentmacrobasename ;
$info = "\n" + $$fname + " Ver " + $$ver+ "\n最終更新日付:"+$$date ;
$info = $info + "\n作者:"+$$author ;

    //$iniファイル定義
    $ini = hidemarudir + "\\" + "puku.ini";
    //拡張子情報をiniファイルから取得するか、否かの設定。
    #get_info_ini = 1 ;     //0:iniファイルから取得しない。1:取得する。
    //拡張子最大数
    #max_info = 20 ;
    //セクション
    $Section = currentmacrobasename ;
    //キー
    $key = "ext" ;

disabledraw;

if(#get_info_ini == 1){
    call Set_default ;
    call Get_list $ini ,$Section, $key ;
    //戻り値:拡張子定義個数
    #info_num = ##return ;
}
else{
    //拡張子の登録
    //登録数
    #info_num = 0;
    $get_list[#info_num] = ".txt" ;         #info_num = #info_num + 1 ;
    $get_list[#info_num] = ".cpp" ;         #info_num = #info_num + 1 ;
    $get_list[#info_num] = ".c" ;           #info_num = #info_num + 1 ;
    $get_list[#info_num] = ".h" ;           #info_num = #info_num + 1 ;
}

call Get_list $ini ,$Section, $key ;
//filetype  現在編集中のファイルのファイルタイプを表します。すべて小文字です。
ファイルの拡張子を表すときは必ず先頭にピリオド(.)が入ります。
//
//  .xxx        拡張子あり(xxx部に拡張子が入ります。例:test.txtの場合[.txt]
//  .           拡張子なし
//  new         (無題)
//  grep        grep結果
//  exeresult   実行結果
//  webbrowse   Webブラウズモード(Hidemarnet Explorerがインストールされてい
るときのみ)

//開いたファイルの拡張子を取得
$$ext = filetype ;
if  ((leftstr($$ext,1) == ".") &&   //拡張子情報の先頭が"."であること
     (strlen($$ext) != 1)){         //拡張子情報が、"."以外であること
    call Check_ext $$ext ;
    ##Res_check = ##return ;
    if(##Res_check == 0){   //登録拡張子が存在する場合"0"になる
        //現在の位置を記憶
        #x = x ;#y = y ;
        selectall;
        totab;
        escape;
        save;
        escape ;
        enabledraw;
        //マクロ開始位置に移動
        moveto #x,#y;
    }
}

LEND:
    endmacro;

Set_default:
//処理:Iniファイルの各種設定情報がなければびデフォルトを設定する

    //テンプレート名情報
    $$wk = getinistr( $ini , $Section , "#0_" + $key );
    //iniファイルから$Sectionの "#0_" + $keyの情報を取得し、情報が無ければ
    //デフォルト情報を設定する。
    if( $$wk == "" ){
        ##array_cnt = 0;
        $$array[##array_cnt] = ".txt" ;         ##array_cnt = ##array_cnt + 1 ;
        $$array[##array_cnt] = ".cpp" ;         ##array_cnt = ##array_cnt + 1 ;
        $$array[##array_cnt] = ".c" ;           ##array_cnt = ##array_cnt + 1 ;
        $$array[##array_cnt] = ".h" ;           ##array_cnt = ##array_cnt + 1 ;
        ##i = 0 ;
        while( ##i < ##array_cnt ) {
            writeinistr $ini, $Section,  "#" + str( ##i ) + "_"+ $key, $$arr
ay[##i] ;
            //INIファイルにデータを書きこむ文です。
            //writeinistr INIファイル名, セクション名, キー名, 文字
            //writeinistr "HIDEMARU.INI", "Option", "RefMark", ">> ";
            ##i = ##i + 1;
        }
        message currentmacrobasename + "\nマクロ" +
                "設定情報を下記場所\n" +
                "  " + $ini + "\n" +
                "に作成しました。";
    }
return ;

Get_list:
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第二引数: 文字列型,listを取得するiniファイルのkeyを指定
    //keyは、"#" + 数字 + 指定文字列
    //を連結した文字列をgetinistrにて使用
    $$key = $$3;
    //戻り値
    //取得した配列の数
    //および、グローバル変数 $get_listに取得した配列を保存

    //変数(配列) $get_listの内容を削除
    ##i = 0 ;
    while( $get_list[##i] != "" ) {
        //変数の値削除
        $get_list[##i] = "" ;
        ##i = ##i + 1;
    }

    ##menu_su = 0 ;     //初期化
    while( ##menu_su < #max_info )
    {
        //INIファイルから文字列を取りだします。
        //getinistr( s1, s2, s3 )
        //s1がiniファイル名、s2がセクション名、s3がキー名です。
        $$wk = getinistr( $ini , $$Section , "#" + str( ##menu_su ) +"_"+ $$
key );
        if( $$wk == "" )
        {
            break;
        }
        $get_list[##menu_su] = $$wk ;
        ##menu_su = ##menu_su + 1;
    }

return ##menu_su ;

Check_ext:
//引数渡し
//第一引数: 文字列型,チェック対象拡張子情報
//戻り値
//0:登録拡張子が存在する。
//1:登録拡張子は存在しない。
$$str = $$1;
    //登録拡張子と、チェック対象拡張子情報を比較する。
    ##i = 0 ;
    ##flag = 0 ;
    while( ##i < #info_num ) {
        if($$str == $get_list[##i]){
            ##flag = (##flag | 0x01) ;
            break ;
        }
        ##i = ##i + 1;
    }
   
    ##flag = ##flag ^ 0x01 ;    //bit反転
return ##flag ;
//---------------- totab.mac ------------------------------------------//

[ ]
RE:18198 要望:読み込み時にSPACE->TABNo.18210
Takahito さん 04/10/27 10:12
 
プックンさん、こんにちは。Takahitoです。

In article 2004/10/22 22:02:18,
subject "hidesoft.2:18198| RE 18183 要望:読み込み時にSPACE->TAB",
プックン wrote:
>>起動と同時にファイル種別を判断してこのマクロを動かせればいいんですが
>>良くわかりません(^^;
>
>こんなんでどうでしょ?。
>ファイル種別を判定するのは、"filetype"を使用すればいいのでは
>ないでしょうか?。

どうもありがとうございます!早速利用してみました。大変便利です。
フォローしたつもりが、更に良いものを戴けて大変感激しております。

これでPC毎にいちいち設定しないでも使えるようになりまして、あり
がたい限りです。

またよろしくお願いします。

[ ]