AppleScript Fun: เปลี่ยนโฟลเดอร์ดาวน์โหลดของ Safari โดยอัตโนมัติ

ในขณะที่โปรแกรมและบริการต่าง ๆ บนคอมพิวเตอร์มีไว้เพื่ออำนวยความสะดวกแก่คุณมีบางครั้งที่คุณอาจจำเป็นต้องทำงานซ้ำ ๆ โดยใช้เครื่องมือและโปรแกรมต่าง ๆ ในระบบ ในกรณีเหล่านี้การใช้เครื่องมือการเขียนสคริปต์อาจมีประโยชน์อย่างยิ่ง ซึ่งแตกต่างจากการเขียนโปรแกรมการเขียนสคริปต์คือเมื่อคุณใช้ชุดเครื่องมือและยูทิลิตี้ปัจจุบันและทำให้การโต้ตอบกับคำสั่งทำได้โดยอัตโนมัติ ตัวอย่างเช่นด้วย Javascript คุณสามารถบอกให้เบราว์เซอร์เปลี่ยนวิธีแสดงเนื้อหา HTML หรือด้วย Automator คุณสามารถบอก Finder ให้จัดระเบียบไฟล์ในบางวิธี

เมื่อเร็ว ๆ นี้มีเพื่อนร่วมงานที่ CNET มาหาฉันด้วยสถานการณ์ที่ไม่เหมือนใครซึ่งเขาต้องการให้ Mac ของเขาเปลี่ยนโฟลเดอร์ดาวน์โหลดของ Safari โดยอัตโนมัติตามการปรากฏตัวของไดรฟ์ภายนอก ความคิดที่นี่คือการให้ Safari วางไฟล์ที่ดาวน์โหลดไว้ในไดเรกทอรีดาวน์โหลดเริ่มต้น แต่เมื่อคุณแนบไดรฟ์ภายนอกที่ระบุ (เช่น thumbdrive ชื่อ "ดาวน์โหลด") จากนั้นให้ระบบสลับไดเรกทอรีการดาวน์โหลดของ Safari ไปยังไดรฟ์ภายนอกโดยอัตโนมัติ เนื่องจากมันอาจจะยุ่งยากในการเปลี่ยนแปลงด้วยตนเอง

น่าเสียดายที่ Safari เองนั้นไม่มีความสามารถในการทำเช่นนี้ แต่ OS X มีทรัพยากรที่สามารถใช้งานได้และถูกสคริปต์โดยใช้ AppleScript สำหรับการจัดการแอปพลิเคชัน Safari และบริการ OS X บางอย่างเชลล์สคริปต์เพื่อดำเนินการบางอย่างที่ไม่ได้ใช้ อินเทอร์เฟซของแอปพลิเคชันและตัวเรียกใช้ระบบสำหรับการเรียกใช้สคริปต์เฉพาะเมื่อมีการเชื่อมต่อไดรฟ์

เริ่มแรกเมื่อคิดถึงปัญหานี้การแก้ปัญหาอาจดูค่อนข้างตรงไปตรงมาและสถานการณ์สมมติต่อไปนี้อาจดูเหมือนเป็นคำตอบที่ดี:

  1. ตั้งค่าสคริปต์ให้เรียกใช้คำสั่ง "ค่าเริ่มต้นเขียน com.apple.Safari DownloadFolder NAME" เพื่อเปลี่ยนโฟลเดอร์ดาวน์โหลดเป็นตำแหน่งที่ระบุโดย "NAME"
  2. เรียกใช้สคริปต์นี้โดยใช้ตัวเรียกใช้ระบบก็ต่อเมื่อมีการเชื่อมต่อไดรฟ์เฉพาะ
  3. ทำซ้ำโดยใช้คำสั่งที่คล้ายกันซึ่งชี้ไปยังตำแหน่งอื่นเมื่อไม่ได้เชื่อมต่อไดรฟ์อีกต่อไป

