จดจำขนาดและตำแหน่งของหน้าต่างเมื่อถอดและเสียบจอภาพที่สอง


99

นี่คือสิ่งที่ sucks:

  1. เสียบจอภาพภายนอกเข้ากับแล็ปท็อป (Mac OS X Leopard ในกรณีของฉัน)
  2. จัดเรียงหน้าต่างของคุณเพื่อให้มี IDE บนหน้าจอเดียวและเบราว์เซอร์อีกอันหนึ่ง (ฯลฯ ฯลฯ ปรับขนาดจัดเรียงเอะอะเอะอะเอะอะ)
  3. ถอดปลั๊กจอภาพเพื่อเรียกใช้การประชุมหรืออะไรก็ตาม
  4. ไปที่ 1

ฉันต้องการแทนที่ขั้นตอนที่ 2 ด้วย“ คอมพิวเตอร์จำได้อย่างแม่นยำว่าฉันมีมันมาอย่างไร

(โดยส่วนตัวแล้วฉันต้องการวิธีแก้ปัญหาสำหรับ Mac เท่านั้น แต่การรวบรวมโซลูชันสำหรับระบบอื่น ๆ ที่นี่อาจเป็นประโยชน์กับผู้อื่นฉันแน่ใจว่ามันเป็นปัญหาทั่วไป)

คำตอบ:


56

ดูที่Stay by Cordless Dog ฉันเชื่อว่ามันเป็นสิ่งที่คุณต้องการอย่างแน่นอน


2
ฉันลองสิ่งนี้ มันใช้งานไม่ได้กับ X11 windows แต่ดูเหมือนว่าจะเป็นโฆษณา ขอบคุณสำหรับตัวชี้! อาจเป็นไปได้ว่านี่เป็นสิ่งที่ใกล้เคียงที่สุดที่เราได้แก้ปัญหาสำหรับ Mac ในปัจจุบัน
สาม

X11 windows ไม่ใช่อินสแตนซ์ NSWindow ของจริง (อย่างน้อยพวกเขาไม่ใช่ครั้งสุดท้ายที่ฉันตรวจสอบ) ดังนั้นจึงไม่แปลกใจเลยที่ Stay ไม่ต้องการทำอะไรกับพวกเขา :) ดีใจที่มันได้ผลอย่างอื่น!

1
สิ่งนี้ดูดี แต่มันไม่ทำงานกับแอปแบบเต็มหน้าจอใน Lion ฉันมี Safari ในโหมดเต็มหน้าจอเมื่อฉันมี 1 จอแสดงผลและหลังจากที่ฉันแนบจอแสดงผลที่ 2 ฉันต้องการออกจากหน้าจอเต็มและย้าย Safari ไปที่จอแสดงผลที่สอง Stay ไม่ย้ายแอปเต็มหน้าจอใด ๆ

1
ดูเหมือนว่าจะเป็นแบบที่ดี แต่ด้วยจอแสดงผลภายนอก 3 จอมันมักจะมีปัญหากับตำแหน่งและเพิ่งแก้ไขปัญหาได้ถึง 50% ดังนั้นฉันยังคงต้องทำคู่มือจำนวนมาก ฉันเพิ่งยกเลิกการติดตั้ง โอ้และมันแค่ 30 วันเท่านั้น!
Ernst Ernst

15

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

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

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

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

# Monitor Aliases
alias mon-laptop    0    # variable for my laptop monitor
alias mon-hp        1    # my external HP monitor

# Window Position Regions
alias hp-full        move screenOriginX;screenOriginY screenSizeX;screenSizeY         ${mon-hp}
alias hp-left        move screenOriginX;screenOriginY screenSizeX/2;screenSizeY         ${mon-hp}
alias hp-right       move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY         ${mon-hp}
alias laptop-full        move screenOriginX;screenOriginY screenSizeX;screenSizeY         ${mon-laptop}
alias laptop-left        move screenOriginX;screenOriginY screenSizeX/2;screenSizeY         ${mon-laptop}
alias laptop-right       move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY         ${mon-laptop}
alias laptop-righttop    move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY/2       ${mon-laptop}
alias laptop-rightbottom move screenOriginX+screenSizeX/2;screenOriginY+screenSizeY/2    screenSizeX/2;screenSizeY/2       ${mon-laptop}

