Archive for the 'CotEditor' Category

2017/11/18 指定文字の花文字を取得 v1.2

OS内にインストールされているフォントのうち収録グリフ数が8,000以上のフォントから50個をリストアップして、各フォントで花文字を作成してCotEditor上に花文字で新規ドキュメントを作成するAppleScriptです。

flowerchar3_resized.png

フォント50個に限定しているのは、大量にCotEditorでドキュメントを作成するとCotEditorのパフォーマンスが大幅に低下するためです(メモリの都合? 常識的な挙動なので問題ではありません。ドキュメントの開きすぎで)。

なお、OS内にインストールされているフォントの数が極端に少ない環境(条件に合致するフォントが50個ないとか)ではエラーになる可能性があります。

flowerchar2_resized.png

CotEditor上に50個の未保存のドキュメントができてしまうので、一括で破棄するAppleScriptを掲載しておきます。

tell application “CotEditor”
  tell every document
    close without saving
  end tell
end tell

★Click Here to Open This Script 

AppleScript名:指定文字の花文字を取得 v1.2
– Created 2017-11-18 by Takaaki Naganoya
– 2017 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “AppKit”
–http://piyocast.com/as/archives/4984

property NSArray : a reference to current application’s NSArray
property NSMutableDictionary : a reference to current application’s NSMutableDictionary
property NSBezierPath : a reference to current application’s NSBezierPath
property NSMutableParagraphStyle : a reference to current application’s NSMutableParagraphStyle
property NSPNGFileType : a reference to current application’s NSPNGFileType
property NSFontAttributeName : a reference to current application’s NSFontAttributeName
property NSKernAttributeName : a reference to current application’s NSKernAttributeName
property NSLigatureAttributeName : a reference to current application’s NSLigatureAttributeName
property NSFont : a reference to current application’s NSFont
property NSMutableAttributedString : a reference to current application’s NSMutableAttributedString
property NSUnderlineStyleAttributeName : a reference to current application’s NSUnderlineStyleAttributeName
property NSImage : a reference to current application’s NSImage
property NSParagraphStyleAttributeName : a reference to current application’s NSParagraphStyleAttributeName
property NSString : a reference to current application’s NSString
property NSForegroundColorAttributeName : a reference to current application’s NSForegroundColorAttributeName
property NSBitmapImageRep : a reference to current application’s NSBitmapImageRep
property NSColor : a reference to current application’s NSColor
property NSColorSpace : a reference to current application’s NSColorSpace
property NSFontManager : a reference to current application’s NSFontManager
property NSPredicate : a reference to current application’s NSPredicate

set aString to “ぴ”

set fRes to getEveryFontPSNameANdGlyphsNum() of me
set theArray to current application’s NSArray’s arrayWithArray:fRes
set thePred to current application’s NSPredicate’s predicateWithFormat:“fontNum > 8000″
set bArray to (theArray’s filteredArrayUsingPredicate:thePred) as list
set cArray to items 1 thru 50 of bArray

repeat with i in cArray
  set aFontName to contents of i
  
set fRes to getHanamojiStr(18, fontName of aFontName, aString, 0.7, true) of me
  
makeNewCotEditorDoc(fRes) of me
end repeat

–花文字文字列を計算して返す
on getHanamojiStr(aFontSize, aFontName, aString, aThread, incFontName)
  if length of aString is not equal to 1 then return false
  
  
set aThreadShould to 768 * aThread
  
  
set fillColor to NSColor’s whiteColor –塗り色
  
set bString to aString & ” “
  
set anAssrStr to makeRTFfromParameters(bString, aFontName, aFontSize, -2, (aFontSize * 1.2)) of me
  
set aSize to anAssrStr’s |size|()
  
  
if class of aSize = record then
    set attrStrWidth to width of aSize
    
set attrStrHeight to height of aSize
  else if class of aSize = list then –macOS 10.13.xのバグ回避
    copy aSize to {attrStrWidth, attrStrHeight}
  end if
  
  
set {xPos, yPos} to {0, 0}
  
  
–下地の画像を作成
  
set tmpImg1 to makeImageWithFilledColor(attrStrWidth, attrStrHeight, fillColor) of me
  
  
–下地の画像の上にAttributed Stringを描画
  
