ewig เป็นโปรแกรมแก้ไขข้อความธรรมดา (Ersatz Emacs) ที่เขียนโดยใช้โครงสร้างข้อมูลที่ไม่เปลี่ยนรูปในภาษา C++
โค้ดถูกเขียนในรูปแบบเรียบง่ายเพื่อแสดงสถาปัตยกรรมการทำงานตามมูลค่า เราขอเชิญคุณศึกษารหัส เรียนรู้เพิ่มเติมใน CppCon'17 Talk : โครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบหลังสมัยใหม่
โปรเจ็กต์นี้เป็นส่วนหนึ่งของวิสัยทัศน์ระยะยาวที่ช่วยให้โปรแกรม C++ แบบโต้ตอบและทำงานพร้อมกันกลายเป็นเรื่องง่ายในการเขียน ช่วยความยั่งยืนในระยะยาวของโครงการนี้ด้วยการเป็นผู้อุปถัมภ์หรือซื้อแพ็คเกจการสนับสนุน: [email protected]
หากคุณใช้ตัวจัดการแพ็คเกจ Nix (เราขอแนะนำอย่างยิ่ง) คุณสามารถติดตั้งซอฟต์แวร์ได้
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
ในการสร้างโค้ดคุณต้องมีคอมไพเลอร์ C++17, cmake
และ ncurses
พร้อมการสนับสนุน Unicode (แพ็คเกจ libncursesw5-dev
ใน Debian และเพื่อนๆ)
คุณสามารถติดตั้งสิ่งเหล่านี้ได้ด้วยตนเอง แต่วิธีที่ง่ายที่สุดในการทำให้สภาพแวดล้อมการพัฒนาและทำงานคือการใช้ตัวจัดการแพ็คเกจ 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/>.