แม้ว่าวิธีการพื้นฐานนี้อาจดูสมเหตุสมผล แต่จะไม่สามารถทำได้ด้วยเหตุผลหลายประการ ก่อนอื่นเมื่อ Safari ทำงานแล้ววิธีเดียวที่จะเปลี่ยนการตั้งค่าของมันคือผ่านตัวโปรแกรมเอง เมื่อโปรแกรมโหลดมันจะอ่านการตั้งค่าลงใน RAM และจัดการการตั้งค่าที่นั่นดังนั้นหากคุณแก้ไขไฟล์การกำหนดค่าโดยใช้ TextEdit หรือคำสั่ง "ค่าเริ่มต้น" ตามที่กล่าวไว้ข้างต้นแล้วมันจะไม่มีผลกับโปรแกรม นอกจากนี้ Safari จะเขียนการตั้งค่ากลับไปที่ดิสก์เมื่อออกจากโปรแกรมซึ่งจะเขียนทับการตั้งค่าที่เปลี่ยนแปลง

นอกจากนี้วิธีการนี้จะถือว่าระบบมีทรัพยากรที่พร้อมใช้งานซึ่งจะตรวจสอบสถานะของไดรฟ์ที่ระบุและเรียกสคริปต์เมื่อใดก็ตามที่มีไดรฟ์นั้นซึ่งไม่ใช่กรณี ระบบสามารถตรวจสอบว่ามีการเชื่อมต่อไดรฟ์หรือไม่ แต่จำเป็นต้องใช้สคริปต์เพิ่มเติมเพื่อระบุชื่อไดรฟ์เพื่อตรวจสอบทุกครั้งที่มีการต่อไดรฟ์

ในที่สุดก็มีจำนวนของความแตกต่างที่จะต้องพิจารณา ตัวอย่างเช่นเนื่องจาก Safari จำเป็นต้องใช้เพื่อเปลี่ยนการกำหนดค่าตามความชอบเมื่อใช้งานการทำเช่นนั้นจะบังคับให้เป็นแอปพลิเคชั่นที่ดีที่สุดซึ่งจะยังคงอยู่จนกว่าคุณจะมีสคริปต์ตรวจพบแอปพลิเคชั่นสำคัญที่สุด เสร็จสมบูรณ์ นอกจากนี้คุณไม่ต้องการให้สคริปต์รันและ swtich โปรแกรมที่ใช้งานอยู่เมื่อมีการเชื่อมต่อไดรฟ์แบบสุ่ม

เนื่องจากสิ่งเหล่านี้สคริปต์จะต้องรวมข้อควรพิจารณาห้าข้อต่อไปนี้:

  1. เปิดใช้เมื่อต่อไดรฟ์ใหม่เท่านั้น
  2. เปลี่ยนการตั้งค่าเฉพาะเมื่อมีการแนบไดรฟ์ที่ชื่อว่า "ดาวน์โหลด" (หรือชื่อที่ต้องการ)
  3. เป็นเงื่อนไขในการเปลี่ยนการตั้งค่าว่า Safari เปิดตัวอยู่หรือไม่
  4. เปลี่ยนการตั้งค่าเฉพาะเมื่อมีตำแหน่งการดาวน์โหลดที่ต้องการใหม่
  5. มีความสามารถในการคืนค่าแอปพลิเคชันที่สำคัญที่สุดหากสคริปต์ต้องเปลี่ยนไปใช้ Safari

ในการใช้งานตัวเลือกเหล่านี้จำเป็นต้องสร้างสคริปต์สองตัว สิ่งแรกคือสำหรับตัวเรียกใช้งานระบบ "launchd" ซึ่งจะใช้ในการตรวจสอบจุดเชื่อมต่อไดรฟ์ของระบบเพื่อดูว่ามีการติดตั้งและเชื่อมต่อไดรฟ์ใหม่หรือไม่ ถ้าเป็นเช่นนั้นมันจะเปิดสคริปต์ที่จะตรวจสอบชื่อไดรฟ์ดูว่า Safari กำลังทำงานอยู่หรือไม่จากนั้นเปลี่ยนการตั้งค่าของ Safari เฉพาะเมื่อแตกต่างจากการเลือกไดรฟ์ภายนอกเป็นหลัก แต่หากไม่มีอยู่ให้ใช้โฟลเดอร์ดาวน์โหลดเริ่มต้น .

สคริปต์ 1: LaunchAgent สำหรับการตรวจสอบไดรฟ์

สคริปต์แรกที่สร้างขึ้นสำหรับตัวเรียกใช้งานระบบซึ่งเรียกว่า Launch Agent หากต้องการสร้างให้เปิดเทอร์มินัลแล้วพิมพ์คำสั่งต่อไปนี้ (คัดลอกและวางเพื่อความเรียบง่าย):

แตะ ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist

เมื่อเสร็จแล้วให้เปิดใน TextEdit โดยใช้คำสั่งต่อไปนี้:

เปิด -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist

ตอนนี้คุณควรเปิดเอกสาร TextEdit เปล่าไว้ดังนั้นให้คัดลอกข้อความต่อไปนี้ไปไว้ในนั้นและบันทึกเอกสาร แต่เปิดไว้ในตอนนี้ คุณจะต้องเปลี่ยนส่วน "FILEPATH" เพื่อเปลี่ยนตำแหน่งของสคริปต์:

 ป้ายกำกับ localChangeSafariDownloads QueueDirectories WatchPaths / Volumes Program / usr / bin / osascript ProgramArguments osascript FILEPATH 

เมื่อคุณเข้าสู่ระบบสคริปต์นี้จะถูกโหลดเข้าสู่กระบวนการตัวเรียกใช้ระบบและกำหนดเงื่อนไขและคำแนะนำสำหรับการเรียกใช้สคริปต์หลักสำหรับการแก้ไขการตั้งค่าของ Safari ในกรณีนี้ตัวเรียกใช้งานจะถูกบอกให้เฝ้าดูไดเรกทอรี / เล่มเพื่อดูว่ามีการเปลี่ยนแปลงใด ๆ เกิดขึ้นภายในไดเรกทอรีนั้นหรือไม่ เนื่องจากนี่คือตำแหน่งที่ติดตั้งระบบไฟล์ทุกครั้งที่ไดรฟ์ต่อพ่วงหรือแยกออกจากระบบสิ่งนี้จะทำให้สคริปต์หลักทำงาน

สคริปต์ 2: AppleScript สำหรับเปลี่ยนการตั้งค่า

สคริปต์ที่สองเป็นสคริปต์หลักที่จะดำเนินการทั้งหมดรวมถึงการตรวจสอบชื่อไดรฟ์ไม่ว่าจะเปิด Safari หรือไม่และเงื่อนไขอื่น ๆ สำหรับการเปลี่ยนการตั้งค่า ในการสร้างไปที่โฟลเดอร์ / Applications / Utilities / และเปิดโปรแกรม AppleScript Editor หน้าต่างเอดิเตอร์ว่างเปล่าจะเปิดขึ้นและเมื่อคัดลอกและวางสคริปต์ต่อไปนี้ลงไป:

- ตั้งชื่อไดรฟ์สำรองเพื่อใช้เป็นโฟลเดอร์ดาวน์โหลดที่นี่

ตั้งค่า dlFolder เป็น convertHome ("/ เล่ม / ดาวน์โหลด")

บอก แอปพลิเคชัน "Finder"

หาก มีอยู่ [ ไฟล์ POSIX dlFolder]

- ไม่ทำอะไรเลยและใช้โฟลเดอร์

อื่น

- ตั้งค่า dlFolder เป็นโฮมไดเร็กตอรี่เริ่มต้น

ตั้งค่า dlFolder เป็น (เส้นทาง POSIX ของ ( เส้นทางไปยัง โฟลเดอร์บ้านเป็น ข้อความ )) & "ดาวน์โหลด"

จบถ้า

จบบอก

- รับเส้นทางปัจจุบันจากโปรแกรมซาฟารี

ตั้งค่า currentpath เป็น convertHome ( ทำเชลล์สคริปต์ "ค่าเริ่มต้นอ่าน com.apple.Safari DownloadsPath")

- เปลี่ยนเส้นทางเฉพาะในกรณีที่การตั้งค่าปัจจุบันไม่ตรงกับเส้นทางเข้า (มีบางอย่างที่จะเปลี่ยนแปลง)

ถ้า (currentpath เป็น ข้อความ ) ไม่เท่ากับ (dlFolder เป็น ข้อความ ) ดังนั้น

- หาก Safari กำลังทำงานให้เปลี่ยนการตั้งค่าผ่านการตั้งค่าของ Safari

ถ้า appIsRunning ("Safari") จากนั้น

- กำหนดแอปพลิเคชั่นด้านหน้าสุดเพื่อเรียกคืนเมื่อสคริปต์เสร็จสิ้น

ตั้ง frontApp ให้เป็น เส้นทางไปยัง แอปพลิเคชันที่อยู่ด้านหน้าเป็น ข้อความ

- คัดลอกเส้นทางโฟลเดอร์ดาวน์โหลดไปยังคลิปบอร์ด

