ewig هو محرر نصوص بسيط (Ersatz Emacs) مكتوب باستخدام هياكل بيانات غير قابلة للتغيير في C++.
تمت كتابة الكود بأسلوب بسيط لعرض البنية الوظيفية القائمة على القيمة. نحن ندعوك لدراسة الكود. تعرف على المزيد في محادثة CppCon'17 : هياكل البيانات غير القابلة للتغيير ما بعد الحداثة .
يعد هذا المشروع جزءًا من رؤية طويلة المدى لمساعدة برامج C++ التفاعلية والمتزامنة على أن تصبح أسهل في الكتابة. ساعد على استدامة هذا المشروع على المدى الطويل من خلال أن تصبح راعيًا أو شراء حزمة رعاية: [email protected]
إذا كنت تستخدم مدير حزم Nix (نوصي به بشدة)، فيمكنك فقط تثبيت البرنامج باستخدامه.
nix-env -if https://github.com/arximboldi/ewig/archive/master.tar.gz
لإنشاء التعليمات البرمجية، تحتاج إلى مترجم C++ 17 و cmake
و ncurses
مع دعم unicode (الحزمة 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/>.