From 0556b433bf6f58d837dae4b74ddea25260ca64c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Fri, 21 Jun 2024 21:34:05 +0900 Subject: =?UTF-8?q?=E3=82=B7=E3=82=A7=E3=83=AB=E6=83=85=E5=A0=B1=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 10 +++++++++- src/shell.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/shell.h | 6 ++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/shell.c create mode 100644 src/shell.h diff --git a/main.c b/main.c index 896ab88..25e7b0f 100644 --- a/main.c +++ b/main.c @@ -15,6 +15,7 @@ #include "src/packages.h" #include "src/resolution.h" #include "src/wm.h" +#include "src/shell.h" #include "src/cpu.h" #include "src/gpu.h" #include "src/memory.h" @@ -200,6 +201,14 @@ int main(int argc, char *argv[]) { lc++; } + const char *shell = display_shell(); + if (shell) { + printf("%s ", LOGO[lc]); + printf("%sShell%s: %s\n", color, reset, shell); + free((void *)shell); + lc++; + } + const char *cpu = display_cpu(); if (cpu) { printf("%s ", LOGO[lc]); @@ -228,7 +237,6 @@ int main(int argc, char *argv[]) { // TODO: // * libc - // * シェル // * 端末 // * ストレージ diff --git a/src/shell.c b/src/shell.c new file mode 100644 index 0000000..783ed98 --- /dev/null +++ b/src/shell.c @@ -0,0 +1,42 @@ +#include "shell.h" +#include "common.h" + +#include +#include +#include + +const char *display_shell() { + char *shell = (char *)malloc(64 * sizeof(char)); + if (shell == NULL) { + return NULL; + } + + const char *ver; + const char *name = run_command_s("echo ${SHELL##*/}"); + + if (strncmp(name, "bash", strlen("bash")) == 0) { + ver = run_command_s("echo $BASH_VERSION"); + } else if (strncmp(name, "ksh", strlen("ksh")) == 0) { + ver = run_command_s("echo $KSH_VERSION | sed 's/^.*v//' | sed 's/ .*$//'"); + } else if (strncmp(name, "zsh", strlen("zsh")) == 0) { + ver = run_command_s("zsh --version | sed 's/ (.*$//' | sed 's/zsh //'"); + } else if (strncmp(name, "yash", strlen("yash")) == 0) { + ver = run_command_s("LC_ALL=C yash --version | head -1 | " + "sed 's/Yet another shell, version //'"); + } else if (strncmp(name, "tsch", strlen("tsch")) == 0) { + ver = run_command_s("tcsh --version | sed 's/tcsh //' | sed 's/ .*$//'"); + } else { + ver = NULL; + } + + if (ver != NULL) { + snprintf(shell, sizeof(shell), "%s %s", name, ver); + } else { + snprintf(shell, sizeof(shell), "%s", name); + } + + free((void *)name); + if (ver != NULL) free((void *)ver); + + return shell; +} diff --git a/src/shell.h b/src/shell.h new file mode 100644 index 0000000..c52e9fe --- /dev/null +++ b/src/shell.h @@ -0,0 +1,6 @@ +#ifndef SHELL_H +#define SHELL_H + +const char *display_shell(); + +#endif -- cgit v1.2.3