ewig は、 C++ の不変データ構造を使用して書かれた単純なテキスト エディター (Ersatz Emacs) です。
コードは、値ベースの機能アーキテクチャを示すためにシンプルなスタイルで記述されています。ぜひコードを勉強してください。詳細については、 CppCon'17 トーク:ポストモダンの不変データ構造をご覧ください。
このプロジェクトは、対話型および同時実行の C++ プログラムの作成を容易にする長期ビジョンの一部です。パトロンになるか、スポンサーシップ パッケージを購入して、このプロジェクトの長期的な持続可能性を支援してください: [email protected]
Nix パッケージ マネージャー (強くお勧めします) を使用している場合は、そのままソフトウェアをインストールできます。
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
コードをビルドするには、C++17 コンパイラ、 cmake
、および Unicode をサポートするncurses
(Debian およびその仲間のパッケージlibncursesw5-dev
) が必要です。
これらを手動でインストールすることもできますが、開発環境を立ち上げて実行する最も簡単な方法は、Nix パッケージ マネージャーを使用することです。リポジトリのルートで次のように入力するだけです。
nix-shell
これにより、必要な依存関係がすべてダウンロードされ、システムを汚染することなくこれらの依存関係を使用できる分離された環境が作成されます。
その後、CMake を使用して開発プロジェクトを生成できます。
mkdir build && cd build
cmake ..
最適化されたビルドとコンパイルを構成するには、次の手順を実行します。
cmake .. -DCMAKE_BUILD_TYPE=Release
make
コンパイルされたソフトウェアをグローバルにインストールするには:
sudo make install
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 " },
});
このソフトウェアは 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/>.