#include <stdlib.h>
#include <string.h>
+#define ESC 27
+
typedef void (*key_cb_t)(void);
typedef struct {
workdir_jump_down(state_get_focused_frame()->workdir);
}
+
static void search_mode(void){
+ int searchcap = 8;
+ char* searchstr = malloc(sizeof(char)*searchcap);
+ int searchlen = 0;
+ bool searching = true;
+ state_set_mode(MODE_SEARCH);
+ while(searching){
+ char inpt = getch();
+ if(inpt == ERR){ /* do nothing */
+ }else if(inpt == ESC){
+ searching = false;
+ }else if (inpt == '\n'){
+ searching = false;
+ handle_cd();
+ }else{
+ if(searchlen+1 >= searchcap){
+ searchcap *= 2;
+ searchstr = realloc(searchstr, sizeof(char)*searchcap);
+ }
+ searchstr[searchlen] = inpt;
+ searchlen += 1;
+ searchstr[searchlen] = 0;
+ workdir_seek(state_get_focused_frame()->workdir, searchstr);
+ }
+ if(state_get_screen_dirty()) screen_update();
+ }
+ free(searchstr);
+ state_set_mode(MODE_NORMAL);
}
static binding_t Default_Bindings[] = {
timeout(25);
refresh();
screen_init();
+ state_set_mode(MODE_NORMAL);
while(state_get_running()) {
if(state_get_screen_dirty()) screen_update();
input_handle_key(getch());
/** A pointer to the currently focused frame */
static frame_t* Focused_Frame = 0;
+static Mode_T CurrentMode = 0;
+
bool state_get_running(void)
{
return Running;
Focused_Frame = p_frame;
}
+Mode_T state_get_mode(){
+ return CurrentMode;
+}
+
+void state_set_mode(Mode_T m){
+ CurrentMode = m;
+}
+
#include <stdbool.h>
#include "screen.h"
-typedef enum{ MODE_NORMAL, MODE_SEARCH } MODE;
+typedef enum{ MODE_NORMAL, MODE_SEARCH } Mode_T;
bool state_get_running(void);
void state_set_running(bool val);
void state_set_aardvark_mode(bool val);
frame_t* state_get_focused_frame(void);
void state_set_focused_frame(frame_t* p_frame);
+Mode_T state_get_mode(void);
+void state_set_mode(Mode_T);
#endif /* STATE_H */