ページ:[ ] [1] [2] [3] [4] [5] [6] [7] [8] [ ]
617
2017/3/30 (木) 02:53:41  
[617] 行を選択するマクロについて

テキスト非選択状態の時、下記のマクロを実行させると、

if(Editor.IsTextSelected() == 0) {
  Editor.GoLineTop(1000);
  Editor.GoLineEnd_Sel(0x08);
}

行を折り返しているか、いないか、にかかわらず、同じように
先頭の半角スペースを除外して、その行を選択してくれます。

しかし、キャレット(カーソル)が、行頭の最後の半角スペースと
最初の文字の間にある場合だけは例外で、行頭の半角スペースを
含んで、選択してしまうようです。(sakura 2.3.1.0)

これは仕方がないことでしょうか。
いっち
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36


2017/3/30 (木) 19:51:22  
[618] Re:行を選択するマクロについて

▼ いっちさん
>   Editor.GoLineTop(1000);
これはGoLineTo(0x3e8)なので
http://sakura-editor.sourceforge.net/htmlhelp2/HLP000224.html
改行単位の行頭に移動します。

>しかし、キャレット(カーソル)が、行頭の最後の半角スペースと
>最初の文字の間にある場合だけは例外で、行頭の半角スペースを
>含んで、選択してしまうようです。(sakura 2.3.1.0)
これは仕様です。
先頭の空白の後ろ側の位置にカーソルがある場合は、行頭(^)に移動します。
複数回実行するとこの2か所を往復します。

未テストですがこんな感じですかね。

Editor.GoLineTop(8);
var x = Editor.ExpandParameter("$x") - 0;
if( x == 1 ){
    // 行頭に移動ならスペースの後ろへもう一度移動
    Editor.GoLineTop(8);
}
Editor.GoLineEnd_Sel(0x08);
こういう風に対処するか

var s = Editor.GetLineStr(0);
var len = s.match(/^[\s]*/)[0].length;
var y = Editor.ExpandParameter("$y") - 0;
Editor.MoveCorsor(y, len + 1, 0);
Editor.GoLineEnd_Sel(0x08);
でデータを取ってきて自力で移動する必要があります。
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0


2017/3/30 (木) 20:49:21  
[619] Re2:行を選択するマクロについて

▼ もかさん

お返事ありがとうございます。

何故か、Editor.MoveCorsor(y, len + 1, 0);
の行でエラーが出る為、標準のサクラエディター 2.3.1.0にて、
MoveCorsor というのがあるかどうか(私には)解らなかったのですが、

Editor.GoLineTop(8);
var x = Editor.ExpandParameter("$x") - 0;
if( x == 1 ){
    // 行頭に移動ならスペースの後ろへもう一度移動
    Editor.GoLineTop(8);
}
Editor.GoLineEnd_Sel(0x08);

の方は、正常動作を確認しました。

ありがとうございます。
いっち
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36


2017/3/30 (木) 23:53:33  
[620] Re3:行を選択するマクロについて

×:MoveCorsor
○:MoveCursor
でした。
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0


2017/3/31 (金) 00:26:08  
[621] Re4:行を選択するマクロについて

▼ もかさん
> ×:MoveCorsor
> ○:MoveCursor
> でした。

確認しました。
ありがとうございます。
いっち
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36

614
2017/3/28 (火) 15:16:36  
[614] JavaScriptの正規表現が良くわかりません…

同じ指定でサクラの正規表現置換だと正しく対象になるのですが、
同じ書き方をマクロ内のJavaScriptで指定しても動いてくれません。

癖のような物を把握しようと何回か試行錯誤しましたが、なぜこのような
挙動になるのかまるで理解が及ばず…

私の指示の正しく無い所の添削をお願い申し上げます。

