From 7933ec6bc90fc6ebae1c7defd190f42f75154b3e Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 3 Mar 2020 18:44:25 -0800 Subject: [PATCH] New keycodes; linux one time code execution; close file handle in save function --- 4ed_generate_keycodes.cpp | 13 +- bin/itchio_push_all.sh | 0 bin/itchio_push_linux-x86.sh | 0 bin/itchio_push_linux.sh | 0 bin/package-x86-linux.sh | 0 custom/bin/build_one_time.sh | 42 ++ custom/bin/buildsuper_x64-linux.sh | 4 +- custom/bin/buildsuper_x64-mac.sh | 2 + custom/bin/buildsuper_x86-linux.sh | 4 +- custom/generated/4coder_event_codes.h | 506 +++++++++++++++---------- platform_linux/linux_4ed.cpp | 4 +- platform_linux/linux_4ed_functions.cpp | 1 + project.4coder | 7 +- ship_files/changes.txt | 2 + 14 files changed, 377 insertions(+), 208 deletions(-) mode change 100644 => 100755 bin/itchio_push_all.sh mode change 100644 => 100755 bin/itchio_push_linux-x86.sh mode change 100644 => 100755 bin/itchio_push_linux.sh mode change 100644 => 100755 bin/package-x86-linux.sh create mode 100755 custom/bin/build_one_time.sh diff --git a/4ed_generate_keycodes.cpp b/4ed_generate_keycodes.cpp index 622da54b..b03a7583 100644 --- a/4ed_generate_keycodes.cpp +++ b/4ed_generate_keycodes.cpp @@ -123,9 +123,20 @@ make_key_list(Arena *arena){ add_code(arena, &list, string_u8_litexpr("Control")); add_code(arena, &list, string_u8_litexpr("Alt")); add_code(arena, &list, string_u8_litexpr("Command")); - for (u32 i = 1; i <= 16; i += 1){ + for (u32 i = 1; i <= 24; i += 1){ add_code(arena, &list, push_u8_stringf(arena, "F%d", i)); } + for (u32 i = '0'; i <= '9'; i += 1){ + add_code(arena, &list, push_u8_stringf(arena, "NumPad%c", i)); + } + add_code(arena, &list, string_u8_litexpr("NumPadStar")); + add_code(arena, &list, string_u8_litexpr("NumPadPlus")); + add_code(arena, &list, string_u8_litexpr("NumPadMinus")); + add_code(arena, &list, string_u8_litexpr("NumPadDot")); + add_code(arena, &list, string_u8_litexpr("NumPadSlash")); + for (i32 i = 0; i < 30; i += 1){ + add_code(arena, &list, push_u8_stringf(arena, "Ex%d", i)); + } return(list); } diff --git a/bin/itchio_push_all.sh b/bin/itchio_push_all.sh old mode 100644 new mode 100755 diff --git a/bin/itchio_push_linux-x86.sh b/bin/itchio_push_linux-x86.sh old mode 100644 new mode 100755 diff --git a/bin/itchio_push_linux.sh b/bin/itchio_push_linux.sh old mode 100644 new mode 100755 diff --git a/bin/package-x86-linux.sh b/bin/package-x86-linux.sh old mode 100644 new mode 100755 diff --git a/custom/bin/build_one_time.sh b/custom/bin/build_one_time.sh new file mode 100755 index 00000000..724c34f0 --- /dev/null +++ b/custom/bin/build_one_time.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# If any command errors, stop the script +set -e + +# Set up directories +ORIGINAL=$PWD +ME="$(readlink -f "$0")" +LOCATION="$(dirname "$ME")" +cd $LOCATION +cd .. +CUSTOM_ROOT=$PWD +cd $ORIGINAL + +target=$1 +if [ -z "$target" ] +then + echo error: no input file + exit 1 +fi + +full_target=$target +if [[ ${target:0:1} != "/" ]]; +then +full_target="$PWD/$target" +fi + +dst=$2 +if [[ $dst == "" ]]; +then +dst=. +fi + +debug=-g + +opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=0" + +pushd $dst +g++ -I"$CUSTOM_ROOT" $opts $full_target -o one_time +popd + + diff --git a/custom/bin/buildsuper_x64-linux.sh b/custom/bin/buildsuper_x64-linux.sh index d6f0a00e..d175b40a 100755 --- a/custom/bin/buildsuper_x64-linux.sh +++ b/custom/bin/buildsuper_x64-linux.sh @@ -15,9 +15,11 @@ if [ -z "$SOURCE" ]; then fi echo SOURCE = $SOURCE -opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=1" +opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=0" arch=-m64 +debug=-g + preproc_file=4coder_command_metadata.i meta_macros="-DMETA_PASS" g++ -I"$CODE_HOME" $meta_macros $arch $opts $debug -std=c++11 "$SOURCE" -E -o $preproc_file diff --git a/custom/bin/buildsuper_x64-mac.sh b/custom/bin/buildsuper_x64-mac.sh index 57a1f8cf..02aefcb2 100755 --- a/custom/bin/buildsuper_x64-mac.sh +++ b/custom/bin/buildsuper_x64-mac.sh @@ -18,6 +18,8 @@ fi opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_MAC=1 -DOS_WINDOWS=0 -DOS_LINUX=0" arch=-m64 +debug=-g + preproc_file=4coder_command_metadata.i meta_macros="-DMETA_PASS" clang++ -I"$CODE_HOME" $meta_macros $arch $opts $debug -std=c++11 "$SOURCE" -E -o $preproc_file diff --git a/custom/bin/buildsuper_x86-linux.sh b/custom/bin/buildsuper_x86-linux.sh index becc4c47..f635aebf 100755 --- a/custom/bin/buildsuper_x86-linux.sh +++ b/custom/bin/buildsuper_x86-linux.sh @@ -14,9 +14,11 @@ if [ -z "$SOURCE" ]; then SOURCE="$(readlink -f "$CODE_HOME/4coder_default_bindings.cpp")" fi -opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=1" +opts="-Wno-write-strings -Wno-null-dereference -Wno-comment -Wno-switch -Wno-missing-declarations -Wno-logical-op-parentheses -g -DOS_LINUX=1 -DOS_WINDOWS=0 -DOS_MAC=0" arch=-m32 +debug=-g + preproc_file=4coder_command_metadata.i meta_macros="-DMETA_PASS" g++ -I"$CODE_HOME" $meta_macros $arch $opts $debug -std=c++11 "$SOURCE" -E -o $preproc_file diff --git a/custom/generated/4coder_event_codes.h b/custom/generated/4coder_event_codes.h index 633caf07..f94d29e7 100644 --- a/custom/generated/4coder_event_codes.h +++ b/custom/generated/4coder_event_codes.h @@ -1,212 +1,318 @@ enum{ - KeyCode_A = 1, - KeyCode_B = 2, - KeyCode_C = 3, - KeyCode_D = 4, - KeyCode_E = 5, - KeyCode_F = 6, - KeyCode_G = 7, - KeyCode_H = 8, - KeyCode_I = 9, - KeyCode_J = 10, - KeyCode_K = 11, - KeyCode_L = 12, - KeyCode_M = 13, - KeyCode_N = 14, - KeyCode_O = 15, - KeyCode_P = 16, - KeyCode_Q = 17, - KeyCode_R = 18, - KeyCode_S = 19, - KeyCode_T = 20, - KeyCode_U = 21, - KeyCode_V = 22, - KeyCode_W = 23, - KeyCode_X = 24, - KeyCode_Y = 25, - KeyCode_Z = 26, - KeyCode_0 = 27, - KeyCode_1 = 28, - KeyCode_2 = 29, - KeyCode_3 = 30, - KeyCode_4 = 31, - KeyCode_5 = 32, - KeyCode_6 = 33, - KeyCode_7 = 34, - KeyCode_8 = 35, - KeyCode_9 = 36, - KeyCode_Space = 37, - KeyCode_Tick = 38, - KeyCode_Minus = 39, - KeyCode_Equal = 40, - KeyCode_LeftBracket = 41, - KeyCode_RightBracket = 42, - KeyCode_Semicolon = 43, - KeyCode_Quote = 44, - KeyCode_Comma = 45, - KeyCode_Period = 46, - KeyCode_ForwardSlash = 47, - KeyCode_BackwardSlash = 48, - KeyCode_Tab = 49, - KeyCode_Escape = 50, - KeyCode_Pause = 51, - KeyCode_Up = 52, - KeyCode_Down = 53, - KeyCode_Left = 54, - KeyCode_Right = 55, - KeyCode_Backspace = 56, - KeyCode_Return = 57, - KeyCode_Delete = 58, - KeyCode_Insert = 59, - KeyCode_Home = 60, - KeyCode_End = 61, - KeyCode_PageUp = 62, - KeyCode_PageDown = 63, - KeyCode_CapsLock = 64, - KeyCode_NumLock = 65, - KeyCode_ScrollLock = 66, - KeyCode_Menu = 67, - KeyCode_Shift = 68, - KeyCode_Control = 69, - KeyCode_Alt = 70, - KeyCode_Command = 71, - KeyCode_F1 = 72, - KeyCode_F2 = 73, - KeyCode_F3 = 74, - KeyCode_F4 = 75, - KeyCode_F5 = 76, - KeyCode_F6 = 77, - KeyCode_F7 = 78, - KeyCode_F8 = 79, - KeyCode_F9 = 80, - KeyCode_F10 = 81, - KeyCode_F11 = 82, - KeyCode_F12 = 83, - KeyCode_F13 = 84, - KeyCode_F14 = 85, - KeyCode_F15 = 86, - KeyCode_F16 = 87, - KeyCode_COUNT = 88, +KeyCode_A = 1, +KeyCode_B = 2, +KeyCode_C = 3, +KeyCode_D = 4, +KeyCode_E = 5, +KeyCode_F = 6, +KeyCode_G = 7, +KeyCode_H = 8, +KeyCode_I = 9, +KeyCode_J = 10, +KeyCode_K = 11, +KeyCode_L = 12, +KeyCode_M = 13, +KeyCode_N = 14, +KeyCode_O = 15, +KeyCode_P = 16, +KeyCode_Q = 17, +KeyCode_R = 18, +KeyCode_S = 19, +KeyCode_T = 20, +KeyCode_U = 21, +KeyCode_V = 22, +KeyCode_W = 23, +KeyCode_X = 24, +KeyCode_Y = 25, +KeyCode_Z = 26, +KeyCode_0 = 27, +KeyCode_1 = 28, +KeyCode_2 = 29, +KeyCode_3 = 30, +KeyCode_4 = 31, +KeyCode_5 = 32, +KeyCode_6 = 33, +KeyCode_7 = 34, +KeyCode_8 = 35, +KeyCode_9 = 36, +KeyCode_Space = 37, +KeyCode_Tick = 38, +KeyCode_Minus = 39, +KeyCode_Equal = 40, +KeyCode_LeftBracket = 41, +KeyCode_RightBracket = 42, +KeyCode_Semicolon = 43, +KeyCode_Quote = 44, +KeyCode_Comma = 45, +KeyCode_Period = 46, +KeyCode_ForwardSlash = 47, +KeyCode_BackwardSlash = 48, +KeyCode_Tab = 49, +KeyCode_Escape = 50, +KeyCode_Pause = 51, +KeyCode_Up = 52, +KeyCode_Down = 53, +KeyCode_Left = 54, +KeyCode_Right = 55, +KeyCode_Backspace = 56, +KeyCode_Return = 57, +KeyCode_Delete = 58, +KeyCode_Insert = 59, +KeyCode_Home = 60, +KeyCode_End = 61, +KeyCode_PageUp = 62, +KeyCode_PageDown = 63, +KeyCode_CapsLock = 64, +KeyCode_NumLock = 65, +KeyCode_ScrollLock = 66, +KeyCode_Menu = 67, +KeyCode_Shift = 68, +KeyCode_Control = 69, +KeyCode_Alt = 70, +KeyCode_Command = 71, +KeyCode_F1 = 72, +KeyCode_F2 = 73, +KeyCode_F3 = 74, +KeyCode_F4 = 75, +KeyCode_F5 = 76, +KeyCode_F6 = 77, +KeyCode_F7 = 78, +KeyCode_F8 = 79, +KeyCode_F9 = 80, +KeyCode_F10 = 81, +KeyCode_F11 = 82, +KeyCode_F12 = 83, +KeyCode_F13 = 84, +KeyCode_F14 = 85, +KeyCode_F15 = 86, +KeyCode_F16 = 87, +KeyCode_F17 = 88, +KeyCode_F18 = 89, +KeyCode_F19 = 90, +KeyCode_F20 = 91, +KeyCode_F21 = 92, +KeyCode_F22 = 93, +KeyCode_F23 = 94, +KeyCode_F24 = 95, +KeyCode_NumPad0 = 96, +KeyCode_NumPad1 = 97, +KeyCode_NumPad2 = 98, +KeyCode_NumPad3 = 99, +KeyCode_NumPad4 = 100, +KeyCode_NumPad5 = 101, +KeyCode_NumPad6 = 102, +KeyCode_NumPad7 = 103, +KeyCode_NumPad8 = 104, +KeyCode_NumPad9 = 105, +KeyCode_NumPadStar = 106, +KeyCode_NumPadPlus = 107, +KeyCode_NumPadMinus = 108, +KeyCode_NumPadDot = 109, +KeyCode_NumPadSlash = 110, +KeyCode_Ex0 = 111, +KeyCode_Ex1 = 112, +KeyCode_Ex2 = 113, +KeyCode_Ex3 = 114, +KeyCode_Ex4 = 115, +KeyCode_Ex5 = 116, +KeyCode_Ex6 = 117, +KeyCode_Ex7 = 118, +KeyCode_Ex8 = 119, +KeyCode_Ex9 = 120, +KeyCode_Ex10 = 121, +KeyCode_Ex11 = 122, +KeyCode_Ex12 = 123, +KeyCode_Ex13 = 124, +KeyCode_Ex14 = 125, +KeyCode_Ex15 = 126, +KeyCode_Ex16 = 127, +KeyCode_Ex17 = 128, +KeyCode_Ex18 = 129, +KeyCode_Ex19 = 130, +KeyCode_Ex20 = 131, +KeyCode_Ex21 = 132, +KeyCode_Ex22 = 133, +KeyCode_Ex23 = 134, +KeyCode_Ex24 = 135, +KeyCode_Ex25 = 136, +KeyCode_Ex26 = 137, +KeyCode_Ex27 = 138, +KeyCode_Ex28 = 139, +KeyCode_Ex29 = 140, +KeyCode_COUNT = 141, }; global char* key_code_name[KeyCode_COUNT] = { - "None", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "Space", - "Tick", - "Minus", - "Equal", - "LeftBracket", - "RightBracket", - "Semicolon", - "Quote", - "Comma", - "Period", - "ForwardSlash", - "BackwardSlash", - "Tab", - "Escape", - "Pause", - "Up", - "Down", - "Left", - "Right", - "Backspace", - "Return", - "Delete", - "Insert", - "Home", - "End", - "PageUp", - "PageDown", - "CapsLock", - "NumLock", - "ScrollLock", - "Menu", - "Shift", - "Control", - "Alt", - "Command", - "F1", - "F2", - "F3", - "F4", - "F5", - "F6", - "F7", - "F8", - "F9", - "F10", - "F11", - "F12", - "F13", - "F14", - "F15", - "F16", +"None", +"A", +"B", +"C", +"D", +"E", +"F", +"G", +"H", +"I", +"J", +"K", +"L", +"M", +"N", +"O", +"P", +"Q", +"R", +"S", +"T", +"U", +"V", +"W", +"X", +"Y", +"Z", +"0", +"1", +"2", +"3", +"4", +"5", +"6", +"7", +"8", +"9", +"Space", +"Tick", +"Minus", +"Equal", +"LeftBracket", +"RightBracket", +"Semicolon", +"Quote", +"Comma", +"Period", +"ForwardSlash", +"BackwardSlash", +"Tab", +"Escape", +"Pause", +"Up", +"Down", +"Left", +"Right", +"Backspace", +"Return", +"Delete", +"Insert", +"Home", +"End", +"PageUp", +"PageDown", +"CapsLock", +"NumLock", +"ScrollLock", +"Menu", +"Shift", +"Control", +"Alt", +"Command", +"F1", +"F2", +"F3", +"F4", +"F5", +"F6", +"F7", +"F8", +"F9", +"F10", +"F11", +"F12", +"F13", +"F14", +"F15", +"F16", +"F17", +"F18", +"F19", +"F20", +"F21", +"F22", +"F23", +"F24", +"NumPad0", +"NumPad1", +"NumPad2", +"NumPad3", +"NumPad4", +"NumPad5", +"NumPad6", +"NumPad7", +"NumPad8", +"NumPad9", +"NumPadStar", +"NumPadPlus", +"NumPadMinus", +"NumPadDot", +"NumPadSlash", +"Ex0", +"Ex1", +"Ex2", +"Ex3", +"Ex4", +"Ex5", +"Ex6", +"Ex7", +"Ex8", +"Ex9", +"Ex10", +"Ex11", +"Ex12", +"Ex13", +"Ex14", +"Ex15", +"Ex16", +"Ex17", +"Ex18", +"Ex19", +"Ex20", +"Ex21", +"Ex22", +"Ex23", +"Ex24", +"Ex25", +"Ex26", +"Ex27", +"Ex28", +"Ex29", }; enum{ - MouseCode_Left = 1, - MouseCode_Middle = 2, - MouseCode_Right = 3, - MouseCode_COUNT = 4, +MouseCode_Left = 1, +MouseCode_Middle = 2, +MouseCode_Right = 3, +MouseCode_COUNT = 4, }; global char* mouse_code_name[MouseCode_COUNT] = { - "None", - "Left", - "Middle", - "Right", +"None", +"Left", +"Middle", +"Right", }; enum{ - CoreCode_Startup = 1, - CoreCode_Animate = 2, - CoreCode_ClickActivateView = 3, - CoreCode_ClickDeactivateView = 4, - CoreCode_TryExit = 5, - CoreCode_FileExternallyModified = 6, - CoreCode_NewClipboardContents = 7, - CoreCode_COUNT = 8, +CoreCode_Startup = 1, +CoreCode_Animate = 2, +CoreCode_ClickActivateView = 3, +CoreCode_ClickDeactivateView = 4, +CoreCode_TryExit = 5, +CoreCode_FileExternallyModified = 6, +CoreCode_NewClipboardContents = 7, +CoreCode_COUNT = 8, }; global char* core_code_name[CoreCode_COUNT] = { - "None", - "Startup", - "Animate", - "ClickActivateView", - "ClickDeactivateView", - "TryExit", - "FileExternallyModified", - "NewClipboardContents", +"None", +"Startup", +"Animate", +"ClickActivateView", +"ClickDeactivateView", +"TryExit", +"FileExternallyModified", +"NewClipboardContents", }; diff --git a/platform_linux/linux_4ed.cpp b/platform_linux/linux_4ed.cpp index 6f1fb3b4..6cd4a6de 100644 --- a/platform_linux/linux_4ed.cpp +++ b/platform_linux/linux_4ed.cpp @@ -1080,7 +1080,7 @@ linux_keycode_init(Display* dpy){ // Find the rest by their key label struct SymCode { KeySym sym; Key_Code code; }; - SymCode sym_table[100]; + SymCode sym_table[108]; SymCode* p = sym_table; *p++ = { XK_space, KeyCode_Space }; @@ -1112,7 +1112,7 @@ linux_keycode_init(Display* dpy){ *p++ = { XK_Super_L, KeyCode_Command }; *p++ = { XK_Super_R, KeyCode_Command }; - for(Key_Code k = KeyCode_F1; k <= KeyCode_F16; ++k) { + for (Key_Code k = KeyCode_F1; k <= KeyCode_F24; ++k){ *p++ = { XK_F1 + (k - KeyCode_F1), k }; } diff --git a/platform_linux/linux_4ed_functions.cpp b/platform_linux/linux_4ed_functions.cpp index 0be85ad0..b3b0bed9 100644 --- a/platform_linux/linux_4ed_functions.cpp +++ b/platform_linux/linux_4ed_functions.cpp @@ -233,6 +233,7 @@ system_save_file(Arena* scratch, char* file_name, String_Const_u8 data){ result = linux_file_attributes_from_struct_stat(&file_stat); } } + close(fd); } else { perror("open"); } diff --git a/project.4coder b/project.4coder index e24d066f..d548b124 100644 --- a/project.4coder +++ b/project.4coder @@ -53,8 +53,8 @@ command_list = { { .name = "run one time", .out = "*run*", .footer_panel = false, .save_dirty_files = false, .cmd = { { "pushd ..\\build & one_time", .os = "win" }, - { "pushd ../build & one_time", .os = "linux" }, - { "pushd ../build & one_time", .os = "mac" }, }, }, + { "cd ../build && ./one_time" , .os = "linux" }, + { "pushd ../build && ./one_time" , .os = "mac" }, }, }, { .name = "build custom api docs", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, @@ -92,7 +92,8 @@ command_list = { { .name = "build keycode generator", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, - .cmd = { { "custom\\bin\\build_one_time 4ed_generate_keycodes.cpp ..\\build", .os = "win" }, }, }, + .cmd = { { "custom\\bin\\build_one_time 4ed_generate_keycodes.cpp ..\\build", .os = "win" }, + { "custom/bin/build_one_time.sh 4ed_generate_keycodes.cpp ../build", .os = "linux" }, }, }, { .name = "build site render", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, diff --git a/ship_files/changes.txt b/ship_files/changes.txt index 2c75b6d6..ef1ccfd9 100644 --- a/ship_files/changes.txt +++ b/ship_files/changes.txt @@ -7,6 +7,8 @@ + in config.4coder the variable virtual_whitespace_regular_indent determines the number of space-widths to use as the regular indentation in a virtual whitespace layout + show whitespace mode implemented in 'default_render_buffer' + `set_face_size` and `set_face_size_this_buffer` commands + + `HookID_WholeScreenRenderCaller` hook runs once per frame after all views render + + Extended key codes list + Fix: tabs are measured with the correct amount of width for the user's settings + Fix: virtual whitespace toggling works when the config initially diabled virtual whitespace + Fix: never miss the most recent post to the clipboard on windows