2012-11-13 13 views
10

Sto provando a scrivere un piccolo plug-in per eliminare il file corrente e chiudere la vista attiva. Per qualche motivo self.view.file_name() restituisce sempre None.Testo sublime: come ottenere il nome file della vista corrente

Sono nuovo di Python e non ho idea del perché non funzioni in questo modo. Secondo lo API Reference nome_file() restituisce il nome del file della vista corrente.

import sublime, sublime_plugin, send2trash 

class DeleteCurrentFileCommand(sublime_plugin.TextCommand): 
    def run(self, edit):   
     f = self.view.file_name() 
     if (f is None): 
      return 

     send2trash.send2trash(f) 
     self.view.window().run_command('close') 

uscita di dir (self.view):

[ 'classe', 'delattr', 'dict', 'doc', 'formato ',' getattribute ',' hash ',' init ',' len ' 'modulo', 'nuova', 'ridurre', 'reduce_ex', 'repr', 'setattr', 'sizeof',' str', 'subclasshook', 'weakref', 'add_regions', 'begin_edit', 'buffer_id', 'classificare', 'command_history', 'em_width', 'encoding', 'end_edit', 'cancelli' , 'erase_regions', 'erase_status', 'extract_completions', 'extract_scope', 'file_name', 'find' , "find_all", "find_all_results", "find_by_selector", "fold", "folded_regions", "full_line", "get_regions", "get_status", "get_symbols", "has_non_empty_selection_region", "id", "indentation_level", " indented_region ',' insert ',' is_dirty ',' is_folded ',' is_loading ',' is_read_only ',' is_scratch ',' layout_extent ',' layout_to_text ',' line ',' line_endings ',' line_height ',' lines ' , "match_selector", "meta_info", "name", "replace", "retarget", "rowcol", "run_command", "scope_name", "score_selector", "sel", "set_encoding", "set_line_endings", " set_name ',' set_read_only ',' set_scratch ',' set_status ',' set_syntax_file ',' set_viewport_position ',' settings ',' show ',' show_at_center ',' size ',' split_by_newlines ',' substr ',' syntax_name ' , "text_point", "text_to_layout", "unfold", "viewport_extent", "viewport_position", "visible_region", "window", "word"]

+0

Eventuali messaggi di errore nella console? –

+0

No. Il controllo per '(f è None)' è sempre true e quindi ritorna prima che raggiunga 'send2trash()'. Senza verificare la chiamata 'send2trash()' fallisce. Quando eseguo 'view.file_name()' nella console restituisce il percorso corretto. – Felix

+0

qual è l'output di print dir (self.view)? –

risposta

5

Secondo il Plugins page of the unofficial documentation, Sublime Text normalizza i nomi dei comandi nel modo seguente:

  1. striscia fuori dal suffisso "Command"
  2. cammello separata carter frasi con sottolineatura

Così, DeleteCurrentFileCommand dovrebbe essere chiamato nel modo seguente: view.run_command("delete_current_file")

Con questo comando, sono riuscito a eseguire il plug-in esattamente come elencato sopra in Python console.

Tuttavia, se ho provato a eseguire view.run_command("DeleteCurrentFile"), la console visualizzerebbe una riga vuota. Ciò potrebbe aver portato all'idea che self.view.file_name() restituisse None.

+0

Oh uomo mi sento stupido ora. Ho provato a eseguire il comando sull'oggetto della finestra come questo 'window.run_command ('delete_current_file')' che è ovviamente sbagliato. Funziona quando chiamo 'view.run_command()'. Grazie! – Felix

+0

Prego! :) – Talvalin