状況としては、下のマクロを、//Test文字列 を別タブに複製して置換テスト
しているのですが、実行中、"文字列"を"23"に書き換え "^.*?23.*?$"
として 実行しても、対応行が削除されません。
同じ設定をサクラエディタの置換画面に入力するとただしく該当範囲が
設定されます。(//1234 と //2345 が該当)


”マクロ実行中・・・”の時間設定を調整したい
http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=macro&tree=r570

こちらでキャンセル待ち時間を0にする対応が書いてありましたが、
(気の済むまで入力待ちになる)下のマクロの実行中だけ時間を0にして
マクロ終了時に元の数字に戻す様な事を行いたいのですが可能でしょうか?


// 正規表現を使い、文字列を含む行を削除
function LineDelete(){
  Editor.SelectAll();
  var str = Editor.GetSelectedString(0);    // 選択文字を変数へ
  do {
    var a ="^.*?文字列.*?$";
    a = inputBox("文字列が含まれる行を削除します。※繰り返し実行", a); // キャンセルで停止する
    if (a != "") {
      messageBox("内容は\r\n" + a +"\r\n" + "です。");
      str = str.replace( new RegExp(a,'g'),"");
    }
  } while( a != "" )
  messageBox("キャンセルされたので終了します");
  Editor.InsText( str );
}
LineDelete();

//Test文字列
//1234
//2345
//3456
//4567

もも
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0


2017/3/28 (火) 23:11:57  
[615] Re:JavaScriptの正規表現が良くわかりません…

^と$は、普通だと「全データの先頭と末尾」を指します。
RegExpのところを'mg'にして、マルチラインモードにする必要があると思います。

>マクロの実行中だけ時間を0
そういうことは現在できません。
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0


2017/3/29 (水) 12:18:25  
[616] Re2:JavaScriptの正規表現が良くわかりません…

▼ もかさん
回答ありがとうございます。

> ^と$は、普通だと「全データの先頭と末尾」を指します。
> RegExpのところを'mg'にして、マルチラインモードにする必要があると思います。


mの意味を逆に解釈してました…(mが付くと各行の行頭・行末を認識しない)

> >マクロの実行中だけ時間を0
> そういうことは現在できません。


うう、残念です。
もも
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0

609
2017/1/28 (土) 02:01:43  
[609] プレーンテキストをWZ階層付テキストに変換するマクロ

編集中のプレーンテキストを、インデントに沿ってWZ階層付テキストに変換します。
プレーンテキストを直接、アウトライン解析できれば良いのですが、pluginを作れないので、このマクロで凌いでいます。
Plain2WZTree.vbs:編集中のプレーンテキストをWZ階層付テキストに変換
WZTree2Plain.vbs:編集中のWZ階層付テキストをプレーンテキストに変換

-----------------------------------
Plain2WZTree.vbs
-----------------------------------
'プレーンテキストをWZ階層付テキストに変換
Option Explicit
Dim aIndent_positions() 'インデント位置
ReDim Preserve aIndent_positions(0)
aIndent_positions(0) = -1
Dim nJJ
Dim nTabWidth : nTabWidth = ChangeTabWidth(0) 'タブ幅
'プレーンテキストをWZ階層付テキストに変換
For nJJ = 1 To GetLineCount( 0 )
 Dim xLine : xLine = GetLineStr( nJJ )
 '改行を削除
 xLine = Replace(xLine, vbNewLine, "")
 Dim nII
 Dim nBol_Space : nBol_Space = 0 '行頭スペースの個数
 '行頭スペースの個数を数える
 For nII = 1 To Len(xLine)
  '全角空白はスペース2個分
  If Mid(xLine,nII,1) = " " Then
    nBol_Space = nBol_Space + 1
  Else
   'タブ文字は桁数を計算
   If Mid(xLine,nII,1) = vbTab Then
    nBol_Space = nBol_Space + ( nTabWidth - (nBol_Space mod nTabWidth)-1)
   Else
    If Mid(xLine,nII,1) <> " "   Then
     xLine = Mid(xLine,nII)
     Exit For
    End If
   End If
  End If
  nBol_Space = nBol_Space + 1
 Next
 'プレーンテキストをWZ階層付テキストに変換
 If Len(xLine) = 0 Then
 Else
  If Len(Trim( Replace(xLine, vbTab, ""))) = 0 Then
   Jump(nJJ)
   BeginSelect(0)
   GoLineEnd( )
   InsText ""
  Else
   '階層数を調べ行頭スペースの個数を保存する
   For nII = UBound(aIndent_positions) To 0 Step -1
    If aIndent_positions(nII) < nBol_Space Then
     ReDim Preserve aIndent_positions(nII+1)
     aIndent_positions(nII+1) = nBol_Space
     Exit For
    End If
   Next
   'プレーンテキストをWZ階層付テキストに変換
   xLine = String(nII+1,".") & " " & Trim(xLine)
   Jump(nJJ)
   BeginSelect(0)
   GoLineEnd( )
   InsText xLine
  End If
 End If
Next

-----------------------------------
WZTree2Plain.vbs
-----------------------------------
'WZ階層付テキストをプレーンテキストに変換
Option Explicit
Dim nII
ReDim Preserve aLine(0)
'WZ階層付テキストをプレーンテキストに変換
For nII = 1 To GetLineCount( 0 )
 Dim nJJ : nJJ = 1
 '行頭の"."の個数を調べる
 For nJJ = 1 To Len(GetLineStr( nII ))
  If Mid(GetLineStr( nII ),nJJ,1) <> "." Then Exit For
 Next
 'WZ階層付テキストをプレーンテキストに変換
 If nJJ >= 2 Then
  Call Jump(nII,0)
  BeginSelect(0)
  GoLineEnd( )
  InsText Space(4*(nJJ-2)) & Trim(Mid( Replace(GetLineStr( nII ), vbNewLine, ""),nJJ))
 End If
Next
ysi
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko


2017/1/30 (月) 22:54:40  
[610] Re:プレーンテキストをWZ階層付テキストに変換するマクロ

なかなか興味深い使い方です。
インデント形式が揃っていれば、タブのファイルにも対応しているところがなかなかいいですね。

これを基にプラグインには簡単にできますね。
先頭付近に
Outline.SetTitle("インデントアウトライン")
Outline.SetListType(100) ' ツリー表示
を追加

   xLine = String(nII+1,".") & " " & Trim(xLine)
   Jump(nJJ)
   BeginSelect(0)
   GoLineEnd( )
   InsText xLine
の部分を
   'ツリーに追加
   Outline.AddFuncInfo2 nJJ, 1, Trim(xLine), nII
にするだけでファイル自体は完成で、あとは他のプラグインを参考にして
plugin.defを書くだけでできます。
なおこれだけだとWzみたいに「1.」「1-1.」みたいな番号はついてません。

ysiさんさえよろしければpluginとこのマクロをwikiに乗っけておきましょうか?
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0


2017/1/31 (火) 20:02:26  
[611] Re2:プレーンテキストをWZ階層付テキストに変換するマクロ

▼ もかさん
> ysiさんさえよろしければpluginとこのマクロをwikiに乗っけておきましょうか?

pluginの導入は未経験で完成させる自信がないので
是非、お願いいたします。
なお、プレーンテキストをアウトライン解析することが大目的ですので
Wzの機能は必須ではないです。
ysi
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko


2017/2/1 (水) 00:14:28  
[612] Re3:プレーンテキストをWZ階層付テキストに変換するマクロ

プラグインをアップローダへ、Wikiにページを作りました。
http://sakura.qp.land.to/?Plugin%2F%C5%EA%B9%C6%2F28

プラグインの導入は、サクラの共通設定のプラグインのタブで
「□プラグインを有効にする」をONにして
「フォルダを開く」を押すとpluginsフォルダができて開きます。
フォルダは閉じていいです。
[ZIPプラグインを導入]からプラグインのzipを選択すると追加されます。
新しく開いたファイルから有効になりますので、
開いていたファイルはウィンドウごと一度閉じて開きなおす必要があります。
開きなおしたら、タイプ別のアウトラインを「Indent」にすれば使えるようになるはずです。
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0


2017/2/1 (水) 23:26:45  
[613] Re4:プレーンテキストをWZ階層付テキストに変換するマクロ

動作することを確認しました。
長年の夢が叶って、うれしいです。

ありがとうございました。
ysi
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

606
2016/7/8 (金) 11:19:29  
[606] コマンドラインで、カスタマ引数を渡すことができますか。

コマンドラインで、カスタマ引数を渡すことができますか。
できるなら、キーマクロでどう取得しますか。

背景:
特定のファイルをを渡したいで、
キーマクロのS_FileSaveAs()で利用します。
bingbingc
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36


2016/7/10 (日) 13:19:48  
[607] Re:コマンドラインで、カスタマ引数を渡すことができますか。

▼ bingbingcさん
> コマンドラインで、カスタマ引数を渡すことができますか。
起動時に任意の文字列を渡したいなら,SetCookie を使えばよいと思います。
        sakura.ext "-M=SetCookie('window', 'CustomOption', '任意の文字列')" "-MTYPE=js" -- template.js
マクロからは GetCookie('window', 'CustomOption') で呼び出せます。
SetCookie, GetCookie, GetCookieDefault のヘルプを見てください。
NaKIT
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0


2016/7/11 (月) 11:16:21  
[608] Re2:コマンドラインで、カスタマ引数を渡すことができますか。

▼ NaKITさん

ありがとうございます。
解決できました。
bingbingc
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

605
2016/5/24 (火) 11:57:00  
[605] 開いているファイルの一覧の取得方法

VBSで次のような2パターンで繰り返してみましたが、次のウィンドウ(タブ)に移動しません。

TraceOut Editor.ExpandParameter( "$F" )
NextWindow

TraceOut Editor.ExpandParameter( "$F" )
NextGroup

さらにPrev〜でもダメでした。
(当たり前でですよね。)

Macでも試してみたのですが、同様です。
(これも当たり前でですよね。)

正しいやり方のご教示をお願いします。

Sakura 2.3.0.0 / Windows7Pro 64Bit
John Doe
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

600
2016/3/10 (木) 23:26:47  
[600] マクロファイルをまとめて登録することはできないですか?

この掲示板に投稿するのは初めてです。FAQかもしれませんがご容赦ください。
他のPCからサクラエディタのマクロを持ってくる必要に迫られたのですが、
他のPCから持ってきた.jsファイルを、共通設定→マクロのタブで一つ一つ登録する以外に方法がないように思っています。
複数のマクロファイルをまとめて登録するような方法はないのでしょうか。
また、共通設定→マクロタブによる設定では、他のPCで使っていたマクロ名をもう一度いちいち打ち込まないといけませんね。
ここらへんは自動化されていないのでしょうか。
 forzando
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36


2016/3/11 (金) 21:34:46  
[601] Re:マクロファイルをまとめて登録することはできないですか?

自動化されていません。
他のPCからsakura.iniをコピーしてきて上書きするか、
iniを開いて[Macro]セクションをコピーするのが今できる簡単な方法です。
PC1台ならそれでいいですが、定期的にマクロ設定をするとか
10台設定しないといけないとかだと、なんか方法があった方がいいと思います。
沢山設定するならマクロをプラグインにしてまとめるとインストール各PC1回でできます。

どんな機能が欲しいですか?例えば、
1. マクロのD&Dで一覧に追加+名前自動設定
マクロ内のtitle:と書かれた行を名前に自動設定(これは手元では開発済)
D&Dだと並び順に不満があると現状のUIでは困る気がします。
2. マクロ一覧のインポート、エクスポート
これは[Macro]セクションのコピーを自動化しただけですね。

名前はいっそのことファイル名を日本語にするという手段もあります。
(名前が未設定だとファイル名が表示されます)
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0


2016/3/14 (月) 08:10:44  
[602] Re2:マクロファイルをまとめて登録することはできないですか?

> 2. マクロ一覧のインポート、エクスポート
> これは[Macro]セクションのコピーを自動化しただけですね。


iniファイルの一部分をインポート・エクスポートできる仕組みでしょうか。。
でも、これが実現できるとうれしい。
さらに、 マクロファイルだけでなく色設定等含めてセットで登録したいです。

やりたいことは、
・あるプログラム言語向けの設定を、まとめて配布したい。
・配布者は、設定GUIから必要な項目をひとつひとつexportし、テキストファイル編集でiniファイルを整理
・各個人のPCでは、
    マクロや設定ファイルを設定フォルダにコピーしたあと、
    配布されたiniファイル(一つまたは複数)をimportする。
です。
もうすでに今のサクラエディタでも、上記を実現する方法があるのかもしれませんが、知らないです。
今の標準のやり方だと、GUIでポチポチ設定する作業を各人に強制することになり、かなり面倒です。

「設定のXXタブをクリックしてXXをimport」の繰り返し作業を回避できれば、、。
もしかして、現状でも個々の設定のXXタブに移動しなくても、ひとつの画面から色々なiniをimportできたりします?
SNK
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36


2016/3/21 (月) 18:45:21  
[603] Re2:マクロファイルをまとめて登録することはできないですか?

リプライありがとうございます。

▼ もかさん
> iniを開いて[Macro]セクションをコピーするのが今できる簡単な方法です。
私はとりあえずPC1台なのでこれでやってみます。

> 沢山設定するならマクロをプラグインにしてまとめるとインストール各PC1回でできます。
プラグイン作成は開発っぽくて敷居が高いですね(私が食わず嫌いなだけでほんとは低いのかな?)。
GUIからできる方法が一つあったほうがいいと思います。
 
> マクロ内のtitle:と書かれた行を名前に自動設定(これは手元では開発済)
これいいですね。リリースしていただけたら嬉しく思います。

> D&Dだと並び順に不満があると現状のUIでは困る気がします。
私は並び順はどうでもいい(私のマクロはキーを割り当てて動かす)ので
これにはこだわりませんが、
すでに登録したマクロの並び順をD&Dとかで変更できたりすると
便利かもしれません。

> 2. マクロ一覧のインポート、エクスポート
これが私が欲しかった機能です。

> (名前が未設定だとファイル名が表示されます)
なるほど。当面これで対応しようと思います。
 forzando
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36


2016/3/22 (火) 02:51:58  
[604] Re3:マクロファイルをまとめて登録することはできないですか?

登録済マクロの機能強化
https://sourceforge.net/p/sakura-editor/patchunicode/1040/
お試し版バイナリも上げました。
http://mocaskr.web.fc2.com/weekly/sakura_weekly.html
インポート、D&D(一覧および下のファイル名枠)、マクロを開く、自動名前付け、上下入れ替え
など地味な機能強化ですができるようにしてみたものです。
D&Dできることは気が付かないので、ファイルを開くで一括追加のほうがいいのかもしれないけど。
もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0

598
2016/2/5 (金) 19:45:14  
[598] JSファイルが実行できない(解決済み)

下のブログ見つけるまで大変だった
ヘルプやFAQに何で書いてないのか理解できない
それにjsのデフォの関連付けは危険。
関連付けせずにできないの?
過去ログ1ヶ月ごと検索?
1日潰れた
フリーソフトつって甘えすぎ

JSファイルが実行できない - MoonWing
http://mwlab.net/zen-coding-for-sakuraeditor/js-default
ニワカ
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)


