Syntax for executing shell commands
This commit is contained in:
@@ -84,6 +84,12 @@ bool AreEqual(String16 a, String16 b, unsigned ignore_case = false) {
|
|||||||
inline bool operator==(String16 a, String16 b) { return AreEqual(a, b); }
|
inline bool operator==(String16 a, String16 b) { return AreEqual(a, b); }
|
||||||
inline bool operator!=(String16 a, String16 b) { return !AreEqual(a, b); }
|
inline bool operator!=(String16 a, String16 b) { return !AreEqual(a, b); }
|
||||||
|
|
||||||
|
wchar_t GetChar(String16 string, int64_t i) {
|
||||||
|
wchar_t result = 0;
|
||||||
|
if (i < string.len) result = string.data[i];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
String16 Merge(Allocator allocator, Array<String16> list, String16 separator = " ") {
|
String16 Merge(Allocator allocator, Array<String16> list, String16 separator = " ") {
|
||||||
int64_t char_count = 0;
|
int64_t char_count = 0;
|
||||||
For(list) char_count += it.len;
|
For(list) char_count += it.len;
|
||||||
|
|||||||
@@ -367,8 +367,11 @@ Process CreateCommandLineProcess(String command_line, String working_dir) {
|
|||||||
String16 cmd = ToString16(scratch, command_line);
|
String16 cmd = ToString16(scratch, command_line);
|
||||||
void *env = NULL;
|
void *env = NULL;
|
||||||
|
|
||||||
|
DWORD dwCreationFlags = 0;
|
||||||
|
BOOL bInheritHandles = TRUE;
|
||||||
|
|
||||||
PROCESS_INFORMATION info = {};
|
PROCESS_INFORMATION info = {};
|
||||||
if (!CreateProcessW(L"c:\\windows\\system32\\cmd.exe", cmd.data, 0, 0, TRUE, 0, env, cwd.data, &startup, &info)) {
|
if (!CreateProcessW(L"c:\\windows\\system32\\cmd.exe", cmd.data, 0, 0, bInheritHandles, dwCreationFlags, env, cwd.data, &startup, &info)) {
|
||||||
Win32ProcessError(&process, "failed to create process", command_line);
|
Win32ProcessError(&process, "failed to create process", command_line);
|
||||||
return process;
|
return process;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -884,13 +884,20 @@ void WindowCommand(Event event, Window *window, View *view) {
|
|||||||
Range range = caret.range;
|
Range range = caret.range;
|
||||||
if (GetSize(caret.range) == 0) range = EncloseLoadWord(buffer, GetFront(caret));
|
if (GetSize(caret.range) == 0) range = EncloseLoadWord(buffer, GetFront(caret));
|
||||||
String16 string = GetString(*buffer, range);
|
String16 string = GetString(*buffer, range);
|
||||||
|
|
||||||
Open(string);
|
Open(string);
|
||||||
} else if (Alt(SDLK_Q)) {
|
} else if (Alt(SDLK_Q)) {
|
||||||
Caret caret = view->carets[0];
|
Caret caret = view->carets[0];
|
||||||
Range range = caret.range;
|
Range range = caret.range;
|
||||||
if (GetSize(caret.range) == 0) range = EncloseExecWord(buffer, GetFront(caret));
|
if (GetSize(caret.range) == 0) range = EncloseExecWord(buffer, GetFront(caret));
|
||||||
String16 string = GetString(*buffer, range);
|
String16 string = GetString(*buffer, range);
|
||||||
Command_EvalLua(view, string);
|
|
||||||
|
if (GetChar(string, 0) == L'!') {
|
||||||
|
string = Skip(string, 1);
|
||||||
|
Exec(ConsoleViewID, true, string, GetCurrentBufferDir());
|
||||||
|
} else {
|
||||||
|
Command_EvalLua(view, string);
|
||||||
|
}
|
||||||
|
|
||||||
// Exec(string, GetCurrentBufferDir());
|
// Exec(string, GetCurrentBufferDir());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,5 +24,3 @@ https://handmade.network/forums/t/1219-win32_asynchronous_pipes_question
|
|||||||
- coloring seems even more hairy to do correctly because there are multiline comments etc.
|
- coloring seems even more hairy to do correctly because there are multiline comments etc.
|
||||||
- it honestly seems no matter what you do it's a very hairy problem, text was not meant for this
|
- it honestly seems no matter what you do it's a very hairy problem, text was not meant for this
|
||||||
|
|
||||||
|
|
||||||
Ok for reference only, I would like to share my experience and how I solved the problem. IT may be possible that there's something wrong in the child process I spawn, but from what I see, if I call Read in non-blocking mode, so only after a PeekNamedPipe, there's nothing that prevent the process from being deallocated, even I keep a reference to the pipe. I've solved launching another thread that does blocking Read on the pipe descriptor, and I'm longer loosing the last bytes..
|
|
||||||
@@ -1,13 +1,11 @@
|
|||||||
- I guess it's pretty dangerous passing pointers everywhere?
|
- I guess it's pretty dangerous passing pointers everywhere?
|
||||||
- text in events aren't we using invalid memory for text? We need an intern table?
|
- text in events aren't we using invalid memory for text? We need an intern table?
|
||||||
- kill all processes on exit https://devblogs.microsoft.com/oldnewthing/20131209-00/?p=2433
|
|
||||||
- if exec is prepended with '!' symbol then run a shell command
|
- if exec is prepended with '!' symbol then run a shell command
|
||||||
- try using git grep for search for now, combine with fuzzy search buffer
|
- try using git grep for search for now, combine with fuzzy search buffer
|
||||||
- Test stdin writing code
|
- Test stdin writing code
|
||||||
- Implement shell interaction (last line should have a '$'' symbols, if you press enter it should send that line to stdin of a running shell)
|
- Implement shell interaction (last line should have a '$'' symbols, if you press enter it should send that line to stdin of a running shell)
|
||||||
|
|
||||||
- exe icon
|
|
||||||
|
|
||||||
- search as a command to execute which is going to be in the title bar
|
- search as a command to execute which is going to be in the title bar
|
||||||
- search backwards
|
- search backwards
|
||||||
|
|
||||||
@@ -46,6 +44,7 @@ BUG: there is a click hang when switching windows sometimes, you click after sel
|
|||||||
|
|
||||||
|
|
||||||
backlog
|
backlog
|
||||||
|
- drop text into window
|
||||||
- page up and down should also scroll and leave you in exactly same scroll
|
- page up and down should also scroll and leave you in exactly same scroll
|
||||||
- I think the way sublime text and we display line highlights is confusing with multiple cursors (line highlight can be confused with selection)
|
- I think the way sublime text and we display line highlights is confusing with multiple cursors (line highlight can be confused with selection)
|
||||||
- ctrl + delete maybe should stop on new line but it keeps on going, sublime is much more careful with deleting
|
- ctrl + delete maybe should stop on new line but it keeps on going, sublime is much more careful with deleting
|
||||||
|
|||||||
Reference in New Issue
Block a user