set tmpImg2 to drawAttributedStringsOnImage(tmpImg1, anAssrStr, xPos, yPos) of me
  
  
–NSImageからRaw画像を作成
  
set aRawimg to NSBitmapImageRep’s imageRepWithData:(tmpImg2’s TIFFRepresentation())
  
  
–画像から順次指定座標の色データを拾って花文字listに反映
  
set strList to {}
  
repeat with y from 1 to attrStrHeight - 1
    
    
set strListX to {}
    
repeat with x from 0 to attrStrWidth - 1
      set tmpCol to getColorFromRawImage(aRawimg, x, y) of me
      
      
if tmpCol is not equal to false then
        if tmpCol is not equal to {255, 255, 255} then
          copy tmpCol to {tmpR, tmpG, tmpB}
          
if (tmpR + tmpG + tmpB) < aThreadShould then
            set the end of strListX to aString
          else
            set the end of strListX to “ ”
          end if
        else
          set the end of strListX to “ ”
        end if
      end if
      
    end repeat
    
set the end of strList to strListX
  end repeat
  
  
–2D List→Text
  
set aRes to list2dToStringByUsingDelimiters(strList, “ ”, return) of me
  
  
if incFontName = true then
    set fName to getDisplayedNameOfFont(aFontName) of me
    
set aRes to “■” & fName & return & return & aRes
  end if
  
  
return aRes
end getHanamojiStr

–指定Raw画像中の指定座標のピクセルの色をRGBで取り出す
on getColorFromRawImage(aRawimg, x, y)
  set origColor to (aRawimg’s colorAtX:x y:y)
  
set srgbColSpace to NSColorSpace’s deviceRGBColorSpace
  
if srgbColSpace = missing value then return false
  
  
set aColor to (origColor’s colorUsingColorSpace:srgbColSpace)
  
  
set aRed to (aColor’s redComponent()) * 255
  
set aGreen to (aColor’s greenComponent()) * 255
  
set aBlue to (aColor’s blueComponent()) * 255
  
  
return {aRed as integer, aGreen as integer, aBlue as integer}
end getColorFromRawImage

–画像のうえに指定のスタイル付きテキストを描画して画像を返す
on drawAttributedStringsOnImage(anImage, anAssrStr, xPos, yPos)
  anImage’s lockFocus()
  
anAssrStr’s drawAtPoint:(current application’s NSMakePoint(xPos, yPos))
  
anImage’s unlockFocus()
  
return anImage
end drawAttributedStringsOnImage

–書式つきテキストを組み立てる
on makeRTFfromParameters(aStr as string, fontName as string, aFontSize as real, aKerning as real, aLineSpacing as real)
  set aVal1 to NSFont’s fontWithName:fontName |size|:aFontSize
  
set aKey1 to (NSFontAttributeName)
  
  
set aVal2 to NSColor’s blackColor()
  
set aKey2 to (NSForegroundColorAttributeName)
  
  
set aVal3 to aKerning
  
set akey3 to (NSKernAttributeName)
  
  
set aVal4 to 0
  
set akey4 to (NSUnderlineStyleAttributeName)
  
  
set aVal5 to 2 –all ligature ON
  
set akey5 to (NSLigatureAttributeName)
  
  
set aParagraphStyle to NSMutableParagraphStyle’s alloc()’s init()
  
aParagraphStyle’s setMinimumLineHeight:(aLineSpacing)
  
aParagraphStyle’s setMaximumLineHeight:(aLineSpacing)
  
set akey7 to (NSParagraphStyleAttributeName)
  
  
set keyList to {aKey1, aKey2, akey3, akey4, akey5, akey7}
  
set valList to {aVal1, aVal2, aVal3, aVal4, aVal5, aParagraphStyle}
  
set attrsDictionary to NSMutableDictionary’s dictionaryWithObjects:valList forKeys:keyList
  
  
set attrStr to NSMutableAttributedString’s alloc()’s initWithString:aStr attributes:attrsDictionary
  
return attrStr
end makeRTFfromParameters

–指定サイズの画像を作成し、背景を指定色で塗る
on makeImageWithFilledColor(aWidth, aHeight, fillColor)
  set anImage to NSImage’s alloc()’s initWithSize:(current application’s NSMakeSize(aWidth, aHeight))
  
  
