4TGL4RKF224WKKGJO5RLL2XOZRKE3F6OKZRFEKM6UJWORSBP2ZSAC POQV6EZEPJLYHUC2HN3BYTRPR7V5V2ILWXU56SNMTA6ETE74QNTAC OMZXJL6QA6INENIEAARSWYFHOPMLTP4WRCVI646GQVJVWCH3LENQC ZCRW57C5MSBXYGUMGQTZNHGHO4HGHFBICW53X5I2IMGP3H2CKWRQC GGYFPXND4VBCROZZXTKAP7Y4JOP2OOYQAFVLMUE7SLFM225EUSIAC 2N67RQZCVGL6GYJJLM2US4YVCEIUK25AHCLD66C7HR4PPTNUOCWAC FNNW5IEAXQ43WKB6QSQB7DFLG3Y3T5FYPXIUX7KQ2URR2GU3QLTAC RE4EKNSLYGCITZZEOPIRJAWTKIONGP7IY6S77BQO7JQL2CK27RZAC FRFFQV7VNYKGCA7ZAOSRPC2HHYTAIZ6AGGR7A5QEV6QPAQGFDYGAC ISO7J5ZH5UB7NFZKTKKJQHQHCP4DWQ3F7SM2NDMVYJAGGIKDLX4QC QXUEMZ3B2FUHFUC7ZZHJMH5FVWLEMEYXUMFA6JNXTJKIVZNMRIOAC DLDMHQY6F53N2YXNDBQY77GAU2I4N2OWC3DL6L36T2SSAVW6YSXAC 6CR2EFUN7JXFHCBTNX3WWOOP4WFOCFO6KSPEBN6V6J5HFZO2LHNQC B43WNBLFFR2UQIH3C6KIZAQTAEQOQM3J3IYLGQMVGJHYOME73OKQC A7IL6I3VCB3F3QMYQFPXBL33DN5XDGGQPZIBZRHYSQBSIUBBFQJQC Q35OTML226J2HZLHOCPV5OY6ZUM2XU4RZBE5E3GDWVHVFASHFEJAC Q7FXTHVUPVAFMNY277C3NFJO3VXLZU5G6C6UYSD5QPURHSG3A7OQC OPFG6CZ26PPTGTH7ULLRQGZGR3YEIEJOV5W2E3WN7PFRZS62CVLQC 37OJKSWJFDRHNWQW6P7HSZX6OWZWVNCJ2IFT42O5TANQF7VOVX6AC 5AUENX2YJVFNKZUSPEPDNLLL7TKZS2WTFC6CABWSZK2EC4MNCRQAC /*** Dracon - An IntelliJ-Pijul integration.* Copyright 2021 JonathanxD <jhrldev@gmail.com>** Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/package com.github.jonathanxd.dracon.utilimport java.util.concurrent.ThreadFactoryimport java.util.concurrent.atomic.AtomicIntegerclass NamedThreadFactory(val name: String) : ThreadFactory {private val group: ThreadGroupprivate val threadNumber = AtomicInteger(1)private val namePostfix: Stringoverride fun newThread(r: Runnable): Thread {val t = Thread(group, r,this.name + this.namePostfix + threadNumber.getAndIncrement(),0)if (t.isDaemon) t.isDaemon = falseif (t.priority != Thread.NORM_PRIORITY) t.priority = Thread.NORM_PRIORITYreturn t}companion object {private val poolNumber = AtomicInteger(1)}init {val s = System.getSecurityManager()group = if (s != null) s.threadGroup else Thread.currentThread().threadGroupnamePostfix = "-namedPool-" +poolNumber.getAndIncrement() +"-thread-"}}
Files.walkFileTree(path, object : SimpleFileVisitor<Path>() {override fun preVisitDirectory(dir: Path, attrs: BasicFileAttributes): FileVisitResult {return if (dir != path) FileVisitResult.CONTINUEelse FileVisitResult.SKIP_SUBTREE}
if (Files.exists(path)) {Files.walkFileTree(path, object : SimpleFileVisitor<Path>() {override fun preVisitDirectory(dir: Path, attrs: BasicFileAttributes): FileVisitResult {return if (dir != path) FileVisitResult.CONTINUEelse FileVisitResult.SKIP_SUBTREE}
override fun visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult {Files.delete(file)return FileVisitResult.CONTINUE}})
override fun visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult {Files.delete(file)return FileVisitResult.CONTINUE}})}
it.connectAndRetrieveContent()
if (!it.connectAndRetrieveContent()) {Notifications.Bus.notify(Notification(PUSH_GROUP,DraconBundle.message("editor-server.timeout.title"),DraconBundle.message("editor-server.timeout.text"),NotificationType.ERROR,),project)}
if (this.rootPath.endsWith("/")) this.rootPath + this.pathelse this.rootPath + "/" + this.path
when {this.rootPath == "/" -> this.paththis.rootPath.endsWith("/") -> this.rootPath + this.paththis.rootPath.isEmpty() -> this.pathelse -> this.rootPath + "/" + this.path}
val process = ProcessBuilder().command(listOf(findPijul()) + args).directory(dir.toFile()).start()
val process = runBlocking {withContext(pijulProcessContext) {val process = ProcessBuilder().command(listOf(findPijul()) + args).directory(dir.toFile()).start()process}}
val process = ProcessBuilder().command(listOf(findPijul()) + args).directory(dir.toFile()).start()
val process = runBlocking {withContext(pijulProcessContext) {val process = ProcessBuilder().command(listOf(findPijul()) + args).directory(dir.toFile()).start()
return this.cache.cache(key) {val process = ProcessBuilder().command(listOf(findPijul()) + args).directory(dir.toFile()).start()
return runBlocking {withContext(pijulProcessContext) {cache.cache(key) {val process = ProcessBuilder().command(listOf(findPijul()) + args).directory(dir.toFile()).start()
val input = String(process.inputStream.readAllBytes(), Charsets.UTF_8)val error = String(process.errorStream.readAllBytes(), Charsets.UTF_8)
val input = String(process.inputStream.readAllBytes(), Charsets.UTF_8)val error = String(process.errorStream.readAllBytes(), Charsets.UTF_8)
input.split("\n").forEach {draconConsoleWriter(project).logCommand("pijul", args, it)}
input.split("\n").forEach {draconConsoleWriter(project).logCommand("pijul", args, it)}
error.split("\n").forEach {draconConsoleWriter(project).logCommandError("pijul", args, it)}
error.split("\n").forEach {draconConsoleWriter(project).logCommandError("pijul", args, it)}val exit = process.waitFor()if (exit == 0) {draconConsoleWriter(project).logCommand("pijul", args, "<Exit status> $exit")} else {draconConsoleWriter(project).logCommandError("pijul", args, "<Exit status> $exit")}
val exit = process.waitFor()if (exit == 0) {draconConsoleWriter(project).logCommand("pijul", args, "<Exit status> $exit")} else {draconConsoleWriter(project).logCommandError("pijul", args, "<Exit status> $exit")
PijulExecution(input,error,exit)}
val process = ProcessBuilder().apply {when (copieMode) {CopieMode.FROM -> environment()["COPIE_FROM"] = copiePath.toAbsolutePath().toString()CopieMode.TO -> environment()["COPIE_TO"] = copiePath.toAbsolutePath().toString()}
val process = runBlocking {withContext(pijulProcessContext) {val process = ProcessBuilder().apply {when (copieMode) {CopieMode.FROM -> environment()["COPIE_FROM"] = copiePath.toAbsolutePath().toString()CopieMode.TO -> environment()["COPIE_TO"] = copiePath.toAbsolutePath().toString()}
val process = ProcessBuilder().apply {environment()["EDITOR_SERVER_PORT"] = freePort.toString()environment()["VISUAL"] = editorServerPath()environment()["EDITOR"] = editorServerPath()
val process = runBlocking {withContext(pijulProcessContext) {val process = ProcessBuilder().apply {environment()["EDITOR_SERVER_PORT"] = freePort.toString()environment()["VISUAL"] = editorServerPath()environment()["EDITOR"] = editorServerPath()}.command(listOf(findPijul()) + args).directory(dir.toFile()).start()process
val process = ProcessBuilder().apply {environment()["EDITOR_SERVER_PORT"] = freePort.toString()environment()["VISUAL"] = editorServerPath()environment()["EDITOR"] = editorServerPath()
val process = runBlocking {withContext(pijulProcessContext) {val cmd = listOf(findPijul()) + argsval terminalCmd = terminalCommand("command.execute.text", cmd.joinToString(" "))val process = ProcessBuilder().apply {environment()["EDITOR_SERVER_PORT"] = freePort.toString()environment()["VISUAL"] = editorServerPath()environment()["EDITOR"] = editorServerPath()}.command(terminalCmd).directory(dir.toFile()).start()process
it.connectAndRetrieveContent()
if(!it.connectAndRetrieveContent()) {Notifications.Bus.notify(Notification(PUSH_GROUP,DraconBundle.message("editor-server.timeout.title"),DraconBundle.message("editor-server.timeout.text"),NotificationType.ERROR,),project)}
it.connectAndRetrieveContent()
if (!it.connectAndRetrieveContent()) {Notifications.Bus.notify(Notification(EXPERT_MODE_GROUP,DraconBundle.message("editor-server.timeout.title"),DraconBundle.message("editor-server.timeout.text"),NotificationType.ERROR,),project)}
setPlugins(*properties("platformPlugins").split(',').map(String::trim).filter(String::isNotEmpty).toTypedArray())setPlugins("org.toml.lang:0.2.144.3766-211")
setPlugins(*properties("platformPlugins").split(',').map(String::trim).filter(String::isNotEmpty).toTypedArray(),"org.toml.lang:0.2.144.3766-211","terminal")