1 件の投稿を表示中 (合計 1 個)
  • 作成者
    投稿
  • #10389
    takuya
    参加者

    拡張子がないファイルはShebangを見て表示設定を設定します。

    マクロをファイル開いたとき実行にセットして使うと便利です

    //shebang を使ってファイルの表示設定をする
    //shebang とは UNIXで主に使われる、ファイルの一行目のこと
    // #!/usr/bin/env ruby
    // #!/usr/bin/python
    // #!/bin/bash
    //などのこと

    //画面の表示を停める
    Window.Redraw =false

    //拡張子があるかチェック.拡張子が無ければTrue
    function has_not_ext(filename){
    return filename.split(“.”).length==1
    }
    //今のカーソル状態を保存する
    function current_cursor(){
    return [
    document.selection.GetActivePointX(eePosLogical),
    document.selection.GetActivePointY(eePosLogical)];
    }
    //Shebangらしきモノを処理する
    function cmd_from_shebang(shebang){
    // #!/usr/bin/ruby -ku のようなモノを処理する
    shebang=shebang.replace(/^s+|s+$/g, “”).split(‘-‘).shift()
    // #!/usr/bin/env python のようなモノを処理する
    cmd=shebang.replace(/^s+|s+$/g, “”).split(‘ ‘).pop()
    if(cmd==shebang){
    // #!/usr/bin/ruby のようなモノを処理する
    cmd = shebang.replace(/^s+|s+$/g, “”).split(‘/’).pop()
    }
    return cmd
    }
    //EmEditorの表示設定と関連付けが無いか調べる.
    function emeditor_has_config(cmd){
    cmd = cmd.toLowerCase()
    cfgs = new Enumerator( editor.Configs );
    for( ; !cfgs.atEnd(); cfgs.moveNext() ){
    cfg = cfgs.item();
    //コンフィグ名と同じであればConfig名を返す
    if( cmd == cfg.Name.toLowerCase() ){
    return cfg.Name;
    }
    //コンフィグ名と一致しないときは関連付け拡張子を調べる
    for(list = new Enumerator( cfg.Association.List ); !list.atEnd(); list.moveNext() ){
    item = list.item();
    if( cmd == item.Name.toLowerCase() ){
    return cfg.Name
    }
    }
    }
    return false;
    }

    //一行目を読み出す.
    if(has_not_ext(Document.Name)){
    curr = current_cursor()
    document.selection.StartOfDocument();
    document.selection.SelectLine();
    shebang = document.selection.Text;
    if(shebang.match(/^#!/)){
    cmd= cmd_from_shebang(shebang);
    name = emeditor_has_config(cmd);
    if(name){
    document.ConfigName = name
    }
    }
    document.selection.SetActivePoint(eePosLogical,curr[0],curr[1]);
    }
    Window.Redraw =true;

1 件の投稿を表示中 (合計 1 個)
  • このトピックに返信するにはログインしてください。