anImage’s lockFocus()
  
set theRect to {{x:0, y:0}, {width:aWidth, height:aHeight}}
  
set theNSBezierPath to NSBezierPath’s bezierPath
  
theNSBezierPath’s appendBezierPathWithRect:theRect
  
fillColor’s |set|()
  
theNSBezierPath’s fill()
  
anImage’s unlockFocus()
  
  
return anImage
end makeImageWithFilledColor

–2D Listをアイテム間および行間のデリミタを個別に指定してテキスト変換
on list2dToStringByUsingDelimiters(aList, itemDelimiter, lineDelimiter)
  set outList to {}
  
repeat with i in aList
    set aStr to listToStringUsingTextItemDelimiter(i, itemDelimiter) of me
    
set the end of outList to aStr
  end repeat
  
  
set bStr to listToStringUsingTextItemDelimiter(outList, lineDelimiter) of me
  
return bStr
end list2dToStringByUsingDelimiters

on listToStringUsingTextItemDelimiter(sourceList, textItemDelimiter)
  set CocoaArray to NSArray’s arrayWithArray:sourceList
  
set CocoaString to CocoaArray’s componentsJoinedByString:textItemDelimiter
  
return (CocoaString as string)
end listToStringUsingTextItemDelimiter

on getEveryFontPSNameANdGlyphsNum()
  set aFontList to NSFontManager’s sharedFontManager()’s availableFonts()
  
set thePred to NSPredicate’s predicateWithFormat:“NOT SELF BEGINSWITH ’.’”
  
set aFontList to (aFontList’s filteredArrayUsingPredicate:thePred) as list
  
  
set aList to {}
  
repeat with i in aFontList
    set aName to contents of i
    
set aNum to countNumberOfGlyphsInFont(aName) of me
    
set the end of aList to {fontName:aName, fontNum:aNum}
  end repeat
  
  
return aList
end getEveryFontPSNameANdGlyphsNum

–指定Postscript名称のフォントに定義されている文字数を数えて返す
on countNumberOfGlyphsInFont(fontName)
  set aFont to current application’s NSFont’s fontWithName:fontName |size|:9.0
  
if aFont = missing value then return false
  
set aProp to aFont’s numberOfGlyphs()
  
return aProp
end countNumberOfGlyphsInFont

–フォントのPostScript NameからDisplayed Nameを取得
on getDisplayedNameOfFont(aName)
  set aFont to current application’s NSFont’s fontWithName:aName |size|:9.0
  
set aDispName to (aFont’s displayName()) as string
  
return aDispName
end getDisplayedNameOfFont

on makeNewCotEditorDoc(aCon)
  tell application “CotEditor”
    set newDoc to make new document
    
tell newDoc
      set contents to aCon
    end tell
  end tell
end makeNewCotEditorDoc

★Click Here to Open This Script 

2017/10/22 CotEditorのコンソールにログ出力

CotEditor内蔵のコンソールウィンドウに任意の文字列を出力するAppleScriptです。

CotEditorの「ウィンドウ」メニューに「パネル」という項目があり、

cot21.png

ここで「コンソールパネル」が選択でき、フローティングパレットが表示されます(CotEditor v3.2.2にて確認)。

cot1.png

このパレットが用意された意図や経緯はわかりませんが(syslog経由でConsole.appに出せるのに)、おそらく内蔵Script Menuから実行する各種scriptのデバッグ出力のログ表示用と思われます(10:88ってなんだ???)。

CotEditorのAppleScript用語辞書に「write to console」というコマンドが用意されており、指定の文字列をこのコンソールパネルに出力できます。

cot3.png

このコンソール出力のためのAppleScriptを書いてためしてみました。テキストを出力することはできますが、リスト(配列)やレコード(dictionary)を出力することはできません。テキスト以外の形式のデータはテキストに変換して出力することになります。

なお、「コンソールパネル」はフローティングパレットUIなので、CotEditorが最前面にある時にしか表示されません。

辞書にあっても実際に機能するか、期待どおりに機能するかはやはり実際に試してみないとわかりません。

AppleScript名:CotEditorのコンソールにログ出力
–http://piyocast.com/as/archives/4918
tell application “CotEditor”
  activate
  