ตั้งค่าคลิปบอร์ดเป็น dlFolder เป็น ข้อความ

เปิดใช้งาน แอปพลิเคชัน "Safari"

บอก แอปพลิเคชัน "เหตุการณ์ของระบบ" เพื่อบอก ขั้นตอนการสมัคร "Safari"

- เปิดการตั้งค่าหรือนำมาไว้ข้างหน้า (หน้าต่าง 1)

การกดแป้น "" โดยใช้ {command down}

หน่วงเวลา 1 - หยุดชั่วคราวในการแสดงหน้าต่างอาจส่งผลให้เกิดข้อผิดพลาดเราจึงรอสักครู่

- เปลี่ยนเป็นแท็บทั่วไป

คลิก ปุ่ม "ทั่วไป" ของ แถบเครื่องมือ 1 จาก หน้าต่าง 1

- เปลี่ยนตำแหน่งดาวน์โหลดเป็นอื่น ๆ

ปุ่ม บอก ป๊อปอัป "บันทึกไฟล์ที่ดาวน์โหลดไปยัง:" ของ กลุ่ม 1 ของ กลุ่ม 1 ของ หน้าต่าง "ทั่วไป"

คลิก

คลิก รายการเมนู "อื่น ๆ ... " ของ เมนู 1 - สามจุดคือจุดไข่ปลาไม่ใช่สามช่วง

จบบอก

- เปิดกล่องโต้ตอบ "ไปที่โฟลเดอร์"

การกดแป้น "g" โดยใช้ {shift down, command down}

- วางเส้นทางโฟลเดอร์ในฟิลด์ตำแหน่ง

บอก หน้าต่าง "ไปที่โฟลเดอร์"

การกดแป้น "v" โดยใช้ {command down}

การกดแป้น กลับมา

จบบอก

คลิก ปุ่ม "เลือก" ของ แผ่นงานที่ 1 ของ หน้าต่าง "ทั่วไป"

- ปิดการตั้งค่า

การกดแป้น "w" โดยใช้ {command down}

จบบอก

- กู้คืนแอปพลิเคชันส่วนหน้าหลังจากงานเสร็จสมบูรณ์

แจ้งให้ แอปพลิเคชัน frontApp ทราบ เพื่อ เปิดใช้งาน

อื่น

- หาก Safari ไม่ทำงานให้ใช้คำสั่งเริ่มต้นเพื่อเปลี่ยนการตั้งค่า

ทำเชลล์สคริปต์ ("ค่าเริ่มต้นเขียน com.apple.Safari DownloadsPath" & dlFolder)

จบถ้า

จบถ้า

- ฟังก์ชั่นในการแปลงการอ้างอิงเส้นทางบ้านเป็นเส้นทางแบบเต็ม

บน convertHome (currentpath)

ถ้า currentpath มี "~ /" แล้ว

ตั้ง oldDelimiter เป็นตัวคั่นรายการข้อความของ AppleScript

ตั้งค่า ตัวคั่นรายการข้อความของ AppleScript เป็น {"~ /"}

ตั้งค่า textPath เป็นทุก รายการข้อความ ของ เส้นทางปัจจุบัน

ตั้งค่า ตัวคั่นรายการข้อความของ AppleScript เป็น oldDelimiter

ตั้งค่า currentpath เป็น เส้นทาง POSIX ของ ( พา ธ ไปที่ โฮมโฟลเดอร์เป็น ข้อความ ) & รายการที่ 2 ใน textPath

จบถ้า

ส่งคืน currentpath

สิ้นสุดการ แปลงบ้าน

- ฟังก์ชั่นเพื่อตรวจสอบว่าแอปพลิเคชัน "appName" ทำงานหรือไม่ (ในกรณีนี้ใช้สำหรับ Safari)

ใน appIsRunning (appName)

บอก แอปพลิเคชัน "เหตุการณ์ของระบบ" ให้กับ (ชื่อ กระบวนการ ) มี appName

สิ้นสุด แอป isRunning

ข้อความของสคริปต์ในตอนแรกจะเป็นสีม่วง แต่เมื่อคุณคลิกปุ่มแถบเครื่องมือคอมไพล์หรือถ้าคุณบันทึกสคริปต์ก็จะกลายเป็นสีคล้ายกับสิ่งที่คุณเห็นที่นี่ บันทึกสคริปต์ด้วยชื่อเช่น "ChangeDownloads" ไปยังตำแหน่งที่คุณเลือก (คุณสามารถวางไว้ในโฟลเดอร์ "สคริปต์" ในไดเรกทอรีเอกสารของคุณหรือในห้องสมุดผู้ใช้ของคุณ) และปิดตัวแก้ไข AppleScript

