Archive for the 'ダイアログ表示(dialog)' Category

11/13 文字入力ダイアログ(伏せ字表示)

display dialogで文字入力を求めるさい、パスワードなどの「そのまま表示されては困る」ようなものを入力させる際に、入力内容をすべて「・」に置き換えて伏せ字表示する記述例です。

dialog_secur.jpg

「with hidden answer」はずいぶん昔に追加されたオプションですが、どうもご存じでない方が多いようなので。

この伏せ字表示の入力ダイアログからは、コピー&ペーストでその内容を取り出すことはできませんし、GUI Scripting経由で入力内容を取り出すこともできません。Mac OS Xの仕様上そうなっているわけですが、そんなことができたらセキュリティホールになってしまうため、これらの操作が「できない」のが正しい挙動です。

スクリプト名:文字入力ダイアログ(伏せ字表示)
display dialog “パスワードを入力してね” default answer “” buttons {“OK”} default button 1 with hidden answer

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

06/19 ペアになる値のセットを選択

ペアになる値のセットを選択するAppleScriptです。1,2,3の値のリストに対して、赤、青、緑のそれぞれの色を割り当てる場合に、1に対するものはどれか、2に対するものはどれか……と、ユーザーに尋ねて対応リストを作成します。

pair1.jpg

pair2.jpg

pair3.jpg

pair4.jpg

最後に、ペアを構成するリストの最後の項目については、組み合わせパターンが残りのものしか存在しないため、あえてダイアログで確認せずにペアを決定します。

スクリプト名:ペアになる値のセットを選択
set aList to {"10W", "20W", "30W"}
set bList to {"あか", "あお", "きいろ"}

set resPair to {}
repeat ((length of aList) - 1) times
  set aRes to choose from list aList with prompt "以下の内容から選択"
  
if aRes = false then return
  
set aaRes to contents of first item of aRes
  
  
set bRes to choose from list bList with prompt "「" & aaRes & "」に該当するものを以下から選択"
  
if bRes = false then return
  
set bbRes to contents of first item of bRes
  
  
set the end of resPair to {aaRes, bbRes}
  
  
–サブルーチン「deleteNumfromListByDelList」の仕様で、削除対象データをリストで渡す
  
set aList to deleteNumfromListByDelList(aList, {aaRes}) of me
  
set bList to deleteNumfromListByDelList(bList, {bbRes}) of me
  
end repeat

–最後の項目はユーザーに尋ねなくても、残ったものを使えばよい
set the end of resPair to {contents of first item of aList, contents of first item of bList}

resPair
–> {{"10W", "あか"}, {"20W", "あお"}, {"30W", "きいろ"}}

–指定のリストから削除指定リストに入っているアイテムを削除する
–こちらは、deleteListに入っているデータに該当するものを削除する
on deleteNumfromListByDelList(aList, deleteList)
  set newList to {}
  
repeat with i in aList
    set j to contents of i
    
if j is not in deleteList then
      set the end of newList to j
    end if
  end repeat
  
  
return newList
end deleteNumfromListByDelList

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

01/17 リストから選択してアイテム番号を返す〜複数選択対応

choose from listで複数選択を行いつつ、選択した項目がそれぞれリストの何アイテム目かの情報を返すAppleScriptです。

以前に、複数選択ではないバージョンは作ってあったのですが、Omni Outlinerから選択部分を取得するAppleScriptを作成する際に、即興で作ったものです。

スクリプト名:リストから選択してアイテム番号を返す〜複数選択対応
set aList to {“red”, “blue”, “green”, “white”}
set aMes to “項目を選択してください(Command-クリックで複数選択可能)”
set aRes to retMultipleItemFromListByItemNo(aList, aMes) of me

–リストから選択してアイテム番号を返す(複数項目選択対応)
on retMultipleItemFromListByItemNo(aList, aMes)
  set aRes to choose from list aList with prompt aMes with multiple selections allowed
  
if aRes = false then return 0
  
  
set hitList to {}
  
repeat with i1 in aRes
    set aRes to contents of i1
    
set hitNum to 1
    
repeat with i in aList
      set j to contents of i
      
if j is equal to aRes then
        exit repeat
      end if
      
set hitNum to hitNum + 1
    end repeat
    
set the end of hitList to hitNum
  end repeat
  
return hitList
end retMultipleItemFromListByItemNo

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

12/11 月あるいは期間入力サブルーチン

