update nix build
Some checks failed
Release / Bump Homebrew formula (push) Has been cancelled
Some checks failed
Release / Bump Homebrew formula (push) Has been cancelled
This commit is contained in:
55
.idea/workspace.xml
generated
55
.idea/workspace.xml
generated
@@ -11,9 +11,9 @@
|
||||
<option name="/Default/Housekeeping/RefactoringsMru/RenameRefactoring/DoSearchForTextInStrings/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/RiderDebugger/RiderRestoreDecompile/RestoreDecompileSetting/@EntryValue" value="false" type="bool" />
|
||||
</component>
|
||||
<component name="CMakePresetLoader"><![CDATA[{
|
||||
"useNewFormat": true
|
||||
}]]></component>
|
||||
<component name="CMakePresetLoader">{
|
||||
"useNewFormat": true
|
||||
}</component>
|
||||
<component name="CMakeProjectFlavorService">
|
||||
<option name="flavorId" value="CMakePlainProjectFlavor" />
|
||||
</component>
|
||||
@@ -21,11 +21,7 @@
|
||||
<option name="reloaded" value="true" />
|
||||
</component>
|
||||
<component name="CMakeRunConfigurationManager">
|
||||
<generated>
|
||||
<config projectName="kte" targetName="kte" />
|
||||
<config projectName="kte" targetName="imgui" />
|
||||
<config projectName="kte" targetName="kge" />
|
||||
</generated>
|
||||
<generated />
|
||||
</component>
|
||||
<component name="CMakeSettings" AUTO_RELOAD="true">
|
||||
<configurations>
|
||||
@@ -34,8 +30,13 @@
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="e1fe3ab0-3650-4fca-8664-a247d5dfa457" name="Changes" comment="Add GUI initialization updates and improve navigation commands. - Implement terminal detachment for GUI mode to enable terminal closure post-launch. - Add `+N` support for opening files at specific line numbers and refine cursor positioning. - Introduce `JumpToLine` command for direct navigation by line number. - Enhance mouse wheel handling for line-wise scrolling.">
|
||||
<change afterPath="$PROJECT_DIR$/default-nogui.nix" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/default-gui.nix" beforeDir="false" afterPath="$PROJECT_DIR$/default-gui.nix" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/default.nix" beforeDir="false" afterPath="$PROJECT_DIR$/default.nix" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/flake.nix" beforeDir="false" afterPath="$PROJECT_DIR$/flake.nix" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/main.cc" beforeDir="false" afterPath="$PROJECT_DIR$/main.cc" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@@ -75,9 +76,9 @@
|
||||
<option name="minorVersion" value="2.5" />
|
||||
<option name="productBranch" value="Classic" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo"><![CDATA[{
|
||||
"associatedIndex": 3
|
||||
}]]></component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 3
|
||||
}</component>
|
||||
<component name="ProjectId" id="36AlI8oyQOzOwSuZg6WxXf5LbHb" />
|
||||
<component name="ProjectLevelVcsManager">
|
||||
<OptionsSetting value="false" id="Update" />
|
||||
@@ -104,6 +105,7 @@
|
||||
"RunOnceActivity.RadMigrateCodeStyle": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.cidr.known.project.marker": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"RunOnceActivity.readMode.enableVisualFormatting": "true",
|
||||
"RunOnceActivity.west.config.association.type.startup.service": "true",
|
||||
"cf.first.check.clang-format": "false",
|
||||
@@ -119,7 +121,7 @@
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"onboarding.tips.debug.path": "/Users/kyle/src/kte/main.cpp",
|
||||
"rearrange.code.on.save": "true",
|
||||
"settings.editor.selected.configurable": "junie.application.models",
|
||||
"settings.editor.selected.configurable": "editor.preferences.fonts.default",
|
||||
"to.speed.mode.migration.done": "true",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
@@ -129,32 +131,12 @@
|
||||
<recent name="$PROJECT_DIR$/docs" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager" selected="CMake Application.kge">
|
||||
<component name="RunManager">
|
||||
<configuration default="true" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="imgui" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="kte" TARGET_NAME="imgui" CONFIG_NAME="Debug">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="kge" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="kte" TARGET_NAME="kge" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="kte" RUN_TARGET_NAME="kge">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="kte" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="kte" TARGET_NAME="kte" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="kte" RUN_TARGET_NAME="kte">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<list>
|
||||
<item itemvalue="CMake Application.imgui" />
|
||||
<item itemvalue="CMake Application.kge" />
|
||||
<item itemvalue="CMake Application.kte" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
@@ -164,6 +146,13 @@
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1764457173148</updated>
|
||||
<workItem from="1764457174208" duration="46950000" />
|
||||
<workItem from="1764538560497" duration="215000" />
|
||||
<workItem from="1764539255906" duration="196000" />
|
||||
<workItem from="1764539459951" duration="64000" />
|
||||
<workItem from="1764539535105" duration="10000" />
|
||||
<workItem from="1764539556448" duration="156000" />
|
||||
<workItem from="1764539725338" duration="1075000" />
|
||||
<workItem from="1764542392763" duration="3512000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Add undo/redo infrastructure and buffer management additions.">
|
||||
<option name="closed" value="true" />
|
||||
|
||||
@@ -4,7 +4,7 @@ project(kte)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(KTE_VERSION "0.9.0")
|
||||
set(KTE_VERSION "0.9.1")
|
||||
|
||||
# Default to terminal-only build to avoid SDL/OpenGL dependency by default.
|
||||
# Enable with -DBUILD_GUI=ON when SDL2/OpenGL/Freetype are available.
|
||||
@@ -44,6 +44,8 @@ if (${BUILD_GUI})
|
||||
endif ()
|
||||
|
||||
# NCurses for terminal mode
|
||||
set(CURSES_NEED_NCURSES)
|
||||
set(CURSES_NEED_WIDE)
|
||||
find_package(Curses REQUIRED)
|
||||
include_directories(${CURSES_INCLUDE_DIR})
|
||||
|
||||
|
||||
@@ -137,9 +137,6 @@ KLookupCtrlCommand(const int ascii_key, CommandId &out) -> bool
|
||||
case 'g':
|
||||
out = CommandId::Refresh;
|
||||
return true;
|
||||
case 'x':
|
||||
out = CommandId::SaveAndQuit; // direct C-x mapping (GUI had this)
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2,36 +2,37 @@
|
||||
lib,
|
||||
stdenv,
|
||||
cmake,
|
||||
libGL,
|
||||
ncurses,
|
||||
SDL2,
|
||||
xorg.libX11
|
||||
libGL,
|
||||
xorg,
|
||||
installShellFiles,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cmakeContent = builtins.readFile ./CMakeLists.txt;
|
||||
cmakeLines = lib.splitString "\n" cmakeContent;
|
||||
versionLine = lib.findFirst (l: builtins.match ".*set\\(KE_VERSION \".+\"\\).*" l
|
||||
version = builtins.head (builtins.match ".*set\\(KE_VERSION \"(.+)\"\\).*" versio
|
||||
versionLine = lib.findFirst (l: builtins.match ".*set\\(KTE_VERSION \".+\"\\).*" l != null) (throw "KTE_VERSION not found in CMakeLists.txt") cmakeLines;
|
||||
version = builtins.head (builtins.match ".*set\\(KTE_VERSION \"(.+)\"\\).*" versionLine);
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
stdenv.mkDerivation {
|
||||
pname = "kte";
|
||||
inherit version;
|
||||
|
||||
src = ./.;
|
||||
src = lib.cleanSource ./.;
|
||||
|
||||
nativeBuildInputs = [ pkgs.cmake pkgs.pkg-config ];
|
||||
buildInputs = with pkgs; [
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ncurses
|
||||
SDL2
|
||||
libGL
|
||||
xorg.libX11
|
||||
installShellFiles
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DBUILD_GUI=ON"
|
||||
"-DCURSES_NEED_NCURSES=TRUE"
|
||||
"-DCURSES_NEED_WIDE=TRUE"
|
||||
"-DCMAKE_BUILD_TYPE=Debug"
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
@@ -42,7 +43,8 @@ pkgs.stdenv.mkDerivation {
|
||||
cp kge $out/bin/
|
||||
|
||||
installManPage ../docs/kte.1
|
||||
installManPage ../docs/kte.1
|
||||
installManPage ../docs/kge.1
|
||||
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
42
default-nogui.nix
Normal file
42
default-nogui.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
cmake,
|
||||
ncurses,
|
||||
installShellFiles,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cmakeContent = builtins.readFile ./CMakeLists.txt;
|
||||
cmakeLines = lib.splitString "\n" cmakeContent;
|
||||
versionLine = lib.findFirst (l: builtins.match ".*set\\(KTE_VERSION \".+\"\\).*" l != null) (throw "KTE_VERSION not found in CMakeLists.txt") cmakeLines;
|
||||
version = builtins.head (builtins.match ".*set\\(KTE_VERSION \"(.+)\"\\).*" versionLine);
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "kte";
|
||||
inherit version;
|
||||
|
||||
src = lib.cleanSource ./.;
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ncurses
|
||||
installShellFiles
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DBUILD_GUI=OFF"
|
||||
"-DCMAKE_BUILD_TYPE=Debug"
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp kte $out/bin/
|
||||
|
||||
installManPage ../docs/kte.1
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
12
default.nix
12
default.nix
@@ -3,6 +3,9 @@
|
||||
stdenv,
|
||||
cmake,
|
||||
ncurses,
|
||||
SDL2,
|
||||
libGL,
|
||||
xorg,
|
||||
installShellFiles,
|
||||
...
|
||||
}:
|
||||
@@ -13,7 +16,7 @@ let
|
||||
version = builtins.head (builtins.match ".*set\\(KTE_VERSION \"(.+)\"\\).*" versionLine);
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "ke";
|
||||
pname = "kte";
|
||||
inherit version;
|
||||
|
||||
src = lib.cleanSource ./.;
|
||||
@@ -21,11 +24,14 @@ stdenv.mkDerivation {
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ncurses
|
||||
SDL2
|
||||
libGL
|
||||
xorg.libX11
|
||||
installShellFiles
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DKTE_USE_PIECE_TABLE=ON"
|
||||
"-DBUILD_GUI=ON"
|
||||
"-DCMAKE_BUILD_TYPE=Debug"
|
||||
];
|
||||
|
||||
@@ -34,8 +40,10 @@ stdenv.mkDerivation {
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp kte $out/bin/
|
||||
cp kge $out/bin/
|
||||
|
||||
installManPage ../docs/kte.1
|
||||
installManPage ../docs/kge.1
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
@@ -12,7 +12,10 @@
|
||||
in
|
||||
{
|
||||
packages.x86_64-linux = {
|
||||
default = pkgs.callPackage ./default.nix { };
|
||||
default = pkgs.callPackage ./default-nogui.nix { };
|
||||
kge = pkgs.callPackage ./default-gui.nix { };
|
||||
kte = pkgs.callPackage ./default-nogui.nix { };
|
||||
full = pkgs.callPackage ./default.nix { };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
107
main.cc
107
main.cc
@@ -12,6 +12,7 @@
|
||||
#include "Command.h"
|
||||
#include "Frontend.h"
|
||||
#include "TerminalFrontend.h"
|
||||
|
||||
#if defined(KTE_BUILD_GUI)
|
||||
#include "GUIFrontend.h"
|
||||
#endif
|
||||
@@ -32,110 +33,6 @@ PrintUsage(const char *prog)
|
||||
<< " -V, --version Show version and exit\n";
|
||||
}
|
||||
|
||||
|
||||
#if defined(KTE_BUILD_GUI)
|
||||
// Detach the process from the controlling terminal when running the GUI so the
|
||||
// launching terminal can be closed. This mirrors typical GUI app behavior on
|
||||
// POSIX systems.
|
||||
static void
|
||||
DetachFromTerminalIfGUI(bool use_gui)
|
||||
{
|
||||
#if defined(__APPLE__) || defined(__linux__) || defined(__unix__)
|
||||
if (!use_gui)
|
||||
return;
|
||||
|
||||
// Ignore SIGHUP so closing the terminal won't terminate us.
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
|
||||
// Helper: redirect stdio to /dev/null and optionally close extra FDs.
|
||||
auto redirect_stdio_and_close = []() {
|
||||
// Reset file mode creation mask and working directory to a safe default
|
||||
umask(0);
|
||||
chdir("/");
|
||||
|
||||
FILE *fnull_r = fopen("/dev/null", "r");
|
||||
if (fnull_r) {
|
||||
dup2(fileno(fnull_r), STDIN_FILENO);
|
||||
}
|
||||
FILE *fnull_w = fopen("/dev/null", "w");
|
||||
if (fnull_w) {
|
||||
dup2(fileno(fnull_w), STDOUT_FILENO);
|
||||
dup2(fileno(fnull_w), STDERR_FILENO);
|
||||
}
|
||||
|
||||
// Close any other inherited FDs to avoid keeping terminal/pty or pipes open
|
||||
long max_fd = sysconf(_SC_OPEN_MAX);
|
||||
if (max_fd < 0)
|
||||
max_fd = 256; // conservative fallback
|
||||
for (long fd = 3; fd < max_fd; ++fd) {
|
||||
close(static_cast<int>(fd));
|
||||
}
|
||||
};
|
||||
|
||||
#if defined(__APPLE__)
|
||||
// macOS: daemon(3) is deprecated and treated as an error with -Werror.
|
||||
// Use double-fork + setsid and redirect stdio to /dev/null.
|
||||
pid_t pid = fork();
|
||||
if (pid < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pid > 0) {
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
if (setsid() < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
pid_t pid2 = fork();
|
||||
if (pid2 < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pid2 > 0) {
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
redirect_stdio_and_close();
|
||||
#else
|
||||
// Prefer daemon(3) on non-Apple POSIX; fall back to manual detach if it fails.
|
||||
if (daemon(0, 0) == 0) {
|
||||
redirect_stdio_and_close();
|
||||
return;
|
||||
}
|
||||
|
||||
pid_t pid = fork();
|
||||
if (pid < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pid > 0) {
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
if (setsid() < 0) {
|
||||
// bogus check
|
||||
}
|
||||
|
||||
pid_t pid2 = fork();
|
||||
if (pid2 < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pid2 > 0) {
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
redirect_stdio_and_close();
|
||||
#endif
|
||||
#else
|
||||
(void) use_gui;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int
|
||||
main(int argc, const char *argv[])
|
||||
{
|
||||
@@ -212,8 +109,6 @@ main(int argc, const char *argv[])
|
||||
use_gui = false;
|
||||
#endif
|
||||
}
|
||||
// If using GUI, detach from the controlling terminal so the terminal can be closed.
|
||||
DetachFromTerminalIfGUI(use_gui);
|
||||
#endif
|
||||
|
||||
// Open files passed on the CLI; support +N to jump to line N in the next file.
|
||||
|
||||
Reference in New Issue
Block a user