Tôi có thể áp dụng một chủ đề GTK3 khác từ chủ đề chính cho một ứng dụng riêng lẻ không?


46

Ví dụ: tôi có thể giữ Ambiance làm chủ đề chính nhưng gán chủ đề cơ bản cho ứng dụng của tiểu học không?


8
Câu trả lời hiện tại về Gtk2, tôi đang hỏi về Gtk3.
neonboy

Tôi chỉnh sửa câu hỏi để phản ánh tốt hơn những gì bạn tìm kiếm. Xin lỗi, nhưng câu trả lời ngắn từ nghiên cứu của tôi là không , bạn không thể bỏ ra một số nỗ lực để tạo ra một chủ đề "lai" mới như @Kush giải thích :( Nó không đơn giản như GTK2 nữa.
ish

Câu trả lời:


32

Bạn có thể sử dụng biến môi trường GTK GTK_THEME=elementaryđể khởi chạy một ứng dụng có chủ đề cơ bản. Ví dụ: chạy GTK_THEME=elementary pantheon-filessẽ khởi chạy ứng dụng Tệp cơ bản bằng chủ đề GTK cơ bản.

Để áp dụng điều này mỗi khi bạn khởi chạy một ứng dụng cụ thể, tùy chọn tốt nhất của bạn có khả năng tạo tệp .desktop tùy chỉnh (trình khởi chạy).

Tạo một tệp .desktop tùy chỉnh

  1. Mở trình duyệt tệp của bạn
  2. Hướng đến /usr/share/applications/
  3. Sao chép trình khởi chạy (tô sáng và Ctrl + C) cho ứng dụng bạn muốn khởi chạy với chủ đề cơ bản
  4. Điều hướng đến ~/.local/share/applications/và dán trình khởi chạy (Ctrl + V)
  5. Nhấp chuột phải và mở trình khởi chạy với trình soạn thảo văn bản
  6. Sửa đổi dòng bắt đầu bằng Exec=để bao gồm Exec=env GTK_THEME=elementaryvà sau đó là nội dung hiện có trước đó của dòng. (Vì vậy, Exec=pantheon-filessẽ trở thành Exec=env GTK_THEME=elementary pantheon-files)
  7. lưu và đóng tập tin

Lần tới khi bạn khởi chạy ứng dụng từ Unity (hoặc trình khởi chạy ứng dụng bạn chọn), nó sẽ sử dụng chủ đề cơ bản.

Phần thưởng: làm cho nó hoạt động khi sử dụng dòng lệnh

Bạn cũng có thể muốn ứng dụng khởi chạy với chủ đề cơ bản khi khởi chạy nó từ dòng lệnh. Làm như vậy:

  1. Mở ứng dụng Terminal của bạn
  2. Loại alias pantheon-files="GTK_THEME=elementary pantheon-files"(thay thế pantheon-filesbằng ứng dụng mong muốn)
  3. nhấn Enter

Hãy cẩn thận:

  1. Điều này sẽ không thay đổi chủ đề quản lý cửa sổ của bạn thành chủ đề cơ bản.
  2. Điều này (theo thiết kế) sẽ chỉ áp dụng cho tài khoản của bạn, không phải root hoặc bất kỳ ai khác trên máy.
  3. Tên chủ đề là cAsE-sEnsItiVe và phải được khớp với tên thư mục chủ đề.

Nguồn:

  1. Tôi là người đóng góp cơ bản;)
  2. Hướng dẫn tham khảo GTK + 3: Chạy các ứng dụng GTK +
  3. Đặt biến trong tệp .desktop

Trả lời tốt đẹp nhưng tôi không thể làm điều này để làm việc cho bất kỳ chủ đề. Bạn có thể đưa ra một ví dụ bằng cách sử dụng thiết bị đầu cuối, find /usr/share/themes -type d -name 'gtk-3.0' | awk -F'/' '{print $5}'geditcho mục đích trình diễn? Ví dụ GTK_THEME="HighContrast" gedithoặc env GTK_THEME="HighContrast" gedithoặc GTK_THEME=Adwaita:dark gedit... không có gì.
Redsandro

Tôi chỉ thay đổi nó /usr/share/applications/<appname>.desktopvà nó làm việc cho tôi.
vẽ Chapin

Bất kỳ cách nào để làm điều này từ mã bên trong ứng dụng?
Anony-Mousse

1
Đáng lưu ý rằng tên chủ đề là trường hợp nhạy cảm.
Cedric Reichenbach

Điều này hoạt động cho một số ứng dụng nhưng không phải cho tất cả.

10

Câu hỏi vẫn còn hiệu lực và tôi tìm thấy một cách:

  • tạo bất kỳ thư mục path/to/MY_FOLDER
  • tạo một /share/themes/thư mục bên trong nó (đó là path/to/MY_FOLDER/share/themes).
  • đặt bất kỳ chủ đề GTK3 nào bên trong cái sau
  • đổi tên chủ đề thành tên của CHỦ ĐỀ HOẠT ĐỘNG HIỆN TẠI.

    Cuối cùng, lệnh này sẽ làm cho một ứng dụng sử dụng chủ đề được đổi tên thay vì chủ đề hiện đang hoạt động:

GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATON

(Đường dẫn sau GTK_DATA_PREFIX=phải là ( và chỉ có thế ) đến thư mục chứa /share/themes/RENAMED_THEME . Đó là lý do tại sao KHÔNG path/to/MY_FOLDER/share/themes/RENAMED_THEME , nhưng chỉ path/to/MY_FOLDER.)

Để có cái đó bên trong launcher, hãy thay thế cho phù hợp:

Exec=sh -c 'GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATION'

1
Bây giờ điều này thực sự hoạt động ngay cả với Eclipse, không giống như các câu trả lời khác mà tôi đã thử.
Ruslan

2
tập tin / thư mục chính xác nào chúng ta chỉ đến sử dụng GTK_DATA_PREFIX?
runDOSrun

1
Điều này khá khó hiểu, nhưng tôi đã tìm ra nó và chỉnh sửa câu trả lời.

Một cách khác là đưa chủ đề được đổi tên dành riêng cho ứng dụng vào ~/.themes(hoạt động hiện tại phải có /usr/share/themes) và sau đó sử dụng một số đường dẫn GTK_DATA_PREFIX=path/to/nowhere để khởi chạy ứng dụng đó, sẽ đặt lại chủ đề ứng dụng về chủ đề hiện tại, chỉ có nó sẽ nhìn trước ~/.themesvà mất người có cùng tên ở đó.

1
@runDOSrun - đường dẫn sau GTK_DATA_PREFIX=phải là ( và chỉ có thế ) đến thư mục chứa /share/themes/RENAMED_THEME . Đó là lý do tại sao KHÔNG FOLDER/share/themes/RENAMED_THEME , nhưng chỉ FOLDER.

8

Chắc chắn là có thể, tôi không có nhiều kinh nghiệm về chủ đề, nhưng khi bạn điều hướng đến /usr/share/themes/*Theme Name*/gtk-3.0/apps/thư mục, bạn sẽ tìm thấy .csscác tệp, được đặt tên với các ứng dụng mà chúng nhắm mục tiêu theo chủ đề, vì vậy, bạn có thể tạo Chủ đề dành riêng cho ứng dụng.