処理対象の月(年/月)の入力を求めるサブルーチンです。単月だけでなく、範囲を「…」で指定することも可能で、「2008/3…4」とか「2008/12…2009/3」といった指定が可能です。

dialog.jpeg

返り値は、範囲の開始と終了がdateオブジェクトで返ってきます。

「2008/12」と指定した場合、{date “2008年 12月 1日 月曜日 0:00:00 AM”, date “2009年 1月 1日 木曜日 0:00:00 AM”}。

「2008/3…7」と指定した場合、{date “2008年 3月 1日 土曜日 0:00:00 AM”, date “2008年 8月 1日 金曜日 0:00:00 AM”}。

「2008/12…2009/3」と指定した場合、{date “2008年 12月 1日 月曜日 0:00:00 AM”, date “2009年 4月 1日 水曜日 0:00:00 AM”}。

もともとは、iCalに重複登録されたイベントの削除を行うためのサブルーチンだったので(mobile meとかiPhoneとかEntourageなどとあちこちシンクロしていたらそうなったらしい)、その削除対象を指定するために作ったものです。返り値の終了日時がびみょーに1秒ほどオーバーしているところが気になる(すでに翌日になっている)場合には、終了日時から1秒引いておくなどして使ってみてください。

スクリプト名:月あるいは期間入力サブルーチン
指定期間のイベントを取得
set todayDat to current date
set targYear to (year of todayDat) as string
set targMonth to (month of todayDat as number) as string
set aTarg to text returned of (display dialog "重複イベントの削除対象月は?(YYYY/MM)" default answer (targYear & "/" & targMonth))
set {sDate, eDate} to getRangeFromDateText(aTarg) of me

on getRangeFromDateText(aText)
  if aText does not contain "" then
    普通にYYYY/MM指定のみ行った場合
    
set sDate to (aText & "/1")
    
set eDate to (date sDate) + (getMlen(year of (date sDate), month of (date sDate)) of me) * days
    
set sDate to date sDate
    
  else
    期間を「YYYY/MM…YYYY/MM」  で指定した場合
    
set curDelim to AppleScript’s text item delimiters
    
set AppleScript’s text item delimiters to ""
    
set tList to text items of aText
    
set AppleScript’s text item delimiters to curDelim
    
    
set item1T to contents of item 1 of tList
    
set item2T to contents of item 2 of tList
    
    
set sDate to date retYYYYMDD(item1T) of me
    
set eDate1 to date retYYYYMDD(item2T) of me
    
set eDate to eDate1 + (getMlen(year of sDate, month of eDate1) of me) * days
  end if
  
  
return {sDate, eDate}
end getRangeFromDateText

on retYYYYMDD(aText)
  if aText contains "/" then
    set bText to aText & "/1"
  else
    set thisYear to (year of (current date)) as string
    
set bText to thisYear & "/" & aText & "/1"
  end if
  
return bText
end retYYYYMDD

指定月の長さを得る(日数)
on getMlen(aYear, aMonth)
  
  
set aYear to aYear as number
  
set aMonth to aMonth as number
  
  
set aDat to (aYear as text) & "/" & (aMonth as text) & "/1"
  
if aMonth is not equal to 12 then
    set eDat to ((aYear as text) & "/" & (aMonth + 1) as text) & "/1"
  else
    set eDat to ((aYear + 1) as text) & "/" & (1 as text) & "/1"
  end if
  
  
set eDat to date eDat
  
set eDat to eDat - 1
  
  
set mLen to day of eDat
  
return mLen
  
end getMlen

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

09/09 choose from listのデフォルト値を指定する(複数指定)

リストの中からユーザーに選択を求める「choose from list」で、複数のデフォルト選択値を指定するScript記述例です。

choosefromlist2.jpeg
(more…)

09/07 リストから選択してアイテム番号を返す

非常によくある処理、choose from listでリストからの選択を求め、選択された項目のリスト番号を返します。本当は、choose from list命令に選択されたリスト項目の番号を返すようなオプションがあるべきなのですが、ないのでみんなこのように組んでいるわけです。
(more…)

09/07 choose from listのデフォルト値を指定する

リストの中からユーザーに選択を求める「choose from list」で、デフォルト選択値を指定するScript記述例です。あまり使う機会は多くはないのですが、とりあえず。

choosefromlist.jpeg

スクリプト名:choose from listのデフォルト値を指定する
set choices to {"ひよこ", "うし", "ぴようるふ", "にわとり"}
set default_items to {"ぴようるふ"}
choose from list choices default items default_items

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