콘솔에서 움직이는 에디터를 만든다(15일째) v0.0.1 완성!

4139 단어 C터미널에디터
이 논문은 자작 편집기 만들기 Advent Calendar 2016의 15 일째이며 저장소는 여기

ver0.0.1을 만들거야!



단체 테스트·ncurses 대응·제어 문자와 문자 코드 대응·커서의 사양의 미묘함···.

하고 싶은 것은 여러가지 있습니다만, 로망의 하나인 「자작 에디터를 사용해 에디터를 만드는」곳을 오늘은 목표로 합니다.

그렇다면 우선 ver0.0.1이라고 합니다(๑•̀ㅁ•́๑)✧

파일 덮어쓰기 저장



키 바인드는 고민하고 있습니다만(13일째 참고), 일단 Ctrl + S (0x13)를 덮어쓰기 보존으로 합니다.

항상 그렇듯이, 우선은 내부 DSL의 구조체의 정의에서 만들어 갑니다.

여기도 enum이라고는 해도 혼돈의 기색이 태어나고 있습니다. 십자키가 예상보다 힘든 녀석이었지요.

일단 눈을 흔들면서 내부 DSL을 이어 더해, 2일째의 파일 로드 부분을 참고로 기입도 만들어 갑니다.

읽을 때는 멀티바이트 문자로 고생했습니다만, 쓸 때는 문자 코드를 신경쓰지 않고 1바이트씩 써 가면 좋기 때문에 편합니다.

write.c
while(current_text)
{
  current_line = current_text->line;
  while(current_line)
  {
    i = 0;
    while(i < current_line->byte_count)
    {
      fputc(current_line->string[i], fp);
      i++;
    }
    current_line = current_line->next;
  }
  current_text = current_text->next;
}

뭔가, 담백하게 쓸 수 있었습니다!

본문을 진지하게 표시



지금까지, 에디터라든가 괄호 붙인 것을 말해도 다기능인 printf로 밖에 없었으므로,
화면에 맞지 않는 텍스트가 긴 파일을 열면 곤란해집니다.
그래서 커서를 중심으로 화면에 들어가도록 본문을 표시하도록 합니다.
헤더 부분(화면 상단)에 파일명을 표시하고 있습니다만,
본문을 어디까지 썼는지 알기 쉽도록, 화면의 하단에도 헤더와 같은 것을 내보내면서 진행했습니다.
꼬리말이라고 부릅니다.

커서가 화면 하단에서 튀어 나오면 표시 시작 행을 더해 가고, 상단에서 나온 경우는 표시 개시 행을 줄이도록 했습니다.

어쩐지 화면이 깜박입니다만, 일일이 표시할 수 있게 되었습니다.

문자열의 너비를 상당한 빈도로 재계산하기 때문에 깜박일지도 모릅니다.

모처럼이므로 바닥글에 뭔가 표시


getcwd를 사용하여 파일 경로를 표시하려고했습니다.

어쨌든 그것 같은 느낌이 듭니다.

빈 줄에서도 커서 표시



조금 ad hoc 수정이지만 커서 위치가 빈 줄일 때 커서 색상이있는 공백 문자를 인쇄하여
커서를 빈 줄에서도 볼 수 있도록 했습니다.

linux로 빌드 해보세요.



어쨌든 AWS Linux에서 빌드 해 보았습니다.‘for’ loop initial declarations are only allowed in C99 mode아무래도 for(int i = 0; i < bytes; i++) 가 있으면 gcc에서는 컴파일이 순조롭게 통과하지 않는 것 같습니다.
그 후 움직여 보았습니다만, ssh상에서는 보통으로 움직였습니다.
빌드와 콘솔은 Linux이지만 터미널 에뮬레이터는 Mac이기 때문일 수 있습니다 (아마)

readme를 조금 친절하게 만들기



아직 사용하는 사람이 없다고 생각합니다만, 일종의 빌드 방법을 써 둡니다.

ver0.0.1 완성!



이제 자작 편집기를 사용하여 편집기를 만들 수 있습니다 ٩(๑❛ᴗ❛๑)۶

어쨌든 github issue를 on으로 설정하고 git tag를 쳤습니다.
25일까지 할 수 있는 것들을 정리하고 싶습니다.

오늘 요약


  • 파일 덮어 쓰기 저장
  • 본문 표시
  • ver0.0.1 할 수 있었어-!

  • 솔직히, 이 근처의 완성도로 25일째를 맞이하는 것 같은 생각이 들었습니다.

    꽤 움직이고 감동이 있네요! 화면이 깜박이지만, 그것은!

    좋은 웹페이지 즐겨찾기