# Window layouts for when I have 2 monitors
layout 2monitor 'Google Chrome':REPEAT ${hp-full}
layout 2monitor 'iCal':REPEAT ${hp-full}
layout 2monitor 'Coda':REPEAT ${hp-full}
layout 2monitor 'Mail':REPEAT ${laptop-full}
layout 2monitor 'Rdio':REPEAT ${laptop-full}
layout 2monitor 'Spotify':REPEAT ${laptop-full}
layout 2monitor 'Evernote':REPEAT ${laptop-full}

# Single monitor window layouts
layout 1monitor 'Google Chrome':REPEAT ${laptop-full}
layout 1monitor 'iCal':REPEAT ${laptop-full}
layout 1monitor 'Coda':REPEAT ${laptop-full}
layout 1monitor 'Mail':REPEAT ${laptop-full}
layout 1monitor 'Rdio':REPEAT ${laptop-full}
layout 1monitor 'Spotify':REPEAT ${laptop-full}
layout 1monitor 'Evernote':REPEAT ${laptop-full}

# Keyboard shortcuts for each layout
bind l:shift;ctrl layout 2monitor
bind g:shift;ctrl grid padding:5 0:2,1 1:2,2

# Auto-detect when a monitor is plugged in or out
default 2monitor count:2
default 1monitor count:1

นี่คือรายการคุณสมบัติจากหน้า GitHub ของ Slate:

  • ปรับแต่งได้สูง
  • การกดแป้นพิมพ์ผูกกับ:
    • ย้ายและ / หรือปรับขนาดหน้าต่าง
    • หน้าต่างโฟกัสตามทิศทาง
    • เปิดใช้งานเค้าโครงที่ตั้งไว้ล่วงหน้า
    • สร้างลบและเปิดใช้งานสแน็ปช็อตของสถานะปัจจุบันของหน้าต่าง
  • ตั้งค่าเลย์เอาต์เริ่มต้นสำหรับการกำหนดค่าจอภาพที่แตกต่างกันซึ่งจะเปิดใช้งานเมื่อตรวจพบการกำหนดค่านั้น
  • Window Hints: วิธีที่ง่ายในการเปลี่ยนโฟกัสของหน้าต่าง
  • [เบต้า] แอพพลิเคชั่นสวิตช์ที่ดีขึ้นและปรับแต่งได้มากขึ้น

นี่คือการสอนที่ดีเกี่ยวกับวิธีการใช้ประโยชน์จาก Slate ให้ได้มากที่สุด


มันจำได้ไหมว่าหน้าต่างอยู่ในตำแหน่งเมื่อจอภาพภายนอกที่เสียบเข้าที่ล่าสุดและเพิ่งคืนค่าได้อย่างไร แอพ "พัก" เกือบทำเช่นนี้ แต่มันก็ไม่สามารถจำหน้าต่างได้ (โดยเฉพาะ Chrome) ดังนั้นฉันยังคงมองหาบางสิ่งที่ดีกว่า
สาม

@dreeves ใช่มันเหมาะกับฉัน ฉันทำได้ด้วยตนเองโดยใช้รายการเมนูของ Slate“ Take Snapshot” และ“ Activate Snapshot”; หากคุณคลิกที่ปุ่มเหล่านั้นก่อนและหลังที่คุณทำให้คอมพิวเตอร์เข้าสู่โหมดสลีปคุณจะบันทึกและกู้คืนตำแหน่งหน้าต่างทั้งหมดของคุณ จากเอกสารดูเหมือนว่าชนวนสามารถทำ“เปิดใช้งานภาพรวม” โดยอัตโนมัติด้วยคำสั่งdefault ฉันไม่รู้ว่าคุณสามารถทำให้ส่วน "ถ่ายภาพ" เป็นไปโดยอัตโนมัติหรือไม่
Rory O'Kane

