2012-11-13 22 views
10

Ich versuche, ein kleines Plugin zu schreiben, um die aktuelle Datei zu löschen und die aktive Ansicht zu schließen. Aus irgendeinem Grund gibt self.view.file_name() immer None zurück.Sublime text: Wie bekomme ich den Dateinamen der aktuellen Ansicht

Ich bin neu in Python und ich habe keine Ahnung, warum es so nicht funktioniert. Gemäß der API Reference Dateiname() gibt den Dateinamen der aktuellen Ansicht zurück.

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') 

Ausgabe von dir (self.view):

[ 'Klasse', 'delattr', 'dict', ' doc', "Format ' 'getAttribute', ' hash', 'init',' len ' 'Modul', 'neue', ' reduzieren', 'reduce_ex', 'repr', 'setattr', 'sizeof',' str‘, 'subclasshook', 'WeakRef', 'add_regions', 'begin_edit', 'buffer_id', 'Klassifizieren', 'command_history', 'em_width', 'encoding', 'end_edit', 'löschen' , 'erase_regions', 'erase_status', 'extract_completions', 'extract_scope', 'file_name', 'find' , 'find_all', 'find_all_results', 'find_by_selector', 'fold', 'gefaltete_regionen', 'full_line', 'get_regionen', 'get_status', 'get_symbols', 'has_non_empty_selection_region', 'id', 'indentation_level', ' eingerückter_Region ',' Einfügung ',' 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', 'ersetzen', '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 ',' einstellungen ',' show ',' show_at_center ',' size ',' split_by_newlines ',' substr ',' syntax_name ' , 'text_point', 'text_to_layout', 'Entfalten', 'viewport_extett', 'viewport_position', 'visible_region', 'window', 'word']

+0

Irgendwelche Fehler msgs in der Konsole? –

+0

Nein. Der Check für '(f ist None)' ist immer wahr und kehrt daher zurück, bevor 'send2trash() 'erreicht wird. Ohne zu überprüfen, schlägt der 'send2trash()' Aufruf fehl. Wenn ich 'view.file_name()' in der Konsole ausführen, wird der richtige Pfad zurückgegeben. – Felix

+0

Was ist die Ausgabe von print dir (self.view)? –

Antwort

5

Nach dem Plugins page of the unofficial documentation, normalisiert Sublime Text Befehlsnamen in der folgenden Art und Weise:

  1. Streifen aus der "Command" Suffix
  2. Separate Kamel Sätze mit Unterstrichen

So DeleteCurrentFileCommand sollte verrohrt sein auf folgende Weise aufgerufen: view.run_command("delete_current_file")

Mit diesem Befehl konnte ich Ihr Plugin genau wie oben in Python aufgeführt ausführen Konsole.

Wenn ich jedoch versucht, view.run_command("DeleteCurrentFile") auszuführen, würde die Konsole eine leere Zeile anzeigen. Dies könnte zu der Idee geführt haben, dass self.view.file_name() None zurückgibt.

+0

Oh Mann, ich fühle mich jetzt dumm. Ich habe versucht, den Befehl für das Window-Objekt wie diesen 'window.run_command ('delete_current_file') auszuführen, was offensichtlich falsch ist. Es funktioniert, wenn ich 'view.run_command()' aufrufe. Vielen Dank! – Felix

+0

Gern geschehen! :) – Talvalin

Verwandte Themen