2016-03-28 10 views
0

Ich möchte ein Bausystem erstellen, um Haskell-Dateien zu kompilieren; Beachten Sie, dass ich nicht die gängige Verknüpfung "STRG + B" ersetzen möchte, die die aktuelle Datei in einem ST-Fenster ausführt.sublime text 3 auf ubuntu: wie macht man ein haskell build system?

so nach this messages, ich diese Datei erstellt, die sich im Verzeichnis "/ opt/sublime_text":

import sublime, sublime_plugin 

class MakeHaskellCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     self.view.window().run_command('exec', {"working_dir":"${project_path:${folder}}",'cmd': ["ghc","$file"]}) 

dann, modifizierte ich den Benutzerschlüssel des Erhabenen-haskell Paket Bindung:

[ 
    { 
     "keys": ["f1"], 
     "context": [ 
      { "key": "haskell_source" }, 
      { "key": "scanned_source" } ], 
     "command": "MakeHaskellCommand" 
    } 
] 

aber nach einem Neustart des ST, passiert nichts, als ich FN + F1 getroffen.

können Sie mir helfen?

EDIT Dank für Ihre erste Nachricht! Es funktioniert, aber jetzt habe ich ein anderes Problem: Ich möchte alle Dateien im Verzeichnis löschen, mit Ausnahme der Quelldatei und der Binärdatei. Ich kann dieses Plugin starten:

import sublime 
import sublime_plugin 


class MakeHaskell2Command(sublime_plugin.WindowCommand): 
    def run(self): 
     variables = self.window.extract_variables() 
     args = sublime.expand_variables({ 
      "working_dir": "${project_path:${file_path}}", 
      "cmd": ["rm", "*.hi"], 
      "cmd": ["rm", "*.o"] 
     }, variables) 
     self.window.run_command('exec', args) 

aber nicht entfernen Sie die Dateien. Kannst du mir nochmal helfen?

Antwort

1

Nur ein paar Punkte:

  1. Sie erstellen Plugins in Unterordner von Paketen, z.B. Benutzerordner
  2. Die Befehlsnamen in der keymap sind mit der Endung Command von
  3. gestrippt snake_case Sie sollten eine WindowCommand anstelle eines TextCommand für Build-Systeme
  4. Sie sollten f1 nicht fn+f1
  5. Der Befehl exec drücken verwenden er quillt nicht auf die Variablen

Um Ihr Verhalten drücken Tools >>> New Plugin..., Paste zu erstellen und speichern:

import sublime 
import sublime_plugin 


class MakeHaskellCommand(sublime_plugin.WindowCommand): 
    def run(self): 
     variables = self.window.extract_variables() 
     args = sublime.expand_variables({ 
      "working_dir": "${project_path:${file_path}}", 
      "cmd": ["ghc", "$file"] 
     }, variables) 
     self.window.run_command('exec', args) 

Danach Ihre keymap öffnen und die Tastenkombination ein:

{ 
    "keys": ["f1"], 
    "command": "make_haskell", 
    "context": 
    [ 
     { "key": "selector", "operator": "equal", "operand": "source.haskell" } 
    ] 
}, 

Edit: Wenn Sie Bereinigung tun wollen danach die Shell rm Befehl verwenden, dann sollten Sie die shell_cmd statt cmd verwenden. (exec die shell_cmd annimmt einen String und cmd auf ein Array zu sein (why)) I leicht modifiziert, um das Plugin zu cleanup danach:

import sublime 
import sublime_plugin 


class MakeHaskellCommand(sublime_plugin.WindowCommand): 
    def run(self): 
     variables = self.window.extract_variables() 
     args = sublime.expand_variables({ 
      "working_dir": "$file_path", 
      "shell_cmd": "ghc $file && rm $file_base_name.o $file_base_name.hi" 
     }, variables) 
     self.window.run_command('exec', args)