2
ฉันต้องการชี้ให้เห็นว่าสำหรับกรณีการใช้ OPs พวกเขาสามารถคลิกบันทึกภาพรวมและเรียกคืนภาพรวมในเมนู ตราบใดที่มีหน้าต่างเดียวที่คุณต้องการมันควรจะทำงานได้ดีโดยไม่ยุ่งกับสิ่งอื่น
Muhd

3
หินชนวนไม่ได้รับการบำรุงรักษาอีกต่อไปพวกเขาแนะนำให้ใช้ Hammerspoon ทันที
certainlyakey

8

ฉันได้แก้ไขสิ่งนี้ด้วย AppleScript ขนาดเล็กและยูทิลิตี้ฟรีแวร์ขนาดเล็ก Quicksilver

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

    try
        tell application "Adium"
            activate
            tell window "contacts"
                set the bounds to {1281, 200, 1460, 850}
            end tell
            tell chat windows
                set the bounds to {1281, 800, 1800, 1200}
            end tell
        end tell
    end try
    
    try
        tell application "iTunes"
            activate
            set the bounds of the first window to {1750, 520, 2700, 1150}
        end tell
    end try
    
    try
        tell application "Terminal"
            activate
            set the bounds of the first window to {2450, 320, 3180, 950}
        end tell
    end try
    
    try
        tell application "Firefox"
            activate
            set the bounds of the first window to {1460, 20, 2800, 950}
        end tell
    end try
    
  2. คุณจะต้องปรับแต่งแอปพลิเคชั่นที่คุณต้องการบนหน้าจอและหน้าต่างของคุณตามที่คุณต้องการ ฉันเป็นโปรแกรมเมอร์และการกำหนดค่าข้างต้นเป็นวิธีที่ฉันเรียกใช้จอภาพที่สองของฉัน

  3. ติดตั้งปรอท

    ฉันเลือกที่จะทำให้มองไม่เห็นใน Dock และเพียงแค่เรียกใช้เป็นแถบงานเล็ก ๆ

  4. ตั้งค่าคำสั่งคีย์ใน Quicksilver และลากและวาง AppleScript ของคุณจากขั้นตอนที่ 1 ลงในหน้าต่างเพื่อดำเนินการ CommandShiftAฉันผูกพันมัน ใช้งานได้ดี!


3
ไม่สามารถปรับขนาดได้เป็นพิเศษหากคุณมีแอปพลิเคชั่นจำนวนมากที่ต้องจัดการ หรือง่ายต่อการจัดการ! ขอบเขตการเข้ารหัสยากจริงๆไม่สนุก
fatuhoku

คุณสามารถตั้งค่าเดสก์ท็อปที่แอปพลิเคชันปรากฏขึ้นได้หรือไม่?
dangerousdave

3

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

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

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

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


1
ขอบคุณ! ไม่ใช่คำตอบที่ฉันหวังไว้ แต่เป็นผู้นำที่ดี!
2552

3

ฉันเพิ่งติดตามhttp://cordlessdog.com/stay/ ใช้งานได้ดีสำหรับฉันด้วยความล่าช้าเล็กน้อย

เมื่อคุณติดตั้งบน mac แล้วคุณสามารถเปิดใช้งานและเก็บหน้าต่างได้ตามต้องการ ดังนั้นเมื่อใดก็ตามที่คุณยกเลิกการเชื่อมต่อจอแสดงผลและเชื่อมต่อกลับคุณจะได้รับการคืนค่าหน้าต่างทั้งหมด

คุณอาจต้องเพิ่มการเข้าพักเป็นแอปพลิเคชันเริ่มต้นของคุณเนื่องจากคุณจะต้องเปิดใช้งานทุกครั้งที่คุณรีสตาร์ท Mac


2

