เหตุใด gedit จึงเปิดอินสแตนซ์ใหม่แบบสุ่มเมื่อเปิดไฟล์จากหอยโข่ง


32

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

ฉันได้มอบหมาย.phpให้เปิดไฟล์ทั้งหมดด้วย gedit ทุกครั้งที่ฉันคลิกสองครั้งที่ nautilus ตอนนี้พฤติกรรมแปลก

  1. ฉันไม่ได้ใช้ gedit
  2. ฉันดับเบิลคลิกไฟล์ที่จะเปิด
  3. หน้าต่าง gedit จะเปิดขึ้นและไฟล์จะโหลด
  4. ฉันดับเบิลคลิกไฟล์อื่นที่จะเปิด

ตอนนี้มี 2 ผลลัพธ์ที่เป็นไปได้:

5A) ไฟล์จะเปิดขึ้นในหน้าต่าง gedit เดียวกันในแท็บใหม่

5B) ไฟล์จะเปิดขึ้นในหน้าต่าง gedit ใหม่ส่งผลให้ 2 gedits ทำงาน

ไม่ว่าจะเป็น A หรือ B ดูเหมือนว่าจะสุ่มโดยสิ้นเชิงและจะดำเนินต่อไปอย่างไม่สิ้นสุด นั่นหมายความว่าฉันคลิกสองครั้งที่ไฟล์ 100 ไฟล์และฉันอาจท้ายด้วย 60 gedits บางอันจะมี 1 แท็บบางแท็บจะมี 2 แท็บบางอันจะมี 3 แท็บ ...

นี่เป็นสิ่งที่น่ารำคาญอย่างยิ่งและการแก้ไขในครั้งนี้จะได้รับการชื่นชมอย่างมาก ใครเคยพยายามแก้ไขปัญหานี้หรือไม่

สิ่งนี้เกิดขึ้นใน Ubuntu 10.04, 10.10 และ 11.10 อูบุนตูทุกรุ่นที่ฉันเคยทดสอบ

คำตอบ:


39

ทำไม...

gedit มีอัลกอริทึมที่น่าสนใจพอสมควรในการพิจารณาว่าจะเปิดอินสแตนซ์ใหม่หรือเปิดในแท็บในอินสแตนซ์ที่มีอยู่

ตั้งอยู่ในไฟล์ต้นฉบับgedit-app.cในฟังก์ชันstatic boolean is_in_viewportอัลกอริทึมจะทดสอบว่าอินสแตนซ์ gedit ปัจจุบันคืออะไร

  1. ในหมายเลขหน้าจอและชื่อที่แสดงเดียวกัน
  2. ในพื้นที่ทำงานเดียวกัน
  3. มากกว่า 25% ของขอบของพอร์ตมุมมอง

หากทั้งหมดเป็นจริงแล้ว gedit จะเปิดขึ้นในอินสแตนซ์เดียวกันในแท็บใหม่มิฉะนั้นจะเปิดขึ้นในหน้าต่างใหม่

โดยสรุป - วิธีที่เป็นจริงเพียงวิธีเดียวในการเปลี่ยนพฤติกรรมคือเปลี่ยนอัลกอริทึม ...

วิธีการ ...

ต่อไปนี้เป็นวิธีที่รวดเร็วเพื่อให้ได้วิธีการเปิด gedit ที่สอดคล้องกัน ... มันจะเปิดอินสแตนซ์ใหม่เสมอ

ติดตั้งเครื่องมือพัฒนาพื้นฐาน

sudo apt-get install devscripts build-essential fakeroot 

รับแหล่งที่มา

cd ~/Downloads
mkdir build
cd build
apt-get source gedit
cd gedit-3.2*

ทำการเปลี่ยนแปลง

เปิด gedit-app.c

gedit gedit/gedit-app.c

ป้อนคำอธิบายรูปภาพที่นี่

