Tại sao gedit tiếp tục mở ngẫu nhiên các phiên bản mới khi mở tệp từ nautilus?


32

Ôi làm thế nào tôi yêu Ubuntu và tất cả các tính năng của nó, nhưng "lỗi" này đã khiến tôi tức giận quá lâu và cuối cùng tôi đã quyết định yêu cầu trợ giúp ở đây.

Tôi đã chỉ định tất cả .phpcác tệp được mở bằng gedit bất cứ khi nào tôi nhấp đúp vào chúng trong nautilus. Bây giờ, hành vi là lạ.

  1. Tôi không có gedit chạy
  2. Tôi bấm đúp vào một tập tin sẽ được mở
  3. Một cửa sổ gedit mở ra và tải tập tin
  4. Tôi nhấp đúp vào tệp khác sẽ được mở

Bây giờ, có 2 kết quả có thể xảy ra:

5A) Tệp mở trong cùng cửa sổ gedit trong tab mới

5B) Tệp mở trong cửa sổ gedit mới, dẫn đến 2 gedits đang chạy.

Cho dù A hoặc B xảy ra dường như là hoàn toàn ngẫu nhiên và tiếp tục vô tận. Điều đó có nghĩa là tôi nhấp đúp chuột vào 100 tệp và tôi có thể kết thúc với 60 gedits, một số trong đó sẽ có 1 tab, một số sẽ có 2 tab, một số sẽ có 3 tab ...

Điều này là vô cùng khó chịu và một sửa chữa cho điều này sẽ được đánh giá rất cao. Bất cứ ai đã từng cố gắng khắc phục vấn đề này?

Điều này đã xảy ra trong Ubuntu 10.04, 10.10 và 11.10. Tất cả các phiên bản Ubuntu tôi từng thử nghiệm.

Câu trả lời:


39

Tại sao...

gedit có một thuật toán khá thú vị để xác định xem nó mở một thể hiện mới hay nếu nó mở trong một tab trong một thể hiện hiện có.

Nằm trong tệp nguồn gedit-app.ctrong hàm static boolean is_in_viewport, thuật toán kiểm tra nếu phiên bản gedit hiện tại là

  1. trong cùng số màn hình và tên hiển thị
  2. trong cùng một không gian làm việc
  3. lớn hơn 25% các cạnh của cổng xem

Nếu tất cả đều đúng thì gedit sẽ mở trong cùng một thể hiện trong một tab mới nếu không nó sẽ mở trong một cửa sổ mới.

Tóm lại - cách thực tế duy nhất để thay đổi hành vi là thay đổi thuật toán ...

Làm sao...

Sau đây là một cách nhanh chóng để có được một cách mở gedit nhất quán ... nó sẽ luôn mở một phiên bản mới.

cài đặt các công cụ phát triển cơ bản

sudo apt-get install devscripts build-essential fakeroot 

lấy nguồn

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

thay đổi

Mở gedit-app.c

gedit gedit/gedit-app.c

nhập mô tả hình ảnh ở đây

thêm return FALSE;như hiển thị và lưu.

Điều này làm là luôn luôn thoát khỏi thói quen nói rằng "tôi không chạy trong chế độ xem và do đó luôn mở một phiên bản mới"

Nếu bạn sử dụng, return TRUE;nó sẽ luôn mở trong một phiên bản gedit hiện có trong một tab mới ...

đặt cho nó một tên gói duy nhất

OK, chúng tôi cần đặt cho gói một tên duy nhất để ngăn cập nhật kho lưu trữ ghi đè lên gói đã thay đổi của bạn

gedit debian/changelog

bây giờ nối +yournamevào phiên bản dòng trên cùng và lưu tệp tức là

Lưu ý - để hoàn toàn chắc chắn - sau khi cài đặt gói sửa đổi bên dưới, hãy khóa phiên bản theo câu hỏi được liên kết bên dưới.

nhập mô tả hình ảnh ở đây

xây dựng gói

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

Đi uống cà phê ...

cd ..
sudo dpkg -i gedit*.deb

Câu hỏi liên kết:

  1. Làm thế nào để ngăn chặn cập nhật một gói cụ thể?

1
Điều này, thưa ngài, là SICK! Cảm ơn rất nhiều, hy vọng điều này sẽ hoạt động ...
Richard Rodriguez

... chắc chắn đã làm trong quá trình thử nghiệm của tôi ... NB - Tôi đã sử dụng quan sát câu trả lời khác rằng nếu bạn kéo gedit để chồng lên các cạnh, một phiên bản mới được mở, nhưng nếu bạn có gedit trong máy tính để bàn, thì phiên bản mới được mở trong một tab. Với phần biên dịch ở trên - nó luôn mở trong một thể hiện hoặc tab mới tùy thuộc vào phần được biên dịch với "return FALSE" hoặc "return TRUE".
fossfreedom

Tôi chính thức xác nhận giải pháp này LÀM VIỆC!
Richard Rodriguez

