📄 history.c
字号:
/* Autoconf patching by David Hedbor, neotron@lysator.liu.se *//*********************************************************************//* file: history.c - functions for the history stuff *//* TINTIN III *//* (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t *//* coded by peter unold 1992 *//*********************************************************************/#include <ctype.h>#ifdef HAVE_STRING_H#include <string.h>#else#ifdef HAVE_STRINGS_H#include <strings.h>#endif#endif#include "tintin.h"#ifdef HAVE_STDLIB_H#include <stdlib.h>#endifvoid insert_history();extern char *space_out();extern char *mystrdup();extern struct session *parse_input();/************************//* the #history command *//************************/void history_command(ses) struct session *ses;{ if(ses) { int i; char temp[240]; for(i=HISTORY_SIZE-1; i>=0; i--) if(ses->history[i]) { sprintf(temp, "%2d %s ", i, ses->history[i]); tintin_puts2(temp, ses); } } else tintin_puts("#NO SESSION ACTIVE => NO HISTORY DUMMY!", ses); prompt(NULL);}void do_history(buffer, ses) char *buffer; struct session *ses;{ char result[BUFFER_SIZE], *cptr; cptr=space_out(buffer); if(*cptr) { if(*cptr=='!') { if(*(cptr+1)=='!') { if(ses->history[0]) { strcpy(result, ses->history[0]); strcat(result, cptr+2); strcpy(buffer, result); } } else if(isdigit(*(cptr+1))) { int i=atoi(cptr+1); if(i>=0 && i<HISTORY_SIZE && ses->history[i]) { strcpy(result, ses->history[i]); strcat(result, cptr+2); strcpy(buffer, result); } } else { int i; for(i=0; i<HISTORY_SIZE && ses->history[i]; i++) if(is_abrev(cptr+1, ses->history[i])) { strcpy(buffer, ses->history[i]); break; } } } } insert_history(buffer, ses);}/***********************************************//* insert buffer into a session`s history list *//***********************************************/void insert_history(buffer, ses) char *buffer; struct session *ses;{ int i; /* CHANGED to fix an annoying memory leak, these were never getting freed */ if (ses->history[HISTORY_SIZE-1]) free(ses->history[HISTORY_SIZE-1]); for(i=HISTORY_SIZE-1; i>0; i--) ses->history[i]=ses->history[i-1]; ses->history[0]=mystrdup(buffer);}/************************************************************//* do all the parse stuff for !XXXX history commands *//* i'm a nihilist alright(hell i felt like writing that..) *//************************************************************/struct session *parse_history_command(command, arg, ses) char *command; char *arg; struct session *ses;{ if(ses) { if((*(command+1)=='!' || !*(command+1)) && ses->history[0]) return parse_input(ses->history[0], ses); else if(isdigit(*(command+1))) { int i=atoi(command+1); if(i>=0 && i<HISTORY_SIZE && ses->history[i]) { return parse_input(ses->history[i], ses); } } else { } } tintin_puts("#I DON'T REMEMBER THAT COMMAND.", ses); return ses;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -