คุณจะนำเลย์เอาต์มาใช้ด้วยการเริ่มต้นแอปพลิเคชันอัตโนมัติในตัวจัดการหน้าต่าง i3 ได้อย่างไร


23

นี่คือการติดตามคำถามก่อนหน้านี้เกี่ยวกับวิธีเริ่มต้นแอปพลิเคชันอัตโนมัติในพื้นที่ทำงานแต่ละรายการด้วยตัวจัดการหน้าต่างi3และสิ่งที่สามารถและไม่สามารถทำได้ภายใน~/.i3/configไฟล์การกำหนดค่า

ก่อนอื่นโซลูชันที่จัดเตรียมตามเอกสารของArch Linux และการปรับปรุงที่ให้ไว้โดย op ซึ่งเขาได้เพิ่มตรรกะเพิ่มเติม:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'

สิ่งที่น่าสนใจคือการแลกเปลี่ยนเกี่ยวกับการใช้ประโยชน์จากสิ่งเหล่านี้โดยตรงบนบรรทัดคำสั่งโดยไม่ทำซ้ำ:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium

แต่ฉันไม่เคยเห็นการกำหนดค่าที่เริ่มอัตโนมัติหน้าต่าง / แอพจำนวนมากในแต่ละพื้นที่ทำงานตามรูปแบบแนวตั้งหรือแนวนอนที่ต้องการ เป้าหมายของฉันคือการเริ่มต้นการกำหนดค่าแบบง่าย ๆ นี้ที่ฉันใช้:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3

ดังนั้นจึงเริ่มต้นด้วยบางสิ่งเช่นนี้ในconfigไฟล์:

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'

แต่คุณจะประสบความสำเร็จในโลกประเภทการจัดวางและการแยกแนวตั้ง / แนวนอนหรือไม่? ฉันพยายาม แต่ก็ยังไม่ชัดเจนว่าคุณ "ผสม" การทำงานและเลย์เอาต์อย่างไร ไวยากรณ์รู้สึกแปลกประหลาดที่จะเริ่มต้นเนื่องจากคุณกำลังดำเนินการi3-imgภายในการกำหนดค่าของ i3 คุณใช้split h(หรือ v) - layout split v- exec layout split v- focus down(หรือขวา) ในระหว่างการexecโทรแต่ละครั้งหรือไม่?

สำหรับเวิร์กสเปซเดียวการกำหนดค่าเริ่มต้นแอปพลิเคชันทั้งหมดไม่ว่าจะเป็นแนวตั้งหรือแนวนอนและฉันดูเหมือนจะไม่มีผลกับเลย์เอาต์หรือสุดท้าย splitคำสั่งในสายโซ่ตัดสินใจว่าจะเพิ่มหน้าต่างในแนวตั้งหรือแนวนอน i3-msgดูเหมือนจะไม่สนใจบางส่วนของคำสั่งที่ไม่ได้จัดรูปแบบที่เหมาะสมในบางกรณีดังนั้นจึงยากที่จะแก้ปัญหา นี่คือความจริงที่ว่าคุณต้องออกจาก X และstartxอีกครั้งทุกครั้งเพื่อยืนยันผลลัพธ์เนื่องจากการรีเฟรชการกำหนดค่าด้วยmod+shift+Rจะไม่ลดลงแม้ว่าคุณจะปิดทุกอย่างในแต่ละพื้นที่ทำงาน

อะไรคือวิธีที่เหมาะสมในการกำหนดค่านี้ ใครบ้างมีวิธีแก้ปัญหาที่ใช้สิ่งนี้หรือไม่? เอกสารสวยดี แต่ก็ไม่ได้ให้ที่ฉันสามารถดูตัวอย่างรายละเอียดที่ผสมการดำเนินการและการจัดวางบนพื้นที่ทำงานหลาย


นอกจากนี้ยังขยายนี้

เราไม่จำเป็นต้องใช้ FF หรือ urxvt เพื่อจัดหาโซลูชัน ไม่มีอะไรพิเศษเกี่ยวกับโปรแกรมเหล่านั้นเท่าที่ฉันรู้ดังนั้นใครบางคนสามารถทำซ้ำเค้าโครง # 2 กับโปรแกรมใด ๆ บันทึกไฟล์ json ถอดมันดูว่ามันสามารถเปิดตัวจากไฟล์ config ที่เข้าสู่ระบบแล้วเปลี่ยนชื่อโปรแกรม ก่อนที่จะส่งคำตอบ ...