เพิ่มreturn FALSE;ตามที่แสดงและบันทึก

สิ่งนี้คือการออกจากรูทีนเสมอว่า"ฉันไม่ได้ทำงานในวิวพอร์ตและเปิดอินสแตนซ์ใหม่เสมอ"

หากคุณใช้return TRUE;สิ่งนี้จะเปิดในอินสแตนซ์ของ gedit ที่มีอยู่เสมอในแท็บใหม่ ...

ตั้งชื่อแพ็คเกจที่ไม่ซ้ำ

ตกลงเราต้องตั้งชื่อเฉพาะให้กับแพ็คเกจเพื่อป้องกันการอัปเดตที่เก็บไม่ให้เขียนทับแพ็คเกจที่คุณเปลี่ยนแปลง

gedit debian/changelog

ตอนนี้ผนวก+yournameกับรุ่นบรรทัดบนสุดและบันทึกไฟล์เช่น

หมายเหตุ - เพื่อให้แน่ใจอย่างแน่นอน - หลังจากติดตั้งแพคเกจที่แก้ไขด้านล่างล็อคเวอร์ชันตามคำถามที่เชื่อมโยงด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

สร้างแพ็คเกจ

sudo apt-get build-dep gedit
debuild -i -us -uc -b

ไปดื่มกาแฟ ...

cd ..
sudo dpkg -i gedit*.deb

คำถามที่เชื่อมโยง:

  1. จะป้องกันการอัพเดทแพ็คเกจเฉพาะได้อย่างไร?

1
นี่ไงฉันป่วย! ขอบคุณมากหวังว่านี้จะทำงาน ...
ริชาร์ดโรดริเก

... ทำอย่างแน่นอนในระหว่างการทดสอบของฉัน ... NB - ฉันใช้คำตอบอื่น ๆ สังเกตว่าถ้าคุณลาก gedit เพื่อทับขอบอินสแตนซ์ใหม่จะเปิดขึ้น แต่ถ้าคุณมี gedit ภายในเดสก์ท็อปอินสแตนซ์ใหม่จะเปิดขึ้น แท็บ ด้วยการรวบรวมข้างต้น - มันจะเปิดในอินสแตนซ์หรือแท็บใหม่ขึ้นอยู่กับการคอมไพล์ด้วย "return FALSE" หรือ "return TRUE"
fossfreedom

ฉันยืนยันการแก้ปัญหานี้อย่างเป็นทางการแล้ว!
Richard Rodriguez

3
ศักดิ์สิทธิ์ sh * t @fossfreedom ฉันคำนับคุณครับคุณได้ทำในเวลานี้คุณภาพและการแก้ปัญหาของคำตอบนี้คือ imba ถ้าฉันสามารถฉันจะใช้จ่ายตลอดทั้งวันกดปุ่มโหวตขึ้น! Gj
Bruno Pereira

2
ดูเหมือนว่ามันจะเป็นการดีกว่าที่จะทำการร้องขอ pull เพื่อให้มีตัวแปร config และทำง่าย ๆ (โค้ดหลอก) "ถ้า $ config-variable แล้วส่งคืน FALSE" วิธีที่เสนอจะล็อคคุณจากการอัปเดตอย่างไม่มีกำหนด
pbhj

13

ฉันต้องการเปิดไฟล์ทั้งหมดในหน้าต่าง gedit เดียวเท่านั้น ฉันไม่พบข้อมูลนี้จากที่อื่น แต่ด้วยการเปลี่ยนแปลงต่อไปนี้ฉันจัดการเพื่อเปิดไฟล์ข้อความทั้งหมดในหน้าต่างเดียวเป็นแท็บใหม่ไม่มีวิธีที่ฉันเปิดพวกเขา (ผ่านตัวเรียกใช้งานผ่านทาง nautilus ผ่าน Gnome DO)

  1. รับหมายเลขที่แสดง: พิมพ์echo $DISPLAYในบรรทัดคำสั่ง เช่นคุณได้รับ:0เป็นหมายเลขที่แสดง

  2. เปิด/usr/share/applications/gedit.desktopเป็น superuser ด้วยโปรแกรมแก้ไขข้อความ

  3. เปลี่ยนสายบอกว่า:

    Exec=gedit %U
    

    ไปยัง

    Exec=gedit --display=:0 %U
    

    :0หมายเลขแสดงผลของคุณอยู่ที่ไหน