2016/2/6 (土) 12:42:18  
[599] マニュアル・ヘルプは「プラグイン開発ガイド」のように理路整然と

「プラグイン開発ガイド」を見て目からウロコでした
せっかくこういう手本があるんだから、
ヘルプは書きっぱなしの無責任なものではなく、
一般社会に通用する常識的なものにしないとみっともないな
ニワカ
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)

590
2015/1/1 (木) 22:28:54  
[590] コメントマクロ改変

折り返しが有効でもやってくれるものが欲しかったので作りました。
何番煎じか分かりませんが、せっかくなので一応投稿します。

-----------------------------------
CommentAdd.js
-----------------------------------
/*
 * @file   CommentAdd.js
 * @brief  選択範囲、もしくはカーソル行をコメントアウトするサクラエディタマクロ
 * @author phodra
 * 
 * maru氏作成の同様のマクロを改変したもの。
 *  http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F64
 * 
 * ・各折り返しモード対応。
 * ・検索マークがちらつかない。
 * ・終了時に選択範囲を復元する。
 * 
 */
(function(){

    // エディタがビューモード(読み取り専用)なら終了。
    if( Editor.ExpandParameter("${R?読専$:$:$}") == "読専" ) return;
    // 拡張子別にコメントステートメントを定義
    var comment = new Array();
    comment["cpp"]  = "//"; comment["c"]    = "//"; comment["h"]    = "//";
    comment["js"]   = "//"; comment["java"] = "//";
    comment["php"]  = "//"; comment["uws"]  = "//";
    comment["mac"]  = "//"; comment["ppa"]  = "//";
    comment["vbs"]  = "'";  comment["bas"]  = "'";  comment["frm"]  = "'";
    comment["cls"]  = "'";  comment["vb"]   = "'";
    comment["cgi"]  = "#";  comment["pl"]   = "#";  comment["pm"]   = "#";
    comment["asm"]  = ";";  comment["ini"]  = ";";  comment["inf"]  = ";";
    comment["cnf"]  = ";";  comment["conf"] = ";";
    comment["tex"]  = "%";
    comment["cmd"]  = "REM ";
    comment["bat"]  = "REM ";
    comment["txt"]  = " "; comment["noext"] = " ";

    // 拡張子を切り出し
    var fname = Editor.ExpandParameter("$f");
    var ext = fname.substring( fname.lastIndexOf(".") + 1);
    ext = ext==fname? "noext": ext.toLowerCase();
    // 登録されていない拡張子であれば終了。
    if( comment[ext] == null ) return;

    // ちらつき防止
    Editor.SetDrawSwitch(0);

    // 選択モード(この変数は復元する際にも使用する)
    var selmode = Editor.IsTextSelected();
    if( selmode ){ // 選択状態
        // レイアウト座標を取得
        var lay_fl = Editor.GetSelectLineFrom();
        var lay_tl = Editor.GetSelectLineTo();
        // レイアウト座標をロジック座標に変換
        //  ExpandParameterではカーソル位置しか分からないので……
        var fl = Editor.LayoutToLogicLineNum( lay_fl );
        var tl = Editor.LayoutToLogicLineNum( lay_tl );
        var fc = Editor.LineColumnToIndex( lay_fl, Editor.GetSelectColmFrom() );
        var tc = Editor.LineColumnToIndex( lay_tl, Editor.GetSelectColmTo() );

        // 必要な範囲を選択
        Editor.MoveCursor( fl, 1, 0);
        //  行選択でマクロに入った場合、一つ上の行までにする
        Editor.MoveCursor( tc==1? tl-1: tl, 1, 1);
        // よく分からんけど必要、別にロジック指定でなくて良いっぽい
        Editor.GoLineEnd_Sel();

        // 行頭部分にコメントステートメントを挿入
        // 1001 0100
        Editor.ReplaceAll("^", comment[ext], 0x94);

        // マークを消す
        Editor.CancelMode();
        Editor.SearchClearMark();

        // 選択範囲を復元
        Editor.MoveCursor( fl, fc+comment[ext].length, 0);
        Editor.MoveCursor( tl, tc==1? tc: tc+comment[ext].length, selmode);
    }else{ // 選択していない
        // ロジック座標を取得
        //  選択範囲がないのでレイアウトから変換する必要はない
        var l = parseInt(Editor.ExpandParameter("$y"));
        var c = parseInt(Editor.ExpandParameter("$x"));
 
        // 行頭に移動
        Editor.MoveCursor( l, 1, 0);
        // コメントステートメントを挿入
        //  どうせ一回だけなのでReplaceはおおげさだ
        Editor.InsText(comment[ext]);
 
        // マークを消す
        Editor.SearchClearMark();
        // 位置を復元
        Editor.MoveCursor( l, c+comment[ext], selmode);
    }

    // 描画フラグを戻してから再描画
    Editor.SetDrawSwitch(1);
    Editor.ReDraw(0);

})();

