]> git.mdlowis.com Git - archive/afm.git/commitdiff
add searching
authorabellenir <a@bellenir.com>
Sat, 26 Jul 2014 08:50:50 +0000 (08:50 +0000)
committerabellenir <a@bellenir.com>
Sat, 26 Jul 2014 08:50:50 +0000 (08:50 +0000)
source/input.c
source/main.c
source/state.c
source/state.h

index 00c712a78d8951726f1f5491a4b5284b66e5d973..cdaf0809c8fa2e268d233d580ef0d3b4a8dcf8ec 100644 (file)
@@ -5,6 +5,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#define ESC 27
+
 typedef void (*key_cb_t)(void);
 
 typedef struct {
@@ -46,7 +48,35 @@ static void handle_page_down(void){
        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[] = {
index 86ecf8060168941b37ce8c9c673127991b2ea2ed..cf7f83a5d71e2af5ce3a2d33777e8cf70f820023 100644 (file)
@@ -30,6 +30,7 @@ int main(int argc, char** argv) {
     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());
index e8158c3b0f54e56cc19d23335463df933b667aa9..5cf276e0fdb691b796248d2c5f84c03bd8f4d66e 100644 (file)
@@ -16,6 +16,8 @@ static bool AardvarkOn = false;
 /** 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;
@@ -65,3 +67,11 @@ void state_set_focused_frame(frame_t *p_frame)
     Focused_Frame = p_frame;
 }
 
+Mode_T state_get_mode(){
+       return CurrentMode;
+}
+
+void state_set_mode(Mode_T m){
+       CurrentMode = m;
+}
+
index 1da0923d9b54f76c2eab5cde70c1a818547f1f09..cc342efba769ae7dcee145f85d2e21e319e507a4 100644 (file)
@@ -10,7 +10,7 @@
 #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);
@@ -22,5 +22,7 @@ bool state_get_aardvark_mode(void);
 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 */