Lưu ý rằng cách bạn đề cập đến chủ đề ứng dụng của bạn có thể yêu cầu một số công việc phải thực hiện (như có cả Ambiance và Tiểu học hoạt động đồng thời, vì mọi chủ đề đều có tệp cơ sở trên đó tạo kiểu cụ thể cho ứng dụng, (một tệp gtkrctrong Gtk 2.0 trong khi, một tệp gtk.csstrong trường hợp Gtk3.0 ).

Và tệp chủ đề cơ sở này chứa các quy tắc kiểu dáng nhắm mục tiêu cụ thể đến chủ đề đã cho, do đó bạn không thể tạo Giao diện cơ bản giống như tệp chủ đề cơ sở của Ambiance mà không thực hiện một số thay đổi lớn và ngay cả khi bạn làm vậy, bạn sẽ mất Ambiance.

Ngoài ra, trong Gnome, có thể chỉ có một chủ đề được áp dụng tại một thời điểm, Ví dụ: nếu bạn đã sử dụng cửa sổ Giao diện trong Ubuntu 12.04, bạn có thể chọn bất kỳ chủ đề nào từ danh sách thả xuống, trong trường hợp bạn đã sử dụng gnome-tweak-tool, hơn bạn có thể đặt các chủ đề khác nhau, cho Gtk, khung cửa sổ và biểu tượng, tuy nhiên, nó không cho phép nhắm mục tiêu các ứng dụng cụ thể vào chủ đề, như tôi đã nói trước đó, bạn có thể đặt các chủ đề hoàn toàn khác nhau cho các ứng dụng khác nhau nếu bạn khéo léo làm việc với tệp chủ đề cơ sở, tính đến thời điểm hiện tại, không có ứng dụng bên thứ ba nào có thể tự làm được.

Một cách bạn có thể tự làm điều đó là, hãy để tệp chủ đề cơ sở ( gtk.css) chỉ có các quy tắc thiết yếu trung lập với bất kỳ chủ đề nào, tối hoặc sáng. Và có thiết kế chủ đề thực tế được viết trong các tệp dành riêng cho ứng dụng nằm trong thư mục được đề cập ở trên, tức là để tạo kiểu Nautilus, bạn có thể viết tất cả các thuộc tính bắt buộc trong nautilus.csstệp. Tương tự với mọi ứng dụng bạn muốn nhắm mục tiêu. Rõ ràng, làm như vậy đòi hỏi một số kinh nghiệm chủ đề Gtk phong nha.

Bạn có thể tham khảo điều này để tạo chủ đề của riêng bạn bằng cách sử dụng mẫu, Ngoài ra, có một tài liệu phù hợp về chủ đề Gtk +.


7
Tôi không muốn tạo một chủ đề mới, tôi muốn chỉ định một chủ đề hiện có.
neonboy

@neonboy: Như tôi đã nói rằng với GTK3, không đơn giản, một chủ đề được phân phối trên nhiều tệp và nếu phụ thuộc không được thỏa mãn, chủ đề bị hỏng là tất cả những gì bạn sẽ nhận được. Đó là lý do tại sao tôi đăng câu trả lời cho thấy giải pháp khả thi với GTK3 chứ không phải GTK2 (trong đó thực hiện việc này khá dễ dàng).
Kushal

5

Có, cách đơn giản là trỏ ứng dụng vào đường dẫn cần thiết nơi tệp RC của bạn sống, trong lệnh chạy ứng dụng của bạn:

GTK2_RC_FILES=/usr/share/themes/Redmond/gtk-2.0/gtkrc inkscape

Điều này vào ngày 12.04 cho inkscape (vẫn là Gnome2 btw) tạo ra điều này:

cửa sổ inkscape với chủ đề windows

Xem thêm thông tin về chủ đề Gtk2 đang chạy ở đây .


7
Câu hỏi là về Gtk3 chứ không phải Gtk2, cảm ơn.
neonboy

Bạn đã không xác định rằng trong câu hỏi ban đầu của bạn. Xin vui lòng không đối kháng các câu hỏi.
Martin Owens -doctormo-

5
Ban đầu nó là "Tôi có thể sử dụng các chủ đề GTK3 khác nhau cho các ứng dụng riêng lẻ không?" Tôi vẫn có chủ đề Gtk3 trong câu hỏi, sau đó foss tự do yêu cầu tôi nhận xét về câu trả lời không hợp lệ và chỉnh sửa câu hỏi nếu cần thiết, tôi không đối kháng với bất kỳ ai.
neonboy

1

Vâng, bạn có thể, thực sự tôi đã googled và nhận được một số câu trả lời:

  1. Tìm kiếm thực thi chính xác cho chương trình bạn muốn thay đổi chủ đề. Ví dụ: nếu bạn muốn nó cho ooffice thì hãy nhập which oofficevào terminal.
  2. Tìm thư mục bin nơi tất cả các ứng dụng đặt tệp thực thi nhị phân của chúng. Nhập echo $PATHvào thiết bị đầu cuối và bạn sẽ ge đường dẫn. Tôi khuyên bạn nên tạo một thư mục bin trong thư mục nhà của bạn bằng cách gõmkdir ~/bin
  3. Nhập gedit ~/.bashrcđể mở tập tin bash RC của bạn.
  4. Đi đến cuối tập tin này và thêm dòng này export PATH=~/bin:${PATH}

Bây giờ chúng tôi sẽ tạo một tập lệnh sẽ thực thi chương trình của bạn với chủ đề tùy chỉnh:

  1. Tạo tập tin tập lệnh của ứng dụng bằng cách gõ: gedit ~/bin/ooffice
  2. Nhập các dòng này trong tệp đã mở:

    #!/bin/bash
    env GTK2_RC_FILES=/usr/share/themes/SlicknessX/gtk-2.0/gtkrc /usr/bin/ooffice "$@"
    
  3. Thay đổi chế độ của tệp thành tệp thực thi bằng cách nhập : chmod +x ~/bin/ooffice.

Hy vọng điều này sẽ giúp, bạn chỉ cần nhớ một điều, định dạng của tập lệnh như dưới đây:

#!/bin/bash
env GTK2_RC_FILES=PATH_TO_GTKRC PATH_TO_EXECUTABLE "$@"

Các ứng dụng GTK2 chắc chắn có thể sử dụng GTK2_RC_FILES env. Biến đổi. Ngoài ra, những chủ đề bạn đang nói về biên dịch? Câu hỏi là về các chủ đề GTK trên toàn hệ thống có sẵn trong Ubuntu.
ish

1
Tôi tin rằng phương pháp bạn đã đề cập đến mục tiêu Gtk2.0 trong khi Ubuntu 12.04 sử dụng Gtk3.0 cho các chủ đề, vì vậy nếu có thể không hoạt động.
Kushal

6
Tôi xin lỗi, đó là một giải pháp cho Gtk2, câu hỏi là về Gtk3.
neonboy
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.