NSTask를 통한 scala 스크립트 실행(프로그래밍 학습용 어플리케이션 제작)

7616 단어 Swift
새 프로그래밍 언어는 REPL이 있으며 스크립트 파일에서도 사용할 수 있습니다.쓰면서 공부해도 되니까 편하죠.
하지만 편집자와 함께 터미널을 왕복하는 것은 좀 번거롭다.

두 개의 창이 있으면 다양한 조작이 증가할 것이다.이를 위해 공간을 옮기는 데만 몇 초가 걸린다.
아이디를 쓰면 되지만 이쪽은 사이즈가 거의 다 커서'맥북 공부 좀 하자'는 용도가 과장될 수 있어요.더 쉽게 말하면'우측에 출력이 있고 왼쪽에 쓰여 있으며 키보드 단축키로 실행하면 충분하다'는 것이다.
그럼 NSTask로 쉽게 만들 수 있을 것 같은데.
그래서 실제로 했어요.

보안이나 오류를 고려하지 않으면 왼쪽 커맨드 + R에 40줄을 써서 실행할 수 있습니다.

방법


기본적으로 NSTask 를 이동하면 쓰기 작업이 그대로 출력됩니다.
ViewController.그리고 메뉴를 통해서 이걸 부르세요.
  run() 간단한 방법으로 (1) 텍스트를 저장하고, (2) 저장된 파일을 scala에 건네주고, (3) 작업이 끝난 후에 결과를 읽고, (4) 데이터를 변환하는 것이다.
import Cocoa

class ViewController: NSViewController {

    @IBOutlet var editor: NSTextView! {
        didSet {
            editor.automaticTextReplacementEnabled = false
        }
    }
    @IBOutlet var output: NSTextView!

    @IBAction func run(sender: NSMenuItem) {
        let task = NSTask()
        let output = NSPipe()
        let error = NSPipe()
        let name = "scEditor" + NSDate().timeIntervalSince1970.description

        if let path = NSTemporaryDirectory().stringByAppendingPathComponent(name).stringByAppendingPathExtension("scala") {
            editor.string?.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil)

            task.standardOutput = output
            task.standardError = error
            task.launchPath = "/usr/local/bin/scala"
            task.arguments = [path]
            task.launch()

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
                task.waitUntilExit()
                let result = output.toString() + error.toString()
                dispatch_async(dispatch_get_main_queue()) {
                    self.output.string = result
                }
            }
        } else {
            println("error")
        }
    }
}

extension NSPipe {
    func toString() -> String {
        let data = self.fileHandleForReading.availableData
        return NSString(data: data, encoding: NSUTF8StringEncoding) ?? ""
    }
}
키보드 단축키는 메뉴에서 설정할 수 있습니다.
모피에 압력 응답기를 주다.그냥 부르라고.

그런 다음 출력 연결로 이동할 수 있도록 두 텍스트 뷰를 적절하게 배치합니다.

좋은 웹페이지 즐겨찾기