3
Holy sh * t @fossfreedom, tôi xin chào ngài, bạn đã thực hiện lần này, chất lượng và giải pháp của câu trả lời này là imba. Nếu tôi có thể, tôi sẽ dành cả ngày để nhấn nút bỏ phiếu đó! Gj.
Bruno Pereira

2
Có vẻ như có thể tốt hơn để thực hiện một yêu cầu kéo để có một biến cấu hình và thực hiện một (mã giả) đơn giản "nếu $ config-biến sau đó trả về FALSE". Cách đề xuất khóa bạn ra khỏi bản cập nhật vô thời hạn.
pbhj

13

Tôi muốn có tất cả các tệp được mở chỉ trong một cửa sổ gedit. Tôi không tìm thấy thông tin này ở nơi nào khác, nhưng với những thay đổi sau đây, tôi đã quản lý để mở tất cả các tệp văn bản chỉ trong một cửa sổ dưới dạng các tab mới, không tìm hiểu cách tôi mở chúng (thông qua launcher, qua nautilus, qua Gnome DO).

  1. Lấy số hiển thị: gõ echo $DISPLAYvào dòng lệnh. ví dụ bạn nhận được :0như số hiển thị của bạn.

  2. Mở /usr/share/applications/gedit.desktopnhư siêu người dùng với một trình soạn thảo văn bản.

  3. Thay đổi dòng nói:

    Exec=gedit %U
    

    đến

    Exec=gedit --display=:0 %U
    

    :0số hiển thị của bạn ở đâu


2
Tốt hơn nhiều so với biên dịch lại gedit và thực hiện các gói hack kỳ lạ. Cảm ơn!
RCrogers

1
Chạy với tùy chọn này từ dòng lệnh không ngăn geditmở các phiên bản mới (windows). Ít nhất là trong phiên bản hiện tại 3.18.
alfC

hoạt động với tôi trong phiên bản 3.28.1 cả từ dòng lệnh và từ gui. cần khởi động lại mặc dù
efie

2

Điều này không xảy ra ngẫu nhiên

Theo mặc định, Gedit không được thực hiện để mở nhiều phiên bản, nhưng mỗi lần hiển thị. Nếu bạn mở trong màn hình không có thì Gedit sẽ mở các tệp trong Gedit witch tồn tại ngay trong màn hình đó từ phù thủy được mở tệp.

Vì vậy, bạn có thể tạo phiên bản đầu tiên của gedit trên Tất cả các không gian làm việc để nó hiển thị theo hoạt động của bạn. Hoặc làm việc trên từng không gian làm việc với từng dự án và mỗi dự án có Gedit `. Trong các phím tắt, bạn có thể tạo một phím tắt mới để chuyển đổi cửa sổ trên tất cả các không gian làm việc.

HOẶC có thể làm cho nó luôn mở trong trường hợp mới bằng cách sử dụng lệnh tắt trong Open With .. gedit --new-window

Vì vậy, bạn có thể thử mở thuộc tính php bằng thiết lập lại và đặt mở mới chỉ bằng Gedit

sử dụng gedit --help-allull xem tùy chọn khác mở bằng gedit.

Và bạn cũng có thể thử xóa gedit với tất cả các tệp cấu hình và cài đặt nó sạch bằng cách sử dụng sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

CẬP NHẬT: Tôi đã có thể sao chép- khi di chuyển cửa sổ ra khỏi màn hình một chút rồi mở một số tệp sẽ mở trong cửa sổ mới. Nó bằng cách nào đó nghĩ rằng nó trong một màn hình khác.


Vâng, nó xảy ra ngẫu nhiên. Đó là toàn bộ điểm. Việc thực hiện là lỗi / không mạnh mẽ. Chẳng hạn, tôi đã thua lỗ, nhưng giờ đây gedit đã quyết định ngẫu nhiên chuyển sang chế độ cửa sổ mới này sau khi hoạt động như bình thường trước đó hôm nay ...
spinkus

1

Điều này bắt đầu xảy ra với tôi. Tôi không thể tìm thấy bất kỳ tập tin conf có liên quan, và thậm chí đã thử thanh lọc + sạch. Cuối cùng cũng tìm thấy nó. Cửa sổ Gedit đang mở sao cho nó trông giống như được tối đa hóa nhưng không phải vậy. Tôi nhấn nút tối đa hóa trên cửa sổ và điều này đã khắc phục vấn đề! Lưu ý rằng cửa sổ không thay đổi kích thước, chỉ có các góc đi từ tròn sang vuông. Có vẻ như đây phải là một lỗi trong thuật toán @fossfreedom được mô tả ở trên.

Lưu ý: Khi bạn đóng cửa sổ, trạng thái tối đa hóa / thu nhỏ phải được lưu trữ trong một số cấu hình người dùng ở đâu đó. Trạng thái này tồn tại trong quá trình thanh lọc + sạch và cũng không có trong Gedit của mỗi người dùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.