ewig ist ein einfacher Texteditor (ein Ersatz-Emacs), der mit unveränderlichen Datenstrukturen in C++ geschrieben wurde.
Der Code ist in einem einfachen Stil geschrieben, um eine wertbasierte Funktionsarchitektur darzustellen. Wir laden Sie ein, den Code zu studieren. Erfahren Sie mehr im CppCon'17-Vortrag : Postmoderne unveränderliche Datenstrukturen .
Dieses Projekt ist Teil einer langfristigen Vision, die das Schreiben interaktiver und gleichzeitiger C++-Programme erleichtert. Unterstützen Sie die langfristige Nachhaltigkeit dieses Projekts, indem Sie Förderer werden oder ein Sponsorenpaket kaufen: [email protected]
Wenn Sie den Nix-Paketmanager verwenden (wir empfehlen ihn dringend), können Sie die Software einfach mit installieren.
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
Um den Code zu erstellen, benötigen Sie einen C++17-Compiler, cmake
und ncurses
mit Unicode-Unterstützung (Paket libncursesw5-dev
in Debian und Freunden).
Sie können diese manuell installieren, aber der einfachste Weg, eine Entwicklungsumgebung zum Laufen zu bringen, ist die Verwendung des Nix-Paketmanagers. Geben Sie im Stammverzeichnis des Repositorys einfach Folgendes ein:
nix-shell
Dadurch werden alle erforderlichen Abhängigkeiten heruntergeladen und eine isolierte Umgebung erstellt, in der Sie diese Abhängigkeiten verwenden können, ohne Ihr System zu verschmutzen.
Anschließend können Sie mit CMake ein Entwicklungsprojekt generieren .
mkdir build && cd build
cmake ..
Um einen optimierten Build und eine optimierte Kompilierung zu konfigurieren, gehen Sie wie folgt vor:
cmake .. -DCMAKE_BUILD_TYPE=Release
make
So installieren Sie die kompilierte Software global:
sudo make install
Auszug aus 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 " },
});
Diese Software ist unter der GPLv3-Lizenz lizenziert.
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/>.