]> git.saurik.com Git - redis.git/commitdiff
added support for ctrl-l and clear command into redis-cli. To clear the screen is...
authorantirez <antirez@gmail.com>
Wed, 1 Dec 2010 10:18:59 +0000 (11:18 +0100)
committerantirez <antirez@gmail.com>
Wed, 1 Dec 2010 10:18:59 +0000 (11:18 +0100)
deps/linenoise/linenoise.c
deps/linenoise/linenoise.h
src/redis-cli.c

index b6f4d4f9bfbc2b0bcd579002d531179a1d39e6cb..dd43413661ca9677c51667ca657daeca50706307 100644 (file)
@@ -9,6 +9,8 @@
  * the 2010 UNIX computers around.
  *
  * Copyright (c) 2010, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2010, Pieter Noordhuis <pcnoordhuis at gmail dot com>
+ *
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * CUF (CUrsor Forward)
  *    Sequence: ESC [ n C
  *    Effect: moves cursor forward of n chars
+ *
+ * The following are used to clear the screen: ESC [ H ESC [ 2 J
+ * This is actually composed of two sequences:
+ *
+ * cursorhome
+ *    Sequence: ESC [ H
+ *    Effect: moves the cursor to upper left corner
+ *
+ * ED2 (Clear entire screen)
+ *    Sequence: ESC [ 2 J
+ *    Effect: clear the whole screen
  * 
  */
 
@@ -265,6 +278,10 @@ static int completeLine(int fd, const char *prompt, char *buf, size_t buflen, si
     return c; /* Return last read character */
 }
 
+void linenoiseClearScreen(void) {
+    write(STDIN_FILENO,"\x1b[H\x1b[2J",7);
+}
+
 static int linenoisePrompt(int fd, char *buf, size_t buflen, const char *prompt) {
     size_t plen = strlen(prompt);
     size_t pos = 0;
@@ -432,6 +449,9 @@ up_down_arrow:
             pos = len;
             refreshLine(fd,prompt,buf,len,pos,cols);
             break;
+        case 12: /* ctrl+l, clear screen */
+            linenoiseClearScreen();
+            refreshLine(fd,prompt,buf,len,pos,cols);
         }
     }
     return len;
index c44bc3adec799716bdb0cd66393b1268322b2d44..76a703c28480d91dade14fe0b7f6456813dc8893 100644 (file)
@@ -4,6 +4,8 @@
  * See linenoise.c for more information.
  *
  * Copyright (c) 2010, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2010, Pieter Noordhuis <pcnoordhuis at gmail dot com>
+ *
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -48,5 +50,6 @@ int linenoiseHistoryAdd(const char *line);
 int linenoiseHistorySetMaxLen(int len);
 int linenoiseHistorySave(char *filename);
 int linenoiseHistoryLoad(char *filename);
+void linenoiseClearScreen(void);
 
 #endif /* __LINENOISE_H */
index a3987472283bd9de657464f7e143a724cc3daf55..2aedcc4a225b6ef070ce734f1f869ebca43cf609 100644 (file)
@@ -561,6 +561,8 @@ static void repl() {
                     config.hostip = sdsnew(argv[1]);
                     config.hostport = atoi(argv[2]);
                     cliConnect(1);
+                } else if (argc == 1 && !strcasecmp(argv[0],"clear")) {
+                    linenoiseClearScreen();
                 } else {
                     long long start_time = mstime(), elapsed;