write to console “ぴよまるさんだよ”
end tell

★Click Here to Open This Script 

2017/10/05 クリップボード内のZero Width Spaceを削除する

クリップボードから、Cocoaの機能を使うと削除も置換もできないZero Width Spaceを削除するAppleScriptです。

zerowidthspace.png
ScriptableなUnicode文字情報チェックツール「UnicodeChecker」

特定のエディタ(ASObjCExplorer)が出力するものの、Cocoaの機能を使うと削除や置換ができないために、Objective-CやSwiftだけで何も対策しないで組んであると編集自体が行えないという恐怖のキャラクターZero Width Space。

各テキストエディタのZero Width Spaceへの対応度はまちまちで、

TextWranler(=BBEdit):表示および削除が可能
tetwrangler.png

CotEditor:ちょっと前まで認識・表示しなかった。最新版(v3.2.2)では表示・削除ができるようになった
coteditor.png

mi:表示できないが、Zero Width Spaceがある場所で不自然にカーソルが進まなくなるので、存在は確認できる。マウスで前後の文字ごとまとめて範囲選択して削除することは可能

といった状況です。実際にCocoaのAPIを用いて文字置換するとぜんぜんダメなので、Pure AppleScriptの機能を用いて組んでいます。

自分がMac App Storeで販売中のPDF差分検出アプリケーション「Double PDF」でもこのZero Width Space対策を行なっており、本文テキスト同士の比較時にはあらかじめ削除するようにしています。

scrit_menu_zero.png

本Scriptは利用頻度が妙に高いので、Script Menuに入れて呼び出すような運用を行っています。クリップボードにZero Width Space駆除対象文字列を入れて(コピーして)本Scriptを実行すると、クリップボード内からZero Width Spaceが駆除されます。

AppleScript名:クリップボード内のZero Width Spaceを削除する
– Created 2017-10-05 by Takaaki Naganoya
– 2017 Piyomaru Software
–http://piyocast.com/as/archives/4881
set aText to the clipboard
set bText to aText as string
set cText to repChar(bText, string id 8203, “”) of me
set the clipboard to (cText as string)

–文字置換
on repChar(origText as string, targChar as string, repChar as string)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to targChar
  
set tmpList to text items of origText
  
set AppleScript’s text item delimiters to repChar
  
set retText to tmpList as string
  
set AppleScript’s text item delimiters to curDelim
  
return retText
end repChar

★Click Here to Open This Script 

AppleScript名:Zero Width Spaceのプロパティを取得
–http://piyocast.com/as/archives/4881
tell application “UnicodeChecker”
  properties of code point (8203 + 1)
