ewig es un editor de texto simple (un Ersatz Emacs) escrito utilizando estructuras de datos inmutables en C++.
El código está escrito en un estilo simple para mostrar una arquitectura funcional basada en valores. Te invitamos a estudiar el código. Obtenga más información en la charla CppCon'17 : Estructuras de datos inmutables posmodernas .
Este proyecto es parte de una visión a largo plazo que ayuda a que los programas C++ interactivos y concurrentes sean más fáciles de escribir. Ayude a la sostenibilidad a largo plazo de este proyecto convirtiéndose en patrocinador o comprando un paquete de patrocinio: [email protected]
Si está utilizando el administrador de paquetes Nix (lo recomendamos encarecidamente), puede instalar el software con.
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
Para compilar el código necesita un compilador C++17, cmake
y ncurses
con soporte Unicode (paquete libncursesw5-dev
en Debian y amigos).
Puede instalarlos manualmente, pero la forma más sencilla de poner en funcionamiento un entorno de desarrollo es mediante el administrador de paquetes Nix. En la raíz del repositorio simplemente escriba:
nix-shell
Esto descargará todas las dependencias necesarias y creará un entorno aislado en el que podrá utilizar estas dependencias, sin contaminar su sistema.
Luego puedes generar un proyecto de desarrollo usando CMake.
mkdir build && cd build
cmake ..
Para configurar una compilación y compilación optimizadas, haga lo siguiente:
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Para instalar el software compilado globalmente:
sudo make install
Extracto 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 tiene la licencia 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/>.