2
ดีกว่าการรวบรวม gedit ใหม่และทำแพ็คเกจแปลก ๆ ขอบคุณ!
rcrogers

1
การรันด้วยตัวเลือกนี้จากบรรทัดคำสั่งจะไม่ป้องกันการgeditเปิดอินสแตนซ์ใหม่ (หน้าต่าง) อย่างน้อยในเวอร์ชันปัจจุบัน 3.18
alfC

ใช้ได้กับฉันในเวอร์ชัน 3.28.1 ทั้งจากบรรทัดคำสั่งและจาก gui ต้องเริ่มต้นใหม่แม้ว่าจะใช้
เวลา

2

นี่ไม่ได้เกิดขึ้นแบบสุ่ม

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

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

หรือเป็นไปได้ที่จะทำให้เปิดทุกอย่างในอินสแตนซ์ใหม่โดยใช้คำสั่งทางลัดใน Open With .. gedit --new-window

ดังนั้นคุณสามารถลองเปิดคุณสมบัติ php ด้วยการรีเซ็ตและเปิดช่องใหม่ด้วย Gedit

ใช้gedit --help-allull ดูตัวเลือกอื่นของการเปิดด้วย gedit

และคุณยังสามารถลองลบ gedit ด้วยไฟล์การกำหนดค่าทั้งหมดและติดตั้งได้โดยใช้ sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

UPDATE: ฉันสามารถสร้างใหม่ได้ - เมื่อย้ายหน้าต่างออกไปนอกจอเล็กน้อยจากนั้นเปิดไฟล์บางไฟล์ขึ้นในหน้าต่างใหม่ อย่างใดก็คิดว่ามันอยู่ในจอแสดงผลอื่น


ใช่มันเกิดขึ้นแบบสุ่ม นั่นคือประเด็นทั้งหมด การติดตั้งใช้งานไม่แน่นหนา ตัวอย่างเช่นฉันสูญเสียที่ฉันทำ แต่ตอนนี้ gedit ได้ตัดสินใจที่จะเปลี่ยนเป็นโหมดหน้าต่างใหม่เสมอหลังจากทำงานตามปกติก่อนหน้านี้ในวันนี้ ...
spinkus

1

สิ่งนี้เริ่มเกิดขึ้นกับฉัน ฉันไม่พบไฟล์ conf ที่เกี่ยวข้องและลองล้าง + ล้าง ในที่สุดก็พบว่ามันคืออะไร หน้าต่าง Gedit เปิดขึ้นเพื่อให้ดูเหมือนว่าขยายใหญ่สุด แต่ก็ไม่ใช่ ฉันกดปุ่มขยายใหญ่สุดบนหน้าต่างและสิ่งนี้แก้ไขปัญหาได้! โปรดทราบว่าหน้าต่างไม่ได้เปลี่ยนขนาดเพียงมุมไปจากกลมเป็นสี่เหลี่ยม ดูเหมือนว่าสิ่งนี้จะต้องเป็นข้อบกพร่องในอัลกอริทึม@fossfreedom ตามที่อธิบายไว้ข้างต้น

หมายเหตุ: เมื่อคุณปิดหน้าต่างการขยาย / ย่อจะต้องเก็บไว้ในการกำหนดค่าผู้ใช้บางแห่ง สถานะนี้มีการล้าง + ล้างและมันไม่ได้อยู่ใน Gedit ต่อผู้ใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.