-----------------------------------
CommentRemove.js
-----------------------------------
/*
 * @file   CommentRemove.js
 * @brief  選択範囲、もしくはカーソル行のコメントを外すサクラエディタマクロ
 * @author phodra
 * 
 * maru氏作成の同様のマクロを改変したもの。
 *  http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F64
 * 
 * ・各折り返しモード対応。
 * ・検索マークがちらつかない。
 * ・終了時に選択範囲を復元する。
 * 
 */
(function(){

    // エディタがビューモード(読み取り専用)なら終了。
    if( Editor.ExpandParameter("${R?読専$:$:$}") == "読専" ) return;
    // 拡張子別にコメントステートメントを定義
    var comment = new Array();
    comment["cpp"]  = "//"; comment["c"]    = "//"; comment["h"]    = "//";
    comment["js"]   = "//"; comment["java"] = "//";
    comment["php"]  = "//"; comment["uws"]  = "//";
    comment["mac"]  = "//"; comment["ppa"]  = "//";
    comment["vbs"]  = "'";  comment["bas"]  = "'";  comment["frm"]  = "'";
    comment["cls"]  = "'";  comment["vb"]   = "'";
    comment["cgi"]  = "#";  comment["pl"]   = "#";  comment["pm"]   = "#";
    comment["asm"]  = ";";  comment["ini"]  = ";";  comment["inf"]  = ";";
    comment["cnf"]  = ";";  comment["conf"] = ";";
    comment["tex"]  = "%";
    comment["cmd"]  = "REM ";
    comment["bat"]  = "REM ";
    comment["txt"]  = " "; comment["noext"] = " ";

    // ちらつき防止
    Editor.SetDrawSwitch(0);

    //拡張子を切り出し
    var fname = Editor.ExpandParameter("$f");
    var ext = fname.substring( fname.lastIndexOf(".") + 1);
    ext = ext==fname? "noext": ext.toLowerCase();
    // 登録されていない拡張子であれば終了。
    if( comment[ext] == null ) return;

    // 置換対象にする部分の正規表現
    //  なぜかエスケープしないといけない
    var target = "\(\^\\s\*\?\)" + comment[ext];
    // 選択モード(この変数は復元する際にも使用する)
    var selmode = Editor.IsTextSelected();
 
    if( selmode ){ // 選択状態
        // レイアウト座標を取得
        var lay_fl = Editor.GetSelectLineFrom();
        var lay_tl = Editor.GetSelectLineTo();
        // レイアウト座標をロジック座標に変換
        //  ExpandParameterではカーソル位置しか分からないので……
        var fl = Editor.LayoutToLogicLineNum( lay_fl );
        var tl = Editor.LayoutToLogicLineNum( lay_tl );
        var fc = Editor.LineColumnToIndex( lay_fl, Editor.GetSelectColmFrom() );
        var tc = Editor.LineColumnToIndex( lay_tl, Editor.GetSelectColmTo() );

        // 範囲復元時にずらす数
        //  対象の行であればコメントの字数分
        //  行頭にコメントがなければゼロ
        var gap_f = Editor.GetLineStr(fl).match(target)? comment[ext].length: 0;
        //  終了位置は、行選択でマクロに入った場合もゼロ
        var gap_t = Editor.GetLineStr(tl).match(target) || tc>0? comment[ext].length: 0;

        // 必要な範囲を行選択
        Editor.MoveCursor( fl, 1, 0);
        //  行選択でマクロに入った場合、一つ上の行までにする
        Editor.MoveCursor( tc==1? tl-1: tl, 1, 1);
        // よく分からんけど必要、別にロジック指定でなくて良いっぽい
        Editor.GoLineEnd_Sel();

        // 行頭のコメントステートメントを削除
        //  bit flag:1001 0100
        Editor.ReplaceAll(target, "$1", 0x94);

        // マークを消す
        Editor.CancelMode();
        Editor.SearchClearMark();

        // 選択範囲を復元
        Editor.MoveCursor( fl, fc-gap_f, 0);
        Editor.MoveCursor( tl, tc-gap_t, selmode);
    }else{ // 選択していない
        // ロジック座標を取得
        //  選択範囲がないのでレイアウトから変換する必要はない
        var l = parseInt(Editor.ExpandParameter("$y"));
        var c = parseInt(Editor.ExpandParameter("$x"));
        // 範囲復元時にずらす数
        var gap = Editor.GetLineStr(0).match(target)? comment[ext].length: 0;

        // 行選択
        //  bit flag:1001
        Editor.GoLineTop(0x9);
        Editor.GoLineEnd_Sel();
 
        // 行頭のコメントステートメントを削除
        //  bit flag:1001 0100
        Editor.ReplaceAll(target, "$1", 0x94);
 
        // マークを消す
        Editor.CancelMode();
        Editor.SearchClearMark();

        // 位置を復元
        Editor.MoveCursor( l, c-gap, selmode);
    }

    // 描画フラグを戻してから再描画
    Editor.SetDrawSwitch(1);
    Editor.ReDraw(0);

})();
phodra
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0


