Archive for the 'NSUserDefaults' Category

2016/03/29 画面がDarkModeかLightModeかを判別

OS X 10.10以降でメニューバー、メニュー、Dockを暗くするDark Modeか通常モード(Light Mode)に設定されているかを判別するAppleScriptです。

状態の取得は手軽にできたものの、設定はまだAppleScriptだけではできていないため、とりあえずgithub上のdark-modeをコンパイルしてAppleScript Librariesの中に突っ込んでAppleScriptでラッピングして呼び出すようにして使っています。

lightmode.png
▲Light

darkmode.png
▲Dark

AppleScript名:画面がDarkModeかLightModeかを判別
– Created 2016-03-29 by Takaaki Naganoya
– 2016 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”

set curMode to (current application’s NSUserDefaults’s standardUserDefaults()’s stringForKey:“AppleInterfaceStyle”) as string
–>  ”Dark” or “Light”

★Click Here to Open This Script 

2015/08/07 ASOCでSafariのダウンロードフォルダを取得する

Shaneから、Cocoaの機能を用いてSafariのダウンロードフォルダを求めるAppleScriptです。

やっていることは、Pure AppleScript版とほとんど同じなので、比較するとひじょうに参考になります。

AppleScript名:ASOCでSafariのダウンロードフォルダを取得する
– Created 2015-08-07 by Shane Stanley
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”

set aRes to getSafariDownloadFolder()
–>  file “Macintosh HD:Users:me:Downloads”

on getSafariDownloadFolder()
  set theID to id of application “Safari” –> “com.apple.Safari”
  
set storedDefaults to (current application’s NSUserDefaults’s standardUserDefaults()’s persistentDomainForName:theID)
  
set downloadFolder to storedDefaults’s valueForKeyPath:“DownloadsPath.stringByExpandingTildeInPath”
  
return downloadFolder as «class furl»
end getSafariDownloadFolder

★Click Here to Open This Script 

2015/01/22 言語と地域の「優先する言語」を取得する(ASOC)

「システム環境設定」の「言語と地域」で、「優先する言語:」に指定されている言語リストを取得するAppleScriptです。

本当は、OS上で用意している言語(35言語)のリストが欲しかったのですが、とりあえず。

international.png

AppleScript名:言語と地域の「優先する言語」を取得する(ASOC)
– Created 2015-01-22 by Takaaki Naganoya
– 2015 Piyomaru Software
– Technical Q&A QA1391
– How can I determine the order of the languages set by the user in the Language tab of the International preference pane?
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set defaultsO to current application’s NSUserDefaults’s standardUserDefaults()
set globalDomain to defaultsO’s persistentDomainForName:"NSGlobalDomain"
set langArray to (globalDomain’s objectForKey:"AppleLanguages") as list
–>  {​​​​​"ja", ​​​​​"en-US", ​​​​​"en-GB", ​​​​​"fr", ​​​​​"en"​​​}

★Click Here to Open This Script 

2011/01/16 TextFieldの表示/非表示設定

NSTextFieldの表示/非表示を行うサンプルです。

→ hidetf.zip

2010/11/23 AppleScriptObjCでNSTextFieldの表示/非表示きりかえ

AppleScript Studioで、各GUI部品を表示したり隠したりするのは、実に「よくある処理」でした。ただ、それをAppleScriptObjCで再現しようとすると、簡単そうな割に再現しづらい状況。

先日も、AppleScriptObjCでプログラムを組んでいたところ、Text Fieldの表示/非表示をいじくりたくなったのですが……いくつか並べられたText Fieldをまとめて隠そうとする方法が見つからず、面倒くさかったのでtab viewにまとめて突っ込んで、tabレスのtabにして(tabが表示されない)、表示tab view itemを切り替えることでまとめて表示/非表示を制御してしまいました。

時間のあるときに、「実際のところはどうやるんだろう?」と思い出し、検索エンジンで調べてみました。Scripter連中がObjective-C系のMLやフォーラムで質問を投稿している様子を見つけましたが、対する回答は……

 「Window上から削除しちゃえばいいじゃん」

のような「それだと明らかに再表示は無理ですよね〜」という返事だったりして、納得しづらいものがありました。

しばらくMLの過去ログを中心に調べていたものの、どうもやり方が見当たらなかったので、根本的にやり方を変更してみたらあっさり実現。

hidetf.jpg

TextFieldのvisibilityをshared user defaultsにbindして、その環境設定値を書き換える(falseで表示、trueで非表示)ようにしてみました。

hidetf2.jpg

ASOCはサンプルや文献が少ないので、本当にこれでいいのか分かりませんが、動いているのでいいんじゃないでしょうか。

ちなみに、shared user defaultsの環境設定値の書き換えはedama2さんからコメントで教えていただいたあと、実際にプロジェクトを送っていただいたものからピックアップしました(直裁的な表現でいえばコピペですね)。

Xcodeのエディタの背景色を白から薄緑に変更してみたら、AppleScriptObjCの「変数ばっかり」なプログラムに対する抵抗感が薄れました(Allan CraigのBlogで発見)。本当は背景色を黒にするともっとよいのですが、背景色が白から変更できないAppleScriptエディタ上でも見えるためにはこのぐらいの色がよいではないかと思っています。

→ プロジェクトのダウンロード