คุณสามารถอัพโหลดส่วนหนึ่งในไฟล์ i3 ของคุณร่วมกับ json-layout ที่บันทึก / กู้คืนได้ไหม? ฉันมีปัญหาเดียวกัน .. แต่อย่าให้มันทำงาน คุณใช้จอภาพหลายจอในไฟล์ config / json ของคุณหรือไม่?

คำตอบ:


11

ฉันเชื่อว่าคุณกำลังมองหาคุณสมบัติการประหยัดเลย์เอาต์ใหม่ ที่เปิดตัว i3 v4.8 (2014-06-15) เอกสารที่เชื่อมโยงดูเหมือนจะละเอียดถี่ถ้วน

การอ้างอิงจากเอกสาร:

การบันทึก / เรียกคืนเลย์เอาต์ช่วยให้คุณโหลดไฟล์เลย์เอาต์ JSON เพื่อให้คุณสามารถมีเลย์เอาต์พื้นฐานเพื่อเริ่มทำงานหลังจากเปิดเครื่องคอมพิวเตอร์ของคุณ กรณีการใช้งานแบบไดนามิกยังคำนึงถึง: หากคุณบ่อยครั้ง (แต่ไม่เสมอไป!) ต้องการโครงร่างของเทอร์มินัลที่มีคำสั่ง ping / traceroute เพื่อวินิจฉัยปัญหาเครือข่ายคุณสามารถเปิดหน้าต่างเหล่านี้ในรูปแบบที่ถูกต้องโดยอัตโนมัติ

... และ บันทึกประจำรุ่น :

tl; dr: ส่งออก1เค้าโครงปัจจุบันของคุณเป็นไฟล์ JSON โหลดลงในเซสชัน i3 ใหม่รับหน้าต่างตัวยึดที่จะถูกแทนที่ด้วยแอปจริงเมื่อคุณเริ่มต้น


1. คุณอาจต้องใช้แพ็คเกจ perl-anyevent-i3และperl-json-xsเพื่อใช้i3-save-treeยูทิลิตีนี้


3
คุณสมบัติการจัดวางเป็นสิ่งที่ท้าทายอย่างมากในการใช้ แนวคิดของหน้าต่างตัวยึดตำแหน่งซึ่งแอพ "กลืน" หมายความว่าหากคุณต้องการแอพเดียวกันหลายครั้งเช่นlxterminalหรือurxvtสำหรับพื้นที่ทำงานเดียวคุณต้องแยกความแตกต่างโดยใช้--name somethingเมื่อคุณเรียกใช้งานใน. i3 / config ตัวอย่างในเอกสารใช้งานได้ แต่เมื่อฉันใช้การส่งออกจากหนึ่งในพื้นที่ทำงานของฉันฉันไม่สามารถใช้งานได้ คุณใช้คลาสสำหรับชื่อและอินสแตนซ์สำหรับสิ่งที่คุณใช้กับ --name ในกรณีนี้ฉันสามารถหวังให้เป็นเครื่องมือ gui อย่างจริงจังเท่านั้นเนื่องจากรูปแบบjsonมีวงเล็บจำนวนมากอยู่ในนั้น !!

1
ตอนนี้ฉันอัปเดตเป็น 4.8 แล้วและฉันก็ค่อนข้างพอใจกับคุณลักษณะใหม่นี้ ฉันมักจะมีปัญหาบางอย่างกับการเริ่มต้นสิ่งต่าง ๆ อย่างน่าเชื่อถือในการเข้าสู่ระบบจาก.i3/configรุ่นก่อนหน้า แต่เมื่อฉันเข้าสู่ระบบอย่างถูกต้องทุกอย่างทำงานได้ดี สิ่งที่ฉันทำคือการจัดเรียงเลย์เอาต์ไม่กี่และบันทึกไว้จากนั้นแก้ไขเฉพาะตัวแปรคลาสของไฟล์ json จากนั้นสิ่งที่ชอบi3-msg workspace 2\; append_layout mylayout.json\;แล้วi3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditควรคืนค่าเค้าโครงที่คุณต้องการก่อน // ขอบคุณสำหรับการปรับปรุงคำตอบของฉัน btw
เมียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.