end tell
–> {bidi mirrored:false, containing plane:plane id 0 of application “UnicodeChecker”, id:8203, line break:”ZW”, assigned:true, canonical combining class description:”Not_Reordered”, unicode name:”ZERO WIDTH SPACE”, assigned to abstract character:true, code point type:Format, class:code point, bidi class description:”Boundary_Neutral”, script name:”Common”, general category description:”Format”, bidi class:”BN”, containing block:block “General Punctuation” of application “UnicodeChecker”, general category:”Cf”, name:”", canonical combining class:0}

★Click Here to Open This Script 

2017/07/19 CotEditor開発者の1024jpさんをTMUG例会にお呼びします

毎月第2土曜日、目黒で例会を行なっている「東京Macintosh Users Group」(以下、TMUG)の8月度の例会(8/12)にCotEditor開発者の1024jpさんをお呼びして、CotEditorについてお話しを聞く機会をご用意しました。

日時:8月12日(土)14:00〜17:00(14時開場、14:30開始)
場所:目黒区民センター内中小企業センター2階会議室
定員:48名

一般の方でも、TMUGホームページの登録フォームからお申し込みいただければ無料で参加していただけます。途中、ロボットよけのために、

 合い言葉:ローマ字の小文字で「川」と入れてください

とありますが、ここは「kawa」と入力してください。

CotEditorはオープンソースで開発が行われており、かつメインの開発者が入れ替わって続いてきたという珍しいプロジェクトでもあります。

2011/10/16 CotEditorをAppleScriptから操作する3

オープンソースのテキストエディタ「CotEditor」をAppleScriptから操作するシリーズの第3弾。あくまで基礎的な部分を地道に検証することが重要なので、AppleScriptで非常によく使う「selection」(選択部分)について調べてみました。

CotEditor上で、このように選択した状態で、選択部分のプロパティを取得して、その詳細を調べてみることにします。

cot40.jpg

selectionのプロパティはこのようにして取得できます。

スクリプト名:CotEditorでselectionのプロパティを取得する0
tell application “CotEditor”
  tell document 1
    set aSel to properties of selection
  end tell
end tell
–>

(*
{line range:{1, 2}, class:selection-object, character range:{0, 16}, contents:”てすとだよ
日本語を打つてすと。”}
*)

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

問題はここからです。

まずは、line rangeを取り出してみます。これは、選択部分の行の範囲を取得するというものです。

スクリプト名:CotEditorでselectionのプロパティを取得する1
tell application “CotEditor”
  tell document 1
    set aSel to properties of selection
    
set lineRange to line range of aSel
    
–> {1, 2}
    
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

次に、character rangeを取得してみましょう。選択部分が何文字目から何文字目までなのかを取得できるはずです。

が……

スクリプト名:CotEditorでselectionのプロパティを取得する2
tell application “CotEditor”
  tell document 1
    set aSel to properties of selection
    
set charRange to character range of aSel
    
  end tell
end tell

–> error “CotEditor でエラーが起きました:range of document 1 を取り出すことはできません。” number -1728 from range of document 1

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

「character range」という予約語がきちんとAppleScriptの処理系に認識されていないようです。そのために、エラーが発生してしまいます。

真面目にcharacter rangeという予約語を生かせる方向に努力するか、あるいは先人(マイクロソフトとかアドビとか)にならって「characterRange」などという、微妙に既存の予約語と重ならないような予約語を作ってみるといいんじゃないでしょうか。

現状のままだと、比較的初心者(中級者ぐらいでも)にとっては、エラーの所在がOSにあるのか、AppleScriptの処理系にあるのか、アプリケーションに存在するのかがまるっきり分かりません。OSは動いているし、アプリケーションも普通に動作していれば、AppleScriptに問題があると考えるのが普通です。ところが、アプリケーション側の対応が不適切なケースが割と多いのが実際のところです。

「AppleScriptが分からない」というつまづきは、こうしたアプリケーション側の「ダメな実装」にも原因が(かなり)あるわけで、古くはCodeWarriorがデフォルトで出力していたAppleScript用語辞書(select tell targetという予約語が入っているのが目印)が、Script対応でないのに辞書が含まれるためAppleScript初心者を惑わせたという歴史的経緯があります。

世界的に有名な(たぶん、世界一)バカ実装では、アドビのIllustrator CS2で、色のR(赤)、G(緑)、B(青)のチャネルを示す属性に「r」「g」「b」という1文字の予約語を割り当てたというものがあります。1文字の変数と衝突して、なかなか問題の所在が分かりませんでした。さすがにこれはCS3で直りましたが、アドビの独創性豊かなバカ実装は、Appleといい勝負だと思います。

最後に、選択部分の内容(contents)を求めてみましょう。

スクリプト名:CotEditorでselectionのプロパティを取得する3
tell application “CotEditor”
  tell document 1
    set aSel to properties of selection
    
set aCon to contents of aSel
    
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

さすがにこの部分にバグは確認されませんでした。

この確認は、単に「辞書どおりに書いて実行できるかどうか」というレベルの確認であり、長期間連続して処理をするとアプリケーションがクラッシュするとか、そういうレベルの確認ではありません(Photoshop CS3で3日間、5000回ぐらい巨大なJPEGファイルをオープン/クローズしてクラッシュしないか確認したことがありました)。

また、データサイズが小さいときの挙動と大きいときの挙動が違ったり、アプリケーションによってはドキュメントオープン後に内部の状態が安定するまでに時間がかかるようなケースもあるので、そのあたりの様子を見ながらScriptを書くことが重要です。

2011/10/12 CotEditorをAppleScriptから操作する2

オープンソースのテキストエディタ「CotEditor」をAppleScriptから操作するシリーズの続編です。

基礎的な命令を試してみます。documentのプロパティを取得。

スクリプト名:CotEditorでdocumentのプロパティを取得する
tell application “CotEditor”
  tell document 1
    properties
  end tell
end tell
–>

(*
{line ending:LF, line spacing:0.0, coloring style:”なし”, modified:true, alpha only textView:true, transparency:1.0, contents:”てすとだよ
日本語を打つてすと。
Abcdefgh Ijklmn Opqrstu”, name:”名称未設定”, wrap lines:true, class:document, path:missing value, text:”てすとだよ
日本語を打つてすと。
Abcdefgh Ijklmn Opqrstu”, IANA charset:”utf-8″, encoding:”Unicode(UTF-8)”, length:40}
*)

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

いろいろと面白そうなプロパティがあります。では、ウィンドウの透明度を変えてみましょう。

スクリプト名:CotEditorでウィンドウの透明度を変更する1
tell application “CotEditor”
  tell document 1
    set transparency to 1
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

このScriptを実行した状態が以下の画面です。

cot21.jpg

ここから、

スクリプト名:CotEditorでウィンドウの透明度を変更する2
tell application “CotEditor”
  tell document 1
    set transparency to 0.5
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

を実行すると、

cot22.jpg

のように、Script中で指定したとおり透明度が0.5(1.0が完全不透明状態、0が透明状態)になります。

ただし、この透明度の設定が環境設定値と連動していないようで、

cot23.jpg

(一度AppleScriptから透明度の変更を行うと)環境設定の値を変更しても、画面表示は変わりません。また、AppleScriptから設定した透明度がこの環境設定には反映されません。

2011/10/10 CotEditorをAppleScriptから操作する

日本人の手によるオープンソース・アプリケーション「CotEditor」のバージョン1.2をAppleScriptから操作してみました。

以前から存在は知っていたものの、デザインなどのフィーリングが合わなかったので常用するには到っていませんでした。

co1.jpg
▲TextWrangler

co2.jpg
▲mi

co3.jpg
▲CotEditor

AppleScriptの用語辞書を見てみたところ、

cot00.jpg

ちょっと面白そうな命令が並んでいたので、どのぐらいの実装レベルなのか試してみることにしました。

基本的なところから、アプリケーションにプロパティをくれるよう依頼してみると……常識的なレベルの動作は行っているようです。

スクリプト名:CotEditorのアプリケーションのプロパティを取得
tell application “CotEditor”
  properties
end tell
–> {name:”CotEditor”, frontmost:false, class:application, version:”1.2″}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

次に、ドキュメントを1枚表示した状態で、Windowの枚数をカウント。1ドキュメントしか開いていないのにWindowの数が「8」と返ってきました。何か暗雲漂う雰囲気です。おかしな動作を起こしそうな予感がします。

スクリプト名:CotEditorでWindowの枚数をカウント
tell application “CotEditor”
  set a to count every window
end tell
–> 8

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

ためしに、すべてのウィンドウに対してvisibleの設定を行ってみたところ…………

cot01.jpg

スクリプト名:CotEditorでWindowのvisibleを書き換える
tell application “CotEditor”
  activate
  
  
set aList to every window
  
repeat with i in aList
    tell i
      set visible to true
    end tell
  end repeat
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

予想どおり、補助パレットからドロワーから何からすべて表示状態になってしまいました。

cot02.jpg

慌てて、すべてのウィンドウのvisible属性をfalseにして、一度終了させて再度起動…………すると、今度はドキュメントのウィンドウも何も表示されなくなってしまいました。

スクリプト名:CotEditorでドキュメント関連のWindowのみvisibleにする
tell application “CotEditor”
  set wList to every window
  
repeat with i in wList
    set aProp to properties of i
    
set aDoc to document of aProp
    
    
if aDoc is not equal to missing value then
      set visible of i to true
      
set zoomed of i to true
    end if
  end repeat
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

こんな(↑)感じでしばし試行錯誤して、結局preferenceファイルを削除して再度立ち上げることで回復しましたが、ちょっとアプリケーション起動時の初期化動作が甘いのと、関係ないウィンドウをAppleScriptの操作対象にしているのが問題であるように思われました。

ウィンドウのvisible制御は実戦的なAppleScriptではよくやる話なので、visible属性をいじくると異常動作を行うレベルだと、本気のAppleScriptは組めない感じがします。