ฉันแก้ไขสิ่งนี้โดยไม่มีแอปพลิเคชันภายนอก

สิ่งที่คุณต้องทำคือตรวจสอบให้แน่ใจว่าแล็ปท็อปของคุณคือ "เดสก์ท็อป 1" และจอภาพภายนอก "เดสก์ท็อป 2" ของคุณ

คุณสามารถทำได้โดยการย้ายแถบเมนูสีขาวไปยังหน้าจอแล็ปท็อปในการตั้งค่าระบบ> การแสดงผล> การจัดเรียง


1

อย่างน้อยใน Windows แอพจำนวนมากจะคืนค่าหากคุณขยายให้ใหญ่สุดก่อนเปลี่ยนจอภาพ ปล่อยให้อยู่ตามลำพังขณะที่คุณอยู่ในการประชุมจากนั้นกู้คืนพวกเขาหลังจากเชื่อมต่อใหม่

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

และถ้าคุณเปลี่ยนจากจอภาพสองจอเป็นหนึ่งจอ Alt + Spacebar + M แป้นลูกศรจะช่วยชีวิต (Windows อีกครั้งขอโทษด้วย) หากคุณ "สูญเสีย" หน้าต่างของคุณ


1

http://www.irradiatedsoftware.com/twoup/index.html

ฉันพบสิ่งนี้ผ่าน Lifehacker และมันใช้งานได้ดีสำหรับฉัน ฉันใช้ SizeUp รุ่นโปรตรงข้ามกับ TwoUp ฟรีและมันสมบูรณ์แบบ


คุณกำลังบอกว่าวิธีนี้แก้ปัญหาที่ฉันถูกวางแม้ว่า? ดูเหมือนว่าหน้าเว็บที่คุณเชื่อมโยงไปถึงจะไม่พูดถึงอะไรเลย
3 dreeves

1
ไม่นี่ไม่ได้แก้ปัญหาเลย SizeUp ทำให้การย้ายหน้าต่างไปยังตำแหน่งที่คุณต้องการเร็วขึ้น แต่คุณยังต้องสลับระหว่างแต่ละหน้าต่างด้วยตนเองและบอก SizeUp ว่าคุณต้องการย้ายแต่ละหน้าต่างไปที่ใด
Rory O'Kane

1

ฉันเป็นผู้ใช้ Windows และกำลังหาวิธีปิดคุณลักษณะ Windows 7 ใหม่เพื่อย้ายหน้าต่างทั้งหมดออกจากจอภาพภายนอกที่ไม่ได้เสียบปลั๊ก ฉันพบใบเสร็จรับเงิน (สำหรับการ์ดแสดงผล ATI) เพื่อตั้งค่า DMMEnableDDCPolling ทั้งหมดในรีจิสทรีเป็น 0 ซึ่งจะปิดใช้งานการตรวจสอบโดยอัตโนมัติหากปิดจอภาพ ตอนนี้หากถอดปลั๊กจอภาพและเสียบปลั๊กอีกครั้งหน้าต่างทุกบานจะอยู่ในตำแหน่งเดิม

นี่คือคำตอบที่ช่วยฉัน: https://superuser.com/questions/120983/how-to-disable-monitor-auto-detection-in-windows-7 (คำตอบโดยอเล็กซ์)


1
สิ่งนี้เกี่ยวข้องกับ Mac หรือไม่?

5
ไม่ .. แต่คำถามถูกติดแท็กด้วยเช่นกันว่า "windows" (แม้ว่า OP อาจจะเรียกว่าโปรแกรม windows;)) อย่างไรก็ตามสำหรับ Windows มีประโยชน์หลายอย่างสำหรับงาน ฉันใช้ZMoverของ Basta เป็นการส่วนตัวและใช้งานได้ดี อีกหนึ่งทางเลือกของ DeskSoft WindowManager แต่แน่นอนว่าสิ่งเหล่านี้จะไม่ช่วยผู้ใช้ OSX
วิลล์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.