Привет, Хабр! Представляю вашему вниманию перевод статьи "Build Your Own Text Editor" автора Джереми Рутена.


Свой текстовый редактор!


Привет! Это вольный перевод о том, как написать свой никому не нужный текстовый редактор на C.



Итак, что сможет делать наш редактор?


  • Базовые функции редактора (писать, стирать, перемещать «каретку» и т.д.)
  • Искать по ключевому слову
  • Подсвечивать синтаксис

Еще чуть-чуть о реализации редактора:


  • Реализация редактора состоит из чуть больше, чем 1000 строк и одного файла
  • Не имеет зависимостей (кроме, конечно же, системных)

Всего туториал состоит из 184 шагов. Каждый шаг вы будете добавлять, изменять или удалять разные строки кода. На большинстве шагов вы сможете наблюдать за внесенными изменениями просто скомпилировав и запустив программу.


Я попробую объяснить каждый шаг на этом пути, иногда очень подробно. Не бойтесь пропускать теорию, потому что суть в самом написании кода и то, что вы вообще решились на это! Всё, что вы узнаете в процессе — это бонус, будет чему научится просто вводя изменения в код и наблюдая за результатами.


Настройки


Первый шаг, новый файл и всё всё всё с чистого листа…
Для начала убедитесь в том, что ваша среда корректно настроена для вашего ЯП (в нашем случае — для C), а так же вы хотя бы примерно понимаете, как компилировать и запускать вашу программу в этой среде.


К нашему счастью, редактор, который мы напишем не зависит от каких-либо внешних библиотек. Единственное, что нам понадобится, так это компилятор и стандартная библиотека языка C, с которой он и поставляется. Мы так же будем использовать make-скрипт для упрощения команд компиляции. Удостоверьтесь, что у вас есть как и компилятор для C, так и make.


Компилятор языка C


Так как C компилируемый язык, нам нужен, как не странно, компилятор, если у вас его нет, его обязательно нужно установить, как и make. Например, в Ubuntu, это можно сделать так:


sudo apt-get install gcc make

Функция main()


Итак, вот, с чего начинается наш путь! Создайте файл kilo.c и напишите в нем базовую main() функцию.


Шаг 1

int main() {
    return 0;
}

Для компиляции этого файла, достаточно ввести cc kilo.c -o kilo в ваш терминал. Если ошибок не последовало, в текущей директории появится исполняемый файл kilo. Что бы запустить программу, введите ./kilo. К сожалению, пока наша программа ничего не умеет, поэтому ничего нам не напечатает.


(не обязательно, что бы ваш редактор назывался так же, как и в статье, вы вполне можете назвать свой редактор "uber_mega_super_redaktor1337" другим эстетичным названием)


Упрощение компилирования с make


Каждый раз печатать что то вроде cc kilo.c -o kilo надоедает, поэтому мы и напишем make скрипт.


Создайте новый Makefile с подобным содержимым:


Шаг 2

kilo: kilo.c
    $(CC) kilo.c -o kilo -Wall -Wextra -pedantic -std=c99

Первая линия Makefile-а говорит нам о том, что мы хотим скомпилировать и то, что нам для этого потребуется. Вторая линия определяет команду, которую будет выполнять make скрипт. $(CC) обычно ссылается на команду cc.


Что это за магические слова появились?
Это флаги, а именно:


  1. -Wall — от английского "all Warnings", что говорит компилятору выводить почти все предупреждения, если ему что то не очень нравится.
  2. -Wextra и -pedantic просит компилятор выводить еще больше предупреждений, если такие имеются.
  3. -std=c99 показывает компилятору, какую версию стандарта языка C ему использовать при компилировании. Стандарт C99 немного упростит нам процесс написания кода.

Теперь, когда Makefile настроен, попробуйте написать команду make в ваш терминал для компиляции программы. Запустить её можно так же, как и всегда, ./kilo.


Продолжение следует...

Комментарии (11)


  1. dlinyj
    01.12.2023 15:55
    +9

    Блин, классная статья имеется в виду оригинал. Только перевод стоит оформлять как перевод, а не как самостоятельную статью. И переводить больший объём за раз, а то три тысячи символов, это всего в два раза больше чем вступление до ката, имейте совесть.

    Там самое интересное начинается в конфигурировании терминала в неканонический режим.


  1. hello_my_name_is_dany
    01.12.2023 15:55
    +4

    Даже для первой части маловато, взяли бы сразу и вторую часть из оригинала


    1. kovserg
      01.12.2023 15:55
      +7

      Всего туториал состоит из 184 шагов

      Так что будет 184 серии.


      1. Vitimbo
        01.12.2023 15:55
        +7

        Экипаж бройлера-747 терпит крушение в течении 325 серий Кто же отважится пройти этот путь?


        1. shenmue
          01.12.2023 15:55
          +1

          Есть финальная серия которая очень удивит зрителя =)


        1. radioxoma
          01.12.2023 15:55
          +1

          Судя по текущей карме автора и рейтингу статьи, крушение уже состоялось.


          1. SIISII
            01.12.2023 15:55

            А Вы обратили внимание, по приглашению кого он сюда попал? :)


            1. radioxoma
              01.12.2023 15:55
              +1

              Нет. Но после Вашего комментария посмотрел дату рождения пригласившего.


              1. SIISII
                01.12.2023 15:55

                Вы б ещё его опусы посмотрели, а заодно их количество :) Вообще, у меня появилась мысля, что он просто запрягает нейросетку на генерацию "сочинения по теме", а потом минимально правит результат. Иначе трудно объяснить и объём его графомании, и наличие грубых ошибок по соседству с совершенно правильной информацией о том же самом, ну и всё такое...


  1. unclegluk
    01.12.2023 15:55

    В первой серии нет интриги. Какая-то скучная Санта-барбара получается. Смотреть дальше нет смысла.


  1. iminfinitylol
    01.12.2023 15:55

    почему первая программа любого начинающего десктопного девелопера это блокнот, потом браузер на базе иэ а потом плеер на базе каких нибудь влс библиотек? лол