ewig — простой текстовый редактор (эрзац Emacs), написанный с использованием неизменяемых структур данных на C++.
Код написан в простом стиле, чтобы продемонстрировать функциональную архитектуру, основанную на значениях. Приглашаем вас изучить код. Узнайте больше в докладе CppCon'17 : Постмодернистские неизменяемые структуры данных .
Этот проект является частью долгосрочной концепции, помогающей упростить написание интерактивных и параллельных программ на C++. Помогите этому проекту в долгосрочной перспективе, став покровителем или купив спонсорский пакет: [email protected]
Если вы используете менеджер пакетов Nix (мы настоятельно рекомендуем его), вы можете просто установить программное обеспечение с помощью него.
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
Для сборки кода вам понадобится компилятор C++17, cmake
и ncurses
с поддержкой Unicode (пакет libncursesw5-dev
в Debian и его друзьях).
Вы можете установить их вручную, но самый простой способ запустить среду разработки — использовать менеджер пакетов Nix. В корне репозитория просто введите:
nix-shell
Это загрузит все необходимые зависимости и создаст изолированную среду, в которой вы сможете использовать эти зависимости, не загрязняя вашу систему.
Затем вы можете создать проект разработки с помощью CMake.
mkdir build && cd build
cmake ..
Чтобы настроить оптимизированную сборку и компиляцию, выполните:
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Чтобы установить скомпилированное программное обеспечение глобально:
sudo make install
Выдержка из main.cpp
:
const auto key_map_emacs = make_key_map(
{
{ key::seq ( key::ctrl ( ' p ' )), " move-up " },
{ key::seq (key::up), " move-up " },
{ key::seq (key::down), " move-down " },
{ key::seq ( key::ctrl ( ' n ' )), " move-down " },
{ key::seq ( key::ctrl ( ' b ' )), " move-left " },
{ key::seq (key::left), " move-left " },
{ key::seq ( key::ctrl ( ' f ' )), " move-right " },
{ key::seq (key::right), " move-right " },
{ key::seq (key::page_down), " page-down " },
{ key::seq (key::page_up), " page-up " },
{ key::seq (key::backspace), " delete-char " },
{ key::seq (key::backspace_), " delete-char " },
{ key::seq (key::delete_), " delete-char-right " },
{ key::seq (key::home), " move-beginning-of-line " },
{ key::seq ( key::ctrl ( ' a ' )), " move-beginning-of-line " },
{ key::seq (key::end), " move-end-of-line " },
{ key::seq ( key::ctrl ( ' e ' )), " move-end-of-line " },
{ key::seq ( key::ctrl ( ' i ' )), " insert-tab " }, // tab
{ key::seq ( key::ctrl ( ' j ' )), " new-line " }, // enter
{ key::seq ( key::ctrl ( ' k ' )), " kill-line " },
{ key::seq ( key::ctrl ( ' w ' )), " cut " },
{ key::seq ( key::ctrl ( ' y ' )), " paste " },
{ key::seq ( key::ctrl ( ' @ ' )), " start-selection " }, // ctrl-space
{ key::seq ( key::ctrl ( ' _ ' )), " undo " },
{ key::seq ( key::ctrl ( ' x ' ), key::ctrl ( ' C ' )), " quit " },
{ key::seq ( key::ctrl ( ' x ' ), key::ctrl ( ' S ' )), " save " },
{ key::seq ( key::ctrl ( ' x ' ), ' h ' ), " select-whole-buffer " },
{ key::seq ( key::ctrl ( ' x ' ), ' [ ' ), " move-beginning-buffer " },
{ key::seq ( key::ctrl ( ' x ' ), ' ] ' ), " move-end-buffer " },
{ key::seq ( key::alt ( ' w ' )), " copy " },
});
Это программное обеспечение распространяется по лицензии GPLv3.
Copyright (C) 2016 Juan Pedro Bolivar Puente
This file is part of ewig.
ewig is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ewig is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ewig. If not, see <http://www.gnu.org/licenses/>.