From 8304803f5987060b3defe1648191820051b7c04e Mon Sep 17 00:00:00 2001 From: Cat Stevens Date: Fri, 18 May 2018 12:08:24 -0400 Subject: [PATCH] elevate rewrite --- basis/elevate/elevate-docs.factor | 6 +++- basis/elevate/elevate.factor | 46 +++++++++++++++++++------------ 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/basis/elevate/elevate-docs.factor b/basis/elevate/elevate-docs.factor index ae9b664daa..494d376eb9 100644 --- a/basis/elevate/elevate-docs.factor +++ b/basis/elevate/elevate-docs.factor @@ -4,5 +4,9 @@ IN: elevate ABOUT: elevate ARTICLE: "elevate" "Cross-platform API for elevated permissions" - "Thanks to " { $url "https://github.com/barneygales/elevate" } + "Thanks to " { $url "https://github.com/barneygale/elevate" } ; + +HELP: elevated +{ $values { "command" { $or array string } } } +{ $description } ; \ No newline at end of file diff --git a/basis/elevate/elevate.factor b/basis/elevate/elevate.factor index 8640288cf5..afedf350f8 100644 --- a/basis/elevate/elevate.factor +++ b/basis/elevate/elevate.factor @@ -2,29 +2,41 @@ USING: arrays command-line fry io.launcher kernel math namespaces sequences system unix.ffi ; IN: elevate -: apple-script-elevate ( x x -- ) 2drop ; +: apple-script-elevate ( command -- ) 2drop ; -HOOK: elevate os ( win-console? posix-graphical? -- ) +GENERIC: glue-command ( prefix command -- glued ) -M: windows elevate 2drop ; +M: array glue-command + swap prefix ; -M: macosx elevate - [ ! graphical (through applescript) - t apple-script-elevate +M: string glue-command + " " glue ; + +ERROR: elevated-failed path ; + +HOOK: elevated os ( command win-console? posix-graphical? -- process ) + +M: windows elevated + 2drop run-process ; + +M: macosx elevated + nip [ ! graphical (through applescript) + apple-script-elevate ] [ - f linux os [ elevate ] with-variable + f f linux os [ elevated ] with-variable ] if ; -M: linux elevate - getuid zero? [ - 2drop ! we are already root: do nothing +M: linux elevated + nip getuid zero? [ + drop ! we are already root: do nothing ] [ - ! graphical on linuxes - nip [ { "gksudo" "kdesudo" } ] [ { } ] if - "sudo" suffix (command-line) '[ 1array _ append ] map - [ - run-process drop - ] each + { "gksudo" "kdesudo" "sudo" } { "sudo" } ? ! graphical handled + swap '[ _ glue-command ] map + [ " " split [ first utf8 string>alien ] [ rest ] execvp ] map + [ -1 = ] all? elevated-failed ] if ; -HOOK: lower os ( relaunch? -- ) +: elevate ( option? -- ) (command-line) elevated ; + +HOOK: lowered os ( relaunch? -- ) + -- 2.34.1