Filtrando o conteúdo do buffer do Sublime Text 2 através de um programa externo

1

Eu estou tentando adicionar uncrustify para minha formatação de código C ++ no Sublime Editor 2.

Eu sei que existem algumas maneiras de executar o processo externo no SE2. Mas o principal problema é que não é possível atualizar o buffer (view) com o meu código, quando a formatação é feita.

Alguém pode esboçar um plugin que irá executar um processo externo no conteúdo do buffer atual e atualizá-lo?

    
por user14416 24.02.2013 / 13:08

1 resposta

2

O seguinte plugin de texto substitui todas as letras minúsculas no arquivo pelo seu equivalente em maiúsculas. A chamada bash -c foi uma solução alternativa para fornecer um exemplo útil para o caso (incomum) de um comando que age na entrada de argumentos grandes: geralmente eles lidam com arquivos ou padrão.

Para usar seu próprio comando, substitua as três primeiras entradas da lista no primeiro argumento Popen por seu próprio, o último é todo o conteúdo do buffer.

import sublime, sublime_plugin, subprocess

def insert_output(view, edit):
    r = sublime.Region(0, view.size())
    try:
        proc = subprocess.Popen( [ "bash", "-c", 'echo "$0" | tr [a-z] [A-Z]', view.substr(r) ], stdout=subprocess.PIPE )
        output = proc.communicate()[0]
        view.replace(edit, r, output)
    except:
        pass


class ReplaceWithOutputCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        e = self.view.begin_edit()
        insert_output(self.view, e)
        self.view.end_edit(e)

Para criar um item de menu, adicione uma entrada como a seguinte a Main.sublime-menu no pacote User :

{"command": "replace_with_output", "caption": "Replace with Output" }

Antes:

Depois:

    
por 24.02.2013 / 13:54