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
및 유니코드를 지원하는 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/>.