A razão pela qual eu não estou feliz com o código demo e tutoriais é que eles introduzem um monte de importações aleatórias e nunca explicam o que são ou como usá-las. Estou construindo minha própria resposta que outras pessoas podem adicionar, para que as pessoas possam realmente saber quais funções podem chamar, o que podem importar, etc.
Existe documentação gerada para o Gnome Shell , mas é um tanto incompleta - não consegui encontrar a maior parte do coisas que vi em vários tutoriais, exemplos e extensões publicadas.
A única documentação realmente confiável é a própria fonte do Gnome Shell. Simplesmente não há outra maneira atualizada ou completa de saber o que está disponível.
Estes dois pontos de partida são particularmente bons:
A fonte C mostra que existe um objeto importante chamado global
que não precisa ser importado, e fornece acesso a coisas como o gerenciador de janelas (incluindo atalhos de teclado), as informações da sessão, as telas disponíveis e outras coisas. Aqui está a fonte:
- A fonte do shell-global.c
- A parte da fonte onde as propriedades disponíveis são adicionadas
- A parte da fonte que mostra os tipos do subjacente objetos
Eu queria saber como usar o global.display
object , e por enquanto a melhor documentação é fornecida por Alan Knowles .
Outras coisas podem ser importadas através das ligações de introspecção do GObject, por exemplo:
- A biblioteca de interface do usuário de Clutter (
imports.gi.Clutter
) -
GLib (
imports.gi.GLib
) - O Shell Toolkit (
imports.gi.St
)
Em geral, você pode consultar a documentação de referência dos vários componentes do Gnome para encontrar outras importações.
Uma nota sobre o espelho: No entanto, há algumas peculiaridades sobre o uso dessas importações no visor - perdi muito tempo tentando testar as coisas na hora. Por exemplo:
const Clutter = imports.gi.Clutter;
... não funcionará, porque Clutter
já existe. Mas então:
const MyClutter = imports.gi.Clutter;
... também não funcionará; MyClutter
é indefinido e não pode ser usado. Você tem que fazer:
MyClutter = imports.gi.Clutter;
Claro que, neste caso, Clutter
já existe, então não é realmente necessário. Mas como não está documentado o que é e o que não está no namespace do espelho, se você tentar importar algo e tiver esses problemas, lembre-se.
Perguntas restantes:
- O que é
Mainloop
? Isso é importado emmain.js
e parece ter funções relacionadas a o loop principal do GLib. Existe documentação para isso? - O que é
imports.misc
? Parece ter algumas coisas realmente úteis, comoExtensionUtils
- o que é isso? - Como você usa o DBus? E a introspecção?