ewig adalah editor teks sederhana (Ersatz Emacs) yang ditulis menggunakan struktur data yang tidak dapat diubah di C++.
Kode ini ditulis dalam gaya sederhana untuk menampilkan arsitektur fungsional berbasis nilai. Kami mengundang Anda untuk mempelajari kodenya. Pelajari lebih lanjut dalam Pembicaraan CppCon'17 : Struktur Data Postmodern yang Tidak Dapat Diubah .
Proyek ini adalah bagian dari visi jangka panjang yang membantu program C++ yang interaktif dan bersamaan menjadi lebih mudah untuk ditulis. Bantu keberlanjutan jangka panjang proyek ini dengan menjadi patron atau membeli paket sponsorship: [email protected]
Jika Anda menggunakan manajer paket Nix (kami sangat menyarankannya), Anda cukup menginstal perangkat lunak tersebut.
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
Untuk membangun kode, Anda memerlukan kompiler C++17, cmake
, dan ncurses
dengan dukungan unicode (paket libncursesw5-dev
di Debian dan teman-teman).
Anda dapat menginstalnya secara manual, namun cara termudah untuk mengaktifkan dan menjalankan lingkungan pengembangan adalah dengan menggunakan manajer paket Nix. Di root repositori cukup ketik:
nix-shell
Ini akan mengunduh semua dependensi yang diperlukan dan menciptakan lingkungan terisolasi di mana Anda dapat menggunakan dependensi ini, tanpa mencemari sistem Anda.
Kemudian Anda dapat membuat proyek pengembangan menggunakan CMake.
mkdir build && cd build
cmake ..
Untuk mengonfigurasi build dan kompilasi yang dioptimalkan, lakukan:
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Untuk menginstal perangkat lunak yang dikompilasi secara global:
sudo make install
Kutipan dari 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 " },
});
Perangkat lunak ini dilisensikan di bawah lisensi 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/>.