ตอนนี้เปิดหน้าต่าง Terminal ขึ้นมาใหม่แล้วลากไฟล์สคริปต์ที่สร้างขึ้นมาใหม่ เมื่อคุณทำเช่นนี้ไฟล์พา ธ เต็มไปยังสคริปต์จะถูกป้อนเข้าไปในหน้าต่างซึ่งจะมีลักษณะเช่น "/Users/username/Documents/ChangeDownloads.scpt" ใช้เมาส์เลือกเส้นทางของไฟล์ทั้งหมดกด Command-C เพื่อคัดลอกไปที่คลิปบอร์ดแล้วกลับไปที่ Script 1 ใน TextEdit และแทนที่รายการ "FILEPATH" ด้วยข้อความที่คัดลอกของคุณ จากนั้นบันทึกและปิดเอกสาร

ณ จุดนี้สคริปต์จะถูกตั้งค่าทั้งหมด เพียงออกจากระบบและเข้าสู่ระบบอีกครั้งเพื่อโหลดสคริปต์เอเจนต์เรียกใช้งาน (สคริปต์ 1) และตอนนี้เมื่อคุณติดตั้งไดรฟ์ที่มีชื่อว่า "ดาวน์โหลด" การตั้งค่าของ Safari จะเปลี่ยนโดยอัตโนมัติดังนั้นจึงใช้ไดรฟ์นั้นเป็นโฟลเดอร์ดาวน์โหลด หากคุณเลิกเมานท์ไดรฟ์การตั้งค่าจะถูกคืนค่า เช่นเดียวกันจะเกิดขึ้นหากคุณเปลี่ยนชื่อไดรฟ์เป็นชื่อ "ดาวน์โหลด" หรือเปลี่ยนชื่อจาก "ดาวน์โหลด" เป็นอย่างอื่น

โปรดทราบว่าในขณะที่สคริปต์นี้ใช้งานได้จะมีการทดสอบเฉพาะกับ OS X 10.6 "Snow Leopard" และ OS X 10.7 "Lion" ที่ใช้งาน Safari 5.1; อย่างไรก็ตามควรทำงานได้ดีกับการกำหนดค่าระบบอื่น ๆ ที่ทำงานอย่างน้อย Safari 5.0 ข้อกำหนดหลักคือเมื่อสคริปต์จัดการการตั้งค่าของ Safari จากภายในโปรแกรมจะใช้ดัชนีปุ่มเพื่อเปิดเมนูต่างๆและคลิกปุ่มต่างๆบนหน้าจอ หาก Apple เปลี่ยนองค์กรกำหนดลักษณะใน Safari ในอนาคตส่วนนี้ของสคริปต์จะไม่ทำงานจนกว่าจะมีการแก้ไขให้ชี้ไปที่ปุ่มที่เหมาะสมอีกครั้ง อย่างไรก็ตามสำหรับตอนนี้นั่นเป็นข้อ จำกัด เราจะต้องจัดการกับ วิธีแก้ปัญหาหนึ่งสำหรับสิ่งนี้ใน Lion คือการใช้ประโยชน์จากฟีเจอร์ Resume ของ Apple ในสคริปต์เพื่อออกจาก Safari ทำการเปลี่ยนแปลงค่ากำหนดแล้วเปิดโปรแกรมใหม่แทนที่จะต้องตั้งโปรแกรมอินเทอร์เฟซใหม่

สุดท้ายถ้าคุณตัดสินใจว่าคุณไม่ต้องการสคริปต์นี้อีกต่อไปคุณสามารถถอนการติดตั้งได้โดยการลบไฟล์ AppleScript แล้วลบไฟล์ LaunchAgent ด้วยตนเองหรือโดยการเรียกใช้คำสั่งต่อไปนี้ใน Terminal เมื่อดำเนินการเสร็จแล้วให้ออกจากระบบและลงชื่อเข้าใช้อีกครั้งและคุณจะกลับสู่ตารางที่หนึ่ง:

rm ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist


 

แสดงความคิดเห็นของคุณ