about summary refs log tree commit diff stats
path: root/src/utils
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-03-17 13:39:57 +0100
committerbptato <nincsnevem662@gmail.com>2024-03-17 13:58:37 +0100
commitc383c8a51f86f805c3a7e080b5ee32522076ba15 (patch)
tree29014f18f6c66b69b637ed0a3448e06a24d4ed0b /src/utils
parenta224109c8933414fc7e42a1406bb491d6294eef9 (diff)
downloadchawan-c383c8a51f86f805c3a7e080b5ee32522076ba15.tar.gz
forkserver: set process titles for processes
this is unfortunately truncated on Linux, but I don't care enough to
hack around this
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/proctitle.nim38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/utils/proctitle.nim b/src/utils/proctitle.nim
new file mode 100644
index 00000000..4694be0b
--- /dev/null
+++ b/src/utils/proctitle.nim
@@ -0,0 +1,38 @@
+import types/url
+
+when defined(freebsd):
+  proc c_setproctitle(fmt: cstring) {.header: "<unistd.h>", importc:
+    "setproctitle", varargs.}
+elif defined(netbsd) or defined(openbsd):
+  proc c_setproctitle(fmt: cstring) {.header: "<stdlib.h>", importc:
+    "setproctitle", varargs.}
+elif defined(linux):
+  let PR_SET_NAME {.importc, header: "<sys/prctl.h>", nodecl.}: cint
+  proc prctl(option: cint; arg2, arg3, arg4, arg5: culong): cint {.importc,
+    header: "<sys/prctl.h>".}
+
+proc setProcessTitle*(s: string) =
+  when defined(freebsd) or defined(netbsd) or defined(openbsd):
+    c_setproctitle("%s", cstring(s))
+  elif defined(linux):
+    discard prctl(PR_SET_NAME, cast[culong](cstring(s)), 0, 0, 0)
+
+when defined(linux):
+  from std/strutils import startsWith, delete
+  from utils/twtstr import afterLast
+
+proc setBufferProcessTitle*(url: URL) =
+  when defined(linux):
+    # linux truncates to 15 chars; try to preserve important info
+    const initTitle = "cha buf "
+    var title = initTitle
+    var hostname = url.hostname
+    if hostname.startsWith("www."):
+      hostname.delete(0.."www.".high)
+    title &= hostname
+    if title.len > initTitle.len:
+      title &= ' '
+    title &= url.pathname.afterLast('/')
+    setProcessTitle(title)
+  else:
+    setProcessTitle("cha buffer " & $url)