Хотя большинство видимых пользователю частей Gnome Shell написаны на JavaScript, они часто являются просто привязками для лежащих в основе библиотек C. Если вы работаете с Windows, мониторами и экранами, вам нужно обратиться к документации по Mutter и, возможно, к документации по Shell:
У объекта global
есть свойство, называемое screen
(т. Е. global.screen
), которое, без сомнения, MetaScreen
, которое имеет функцию get_n_monitors()
, а также get_primary_monitor()
, get_current_monitor()
и другие. MetaWindow
, с другой стороны, содержит функцию с именем get_monitor()
, которая возвращает целое число. Я понял, что на мониторы ссылается целое число, которое передается различным функциям MetaScreen
и MetaWindow
, поскольку в документации Mutter, похоже, нет объекта для этого.
Большая часть связанного JavaScript для того, что вы хотите сделать, находится в layout.js , в котором, вероятно, есть лучшие примеры того, как Mutter используется в Gnome Shell, чем я могу вам дать. Он также включает класс Monitor
, который, по-видимому, является просто оболочкой JS для индекса монитора. Этот класс используется здесь в классе LayoutManager
(который является определением экземпляра Main.layoutManager
).
Примечание о документации
Первоначально обоснование отсутствия «правильной» документации оболочки gnome заключалось в том, что API (внутренний JavaScript) был довольно нестабильным. Дело в том, что у вас нет стабильного API, но вы читаете исходный текст на том же языке, на котором собираетесь его написать. В некотором смысле это имеет смысл, учитывая, что вы можете изменить prototype
живых объекты и обезьяна-патч по прихоти
API много успокоился, но пока никто не подошел, чтобы написать скрипт для его автоматического документирования. Мой лучший совет - сделать закладки на документацию Mutter, Shell и St и использовать поиск Github или GitLab, чтобы упростить задачу.
Тем не менее, есть документация для API Gnome, а также некоторые из встроенных модулей, которые стоит того: