ewig est un simple éditeur de texte (un Ersatz Emacs) écrit en utilisant des structures de données immuables en C++.
Le code est écrit dans un style simple pour présenter une architecture fonctionnelle basée sur des valeurs. Nous vous invitons à étudier le code. Apprenez-en davantage dans la conférence CppCon'17 : Structures de données immuables postmodernes .
Ce projet fait partie d'une vision à long terme aidant les programmes C++ interactifs et simultanés à devenir plus faciles à écrire. Aidez la durabilité à long terme de ce projet en devenant mécène ou en achetant un forfait de parrainage : [email protected]
Si vous utilisez le gestionnaire de packages Nix (nous le recommandons fortement), vous pouvez simplement installer le logiciel avec.
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
Pour créer le code, vous avez besoin d'un compilateur C++17, cmake
et ncurses
avec prise en charge Unicode (paquet libncursesw5-dev
dans Debian et amis).
Vous pouvez les installer manuellement, mais le moyen le plus simple de mettre en place un environnement de développement consiste à utiliser le gestionnaire de packages Nix. A la racine du dépôt tapez simplement :
nix-shell
Cela téléchargera toutes les dépendances requises et créera un environnement isolé dans lequel vous pourrez utiliser ces dépendances, sans polluer votre système.
Ensuite, vous pouvez générer un projet de développement à l'aide de CMake.
mkdir build && cd build
cmake ..
Pour configurer une construction et une compilation optimisées, faites :
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Pour installer le logiciel compilé globalement :
sudo make install
Extrait 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 " },
});
Ce logiciel est sous licence 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/>.