2013-08-13 1 views
3

예를 들어, "Hinge"문자열이 있다고 가정하십시오. 커서를 처음으로 옮기고 del 키를 눌러 "H"를 제거한 다음 "B"를 삽입하여 커서 앞에 모든 것을 넣을 수 있기를 원합니다. 기본 동작 인 "i"를 덮어 쓰지 않고 "Binge"라는 단어를 생성합니다. 표준 addch() 함수를 사용하여이 작업을 수행 할 수 있습니까?커서를 curses/C에서 텍스트 편집기/터미널처럼 동작하게 만드는 방법은 무엇입니까?

또한 화면에 제대로 인쇄 할 수 있다고해도 버퍼에 해당하는 문제가 너무 복잡해 보입니다. 이것은 일반적인 작업처럼 보이지만 해커가 아닌 방법으로 생각할 수는 없습니다.

다음은 현재 기본 입력을 처리하는 방법의 예입니다.

if (isprint(key)) { 
    if (ctx->pos != sizeof(ctx->line)-1) { 
     mvwaddch(self->window, y, x, key); 
     ctx->line[ctx->pos++] = key; 
     ctx->line[ctx->pos] = '\0'; 
    } 
    } 
+0

흠 컴파일 이후 이것이 가장 좋은 방법이지만, 당신의 연결리스트로 코딩 클래스의 생각이 확실하지 C,의 문자와 함수를 쓸 수 있습니까? '삽입'버튼과 같은 플래그를 설정하여 다른 문자를 덮어 쓰거나 추가하고 앞으로 모든 것을 밀 수 있습니다. – Danicco

+1

[GNU readline library] (http://www.gnu.org/s/readline) 사용을 고려하십시오. – jxh

답변

1

대신 저주에 직접 코딩의 이러한 목표를 달성하기 위해 GNU readline library를 사용할 수 있습니다. 다음은 간단한 프로그램입니다 : 내 시스템에서

#include <stdio.h> 
#include <readline/readline.h> 
#include <readline/history.h> 

int main() { 
    char *s = readline("Type something: "); 
    printf("You typed: %s\n", s); 
    return 0; 
} 

, 나는 gcc prog.c -lreadline -ltermcap

+0

내가 뭘 원하는지 정확하게 보입니다. 고마워요. – JohnF

+1

@JohnF : 대단히 환영합니다. 'readline()'에 의해 반환 된 문자열은'free()'로 해제해야한다는 것을 기억하십시오. – jxh

+0

추가 조사에서 curses와 readline이 호환되지 않는 것처럼 보입니다. – JohnF

관련 문제