Plugins
De todos os recursos de extensibilidade do Sublime Text, a sua API [1] de desenvolvimento de plugins é, de longe, o mais poderoso deles. São os plugins que fornecem boa parte das funcionalidades do Sublime Text, tanto na sua instalação original, quanto por meio de pacotes de terceiros.
Neste capítulo vamos mostrar uma rápida visão geral de como se pode criar este tipo de extensão de funcionalidade de forma relativamente simples. No entanto, trata-se de assunto um tanto extenso, que certamente mereceria um livro à parte. Portanto, não iremos nos aprofundar em detalhes aqui [2].
Nosso primeiro plugin
Os plugins do Sublime Text são codificados na linguagem de programação Python, conhecida por ser poderosa, intuitiva e fácil de aprender [2]. Com apenas alguns cliques é possível criar e colocar um clássico plugin Hello World para rodar:
Selecione o item de menu Tools | New Plugin…
Surgirá uma nova aba contendo o código-fonte do plugin de exemplo. Salve o arquivo (
Ctrl+S
) com o nome deexample.py
Abra uma nova aba de edição (
Ctrl+N
)Selecione o item de menu View | Show console
No campo de entrada de texto que aparecerá na parte inferior da janela, digite
view.run_command('example')
e aperteEnter
Pronto! A frase Hello, World! foi inserida no início do texto pelo plugin que acabamos de criar.
Explicando o que acabamos de fazer (figura 38):
Na primeira linha do código-fonte do plugin é realizada a importação dos módulos da Sublime API, que contém todas as funcionalidades que precisamos para manipular o Sublime Text.
Na segunda linha declaramos a classe Python que implementa nosso plugin (
ExampleCommand
). Ela é filha da classeTextCommand
, que conheceremos em breve.Na terceira linha implementamos o método
run()
. Este método é chamado toda vez que o comando é executado.Na quarta linha temos o corpo do método. Neste caso, estamos dizendo ao plugin que insira, no buffer de texto ativo (
edit
), o texto Hello, World! na posição 0 (primeira coluna da primeira linha).
Uma visão geral da Sublime API
Em resumo, a Sublime API é uma coleção de comandos e eventos que atuam sobre os componentes do editor.
As classes que representam os componentes estão definidas no módulo sublime
, enquanto que as classes responsáveis pela implementação de comandos e eventos estão no módulo sublime_plugin
.
Módulo sublime
Agrupa as representações dos componentes do Sublime Text, que são elementos das classes a seguir:
View
Representa uma view (aba) do Sublime Text, a qual contém um buffer de texto [3].
Region
Representa uma área do buffer de texto.
Selection
Armazena um conjunto contendo uma ou mais Regions.
Edit
Componente especial que serve para agrupar modificações realizadas em um buffer.
Window
Representa uma janela do Sublime Text.
Settings
Manipula arquivos de configuração.
Cada uma das classes citadas acima possui um conjunto de métodos que atuam sobre seu respectivo componente, a exemplo do método insert()
que vimos antes.
Módulo sublime_plugin
Na seção anterior, por exemplo, vimos que nosso plugin usa uma classe base chamada TextCommand
. Como podemos deduzir pelo nome, este tipo de classe serve para implementar comandos que manipulam o texto que está em uma view.
As classes base contidas no módulo sublime_plugin
representam os diferentes tipos de comandos que atuam sobre os comoponentes definidos no módulo sublime
. São elas:
TextCommand
Usamos TextCommands quando precisamos criar comandos que são instanciados uma vez para cada view e possuem uma referência para o objeto do tipo
View
correspondente. Normalmente os comandos desse tipo são utilizados para realizar manipulações e transformações no texto que está sendo editado.
WindowCommand
Os comandos desse tipo são utilizados quando precisamos manipular janelas. São instanciados para cada janela e possuem uma referência para o objeto
Window
correspondente.
ApplicationCommand
Não possui referência para nenhum view, buffer ou janela. Por isso, comandos desse tipo são menos utilizados que os comandos implementados pelas classes anteriores.
EventListener
As implementações de
EventListener
ficam “escutando” a view ativa para saber quando ocorrem eventos nela (ex.: ativação, fechamento, modificação etc.)
É fácil perceber que, misturando e combinando os comandos, event listeners e componentes que formam a API, é possível criar plugins que tornam o Sublime Text capaz de fazer praticamente qualquer coisa.