2015/1/3 (土) 17:32:34  
[591] Re:コメントマクロ改変

ちょっと修正。
Editor.ReplaceAll() を使わない仕様になりました。
これにより置換中のプログレスがなくなり、ハイライトも消えません。

-----------------------------------
CommentAdd.js
-----------------------------------
/*
 * @file   CommentAdd.js
 * @brief  選択範囲、もしくはカーソル行をコメントアウトするサクラエディタマクロ
 * @author phodra
 *
 * maru氏作成の同様のマクロを改変したもの。
 *  http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F64
 *
 * ・各折り返しモード対応。
 * ・検索マークがちらつかない。
 * ・終了時に選択範囲を復元する。
 *
 *** 2015/01/03 0.2  Editor.ReplaceAll() を使用しない
 *** 2015/01/01 0.1  Editor.ReplaceAll() を使用するバージョン
 *
 */

(function(){

    // エディタがビューモード(読み取り専用)なら終了。
    if( Editor.ExpandParameter("${R?r$:$:$}") == "r" ) return;
    // 拡張子別にコメントステートメントを定義
    var comment = new Array();
    comment["cpp"]  = "//"; comment["c"]    = "//"; comment["h"]    = "//";
    comment["js"]   = "//"; comment["java"] = "//";
    comment["php"]  = "//"; comment["uws"]  = "//";
    comment["mac"]  = "//"; comment["ppa"]  = "//";
    comment["vbs"]  = "'";  comment["bas"]  = "'";  comment["frm"]  = "'";
    comment["cls"]  = "'";  comment["vb"]   = "'";
    comment["cgi"]  = "#";  comment["pl"]   = "#";  comment["pm"]   = "#";
    comment["asm"]  = ";";  comment["ini"]  = ";";  comment["inf"]  = ";";
    comment["cnf"]  = ";";  comment["conf"] = ";";
    comment["tex"]  = "%";
    comment["cmd"]  = "REM ";
    comment["bat"]  = "REM ";
    comment["txt"]  = " "; comment["noext"] = " ";

    // 拡張子を切り出し
    var fname = Editor.ExpandParameter("$f");
    var ext = fname.substring( fname.lastIndexOf(".") + 1);
    ext = ext==fname? "noext": ext.toLowerCase();
    // 登録されていない拡張子であれば終了。
    if( comment[ext] == null ) return;

    // ちらつき防止
    Editor.SetDrawSwitch(0);

    // 選択モード(この変数は復元する際にも使用する)
    var selmode = Editor.IsTextSelected();
    if( selmode ){ // 選択状態
        // レイアウト座標を取得
        var lay_fl = Editor.GetSelectLineFrom();
        var lay_tl = Editor.GetSelectLineTo();
        // レイアウト座標をロジック座標に変換
        //  選択位置のロジック座標を取得する関数はない?
        var fl = Editor.LayoutToLogicLineNum( lay_fl );
        var tl = Editor.LayoutToLogicLineNum( lay_tl );
        var fc = Editor.LineColumnToIndex( lay_fl, Editor.GetSelectColmFrom() );
        var tc = Editor.LineColumnToIndex( lay_tl, Editor.GetSelectColmTo() );
        //  行選択でマクロに入った場合、一つ上の行までにする
        var endl = tc==1? tl-1: tl;
 
        // 範囲内の行を配列としてとる
        var lines = new Array();
        var str = "";
        for( var i=fl; i<=endl; i++ ){
            str = Editor.GetLineStr(i)
            lines.push( comment[ext] + str );
        }
 
        // 必要な範囲を行選択
        Editor.MoveCursor( fl, 1, 0);
        Editor.MoveCursor( endl, str.length+1, 1);

        // 選択範囲を上書き
        Editor.InsText( lines.join("") );

        // 選択範囲を復元
        Editor.MoveCursor( fl, fc+comment[ext].length, 0);
        Editor.MoveCursor( tl, tc==1? tc: tc+comment[ext].length, selmode);
    }else{ // 選択していない
        // ロジック座標を取得
        //  選択範囲がないのでレイアウトから変換する必要はない
        var l = parseInt(Editor.ExpandParameter("$y"));
        var c = parseInt(Editor.ExpandParameter("$x"));

        // 行頭に移動
        Editor.MoveCursor( l, 1, 0);
        // コメントステートメントを挿入
        Editor.InsText(comment[ext]);

        // 位置を復元
        Editor.MoveCursor( l, c+comment[ext], selmode);
    }

    // 描画フラグを戻してから再描画
    Editor.SetDrawSwitch(1);
    Editor.ReDraw(0);

})();

-----------------------------------
CommentRemove.js
-----------------------------------
/*
 * @file   CommentRemove.js
 * @brief  選択範囲、もしくはカーソル行のコメントを外すサクラエディタマクロ
 * @author phodra
 * 
 * maru氏作成の同様のマクロを改変したもの。
 *  http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F64
 * 
 * ・各折り返しモード対応。
 * ・検索マークがちらつかない。
 * ・終了時に選択範囲を復元する。
 * 
 *** 2015/01/03 0.2  Editor.ReplaceAll() を使用しない
 *** 2015/01/01 0.1  Editor.ReplaceAll() を使用するバージョン
 * 
 */
(function(){

    // エディタがビューモード(読み取り専用)なら終了。
    if ( Editor.ExpandParameter("${R?r$:$:$}") == "r") return;
    // 拡張子別にコメントステートメントを定義
    var comment = new Array();
    comment["cpp"]  = "//"; comment["c"]    = "//"; comment["h"]    = "//";
    comment["js"]   = "//"; comment["java"] = "//";
    comment["php"]  = "//"; comment["uws"]  = "//";
    comment["mac"]  = "//"; comment["ppa"]  = "//";
    comment["vbs"]  = "'";  comment["bas"]  = "'";  comment["frm"]  = "'";
    comment["cls"]  = "'";  comment["vb"]   = "'";
    comment["cgi"]  = "#";  comment["pl"]   = "#";  comment["pm"]   = "#";
    comment["asm"]  = ";";  comment["ini"]  = ";";  comment["inf"]  = ";";
    comment["cnf"]  = ";";  comment["conf"] = ";";
    comment["tex"]  = "%";
    comment["cmd"]  = "REM ";
    comment["bat"]  = "REM ";
    comment["txt"]  = " "; comment["noext"] = " ";

    // ちらつき防止
    Editor.SetDrawSwitch(0);

    //拡張子を切り出し
    var fname = Editor.ExpandParameter("$f");
    var ext = fname.substring( fname.lastIndexOf(".") + 1);
    ext = ext==fname? "noext": ext.toLowerCase();
    // 登録されていない拡張子であれば終了。
    if( comment[ext] == null ) return;

    // 置換対象にする部分の正規表現
    //  なぜかエスケープしないといけない
    var uncmt = new RegExp("\(\^\\s\*\?\)" + comment[ext]);
    // 選択モード(この変数は復元する際にも使用する)
    var selmode = Editor.IsTextSelected();
 
    if( selmode ){ // 選択状態
        // レイアウト座標を取得
        var lay_fl = Editor.GetSelectLineFrom();
        var lay_tl = Editor.GetSelectLineTo();
        // レイアウト座標をロジック座標に変換
        //  選択位置のロジック座標を取得する関数はない?
        var fl = Editor.LayoutToLogicLineNum( lay_fl );
        var tl = Editor.LayoutToLogicLineNum( lay_tl );
        var fc = Editor.LineColumnToIndex( lay_fl, Editor.GetSelectColmFrom() );
        var tc = Editor.LineColumnToIndex( lay_tl, Editor.GetSelectColmTo() );
        //  行選択でマクロに入った場合、一つ上の行までにする
        var endl = tc==1? tl-1: tl;

        // 範囲内の行を配列としてとる
        var lines = new Array();
        var reped = new Array();
        var str = "";
        var cnt = 0;
        for( var i=fl; i<=endl; i++ ){
            str = Editor.GetLineStr(i);
            var rep = str.replace( uncmt, "$1" );
            lines.push( str );
            reped.push( rep );
            if( str == rep ) cnt++;
        }

        // 処理していない行が全体の行数に等しいときは何もしない
        if( cnt < reped.length ){
            // 必要な範囲を行選択
            Editor.MoveCursor( fl, 1, 0);
            Editor.MoveCursor( endl, str.length+1, 1);
 
            // 選択範囲を上書き
            Editor.InsText( reped.join("") );

            // 範囲復元時のX位置
            //  コメントステートメントより後ならコメントステートメントの字数分ずらす
            //  コメントステートメントの中ならコメントステートメントが現れた位置
            //  コメントステートメントより前ならそのままの位置
            var idx = lines[0].indexOf( comment[ext] );
            var gap_f =
                fc>idx+comment[ext].length? fc-comment[ext].length:
                fc>idx+1? idx+1:
                fc;
            idx = lines[lines.length-1].indexOf( comment[ext] );
            var gap_t =
                tc>idx+comment[ext].length? tc-comment[ext].length:
                tc>idx+1? idx+1:
                tc;
            // 選択範囲を復元
            Editor.MoveCursor( fl, gap_f, 0);
            Editor.MoveCursor( tl, gap_t, selmode);
        }
    }else{ // 選択していない
        // ロジック座標を取得
        //  選択範囲がないのでレイアウトから変換する必要はない
        var l = parseInt(Editor.ExpandParameter("$y"));
        var c = parseInt(Editor.ExpandParameter("$x"));
        // 対象行の文字列を取得
        var str = Editor.GetLineStr(l);
        // コメントステートメントを除去した文字列
        var rep = str.replace( uncmt, "$1" );

        if( str != rep ){
            // 行選択
            Editor.MoveCursor( l, 1, 0);
            Editor.MoveCursor( l, str.length+1, 1);

            // 置換した文字列で上書き
            Editor.InsText( rep );

            // 復元時のカーソルX位置
            //  コメントステートメントより後ならコメントステートメントの字数分ずらす
            //  コメントステートメントの中ならコメントステートメントが現れた位置
            //  コメントステートメントより前ならそのままの位置
            var idx = str.indexOf( comment[ext] );
            var gap =
                c>idx+comment[ext].length? c-comment[ext].length:
                c>idx+1? idx+1:
                c;
            // カーソル位置を復元
            Editor.MoveCursor( l, gap, selmode);
        }
    }

    // 描画フラグを戻してから再描画
    Editor.SetDrawSwitch(1);
    Editor.ReDraw(0);

})();
phodra
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0


2015/10/19 (月) 11:09:56  
[597] &#24215;&#20869;&#20840;&#21697;&#12509;&#12452;&#12531;&#12488;10&#20493; &#26032;&#21697;&#12450;&#12454;&#12488;&#12524;&#12483;&#12488;

&#19975;&#27507;&#12364;&#12289;&#12381;&#12428;&#12399;&#31169;&#12364;&#12375;&#12383;&#12418;&#12398;&#12384;&#26908;&#32034;&#12289;&#20309;&#12398;&#12383;&#12417;&#12473;&#12479;&#12483;&#12501;&#65281;&#12371;&#12428;&#12434;&#12371;&#12371;&#12395;| &#29694;&#22312;&#12399;&#12289;&#26082;&#23384;&#12398; &#12454;&#12455;&#12502;&#12506;&#12540;&#12472;&#12289;&#12371;&#12428;&#12398;&#12362;&#12363;&#12370;&#12391;&#31649;&#29702;&#32773;&#12469;&#12452;&#12488;&#12290;
&#24215;&#20869;&#20840;&#21697;&#12509;&#12452;&#12531;&#12488;10&#20493; &#26032;&#21697;&#12450;&#12454;&#12488;&#12524;&#12483;&#12488; http://www.exitoybelleza.es
rmzfhsxw@gmail.com
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.0.3705)

ページ:[ ] [1] [2] [3] [4] [5] [6] [7] [8] [ ]
INCM/CMT
Cyclamen v3.81