ewig é um editor de texto simples (um Ersatz Emacs) escrito usando estruturas de dados imutáveis em C++.
O código é escrito em um estilo simples para mostrar uma arquitetura funcional baseada em valor. Convidamos você a estudar o código. Saiba mais na palestra CppCon'17 : Estruturas de dados imutáveis pós-modernas .
Este projeto faz parte de uma visão de longo prazo que ajuda programas C++ interativos e simultâneos a se tornarem mais fáceis de escrever. Ajude a sustentabilidade a longo prazo deste projeto tornando-se um patrocinador ou comprando um pacote de patrocínio: [email protected]
Se você estiver usando o gerenciador de pacotes Nix (recomendamos fortemente), você pode simplesmente instalar o software com.
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
Para construir o código você precisa de um compilador C++ 17, cmake
e ncurses
com suporte unicode (pacote libncursesw5-dev
no Debian e amigos).
Você pode instalá-los manualmente, mas a maneira mais fácil de colocar um ambiente de desenvolvimento em funcionamento é usando o gerenciador de pacotes Nix. Na raiz do repositório basta digitar:
nix-shell
Isso fará o download de todas as dependências necessárias e criará um ambiente isolado no qual você poderá usar essas dependências, sem poluir seu sistema.
Então você pode gerar um projeto de desenvolvimento usando CMake.
mkdir build && cd build
cmake ..
Para configurar uma construção e compilação otimizadas, faça:
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Para instalar o software compilado globalmente:
sudo make install
Trecho de 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 " },
});
Este software está licenciado sob a licença 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/>.