GNU Readline

مكتبة GNU Readline هي مكتبة برمجية توفر إمكانيات التحرير المباشر وسجل الأوامر للبرامج التفاعلية ذات واجهة سطر الأوامر ، مثل Bash . ويتولى تشيت رامي صيانتها حاليًا كجزء من مشروع GNU .

يُمكّن هذا البرنامج المستخدمين من تحريك مؤشر الكتابة ، والبحث في سجل الأوامر ، والتحكم في حلقة الحذف (وهي نسخة أكثر مرونة من الحافظة للنسخ واللصق)، واستخدام ميزة الإكمال التلقائي في طرفية النصوص . وباعتباره مكتبة متعددة المنصات ، يسمح برنامج readline للتطبيقات على أنظمة مختلفة بعرض سلوك تحرير أسطر متطابق.

تاريخ

تم إنشاء برنامج Readline عام 1988 على يد برايان فوكس، الموظف في مؤسسة البرمجيات الحرة ، لتنفيذ وظائف تحرير الأسطر المطلوبة من قبل معيار POSIX لواجهة سطر الأوامر الخاصة به. [ 3 ] بعد إصدار النسخة 1.05، سلّم فوكس زمام الأمور إلى تشيت رامي من جامعة كيس ويسترن، الذي تولى صيانته بالكامل منذ عام 1998. [ 3 ] [ 4 ]

أوضاع التحرير

يدعم Readline كلاً من وضعَي التحرير Emacs وvi، اللذين يحددان كيفية تفسير مدخلات لوحة المفاتيح كأوامر للمحرر. يحدد معيار POSIX وضع التحرير vi، تاركًا أوضاع التحرير الأخرى غير محددة ومتروكة لتقدير التطبيقات. [ 5 ] وقد تضمن Readline في الأصل وضع التحرير Emacs الخاص به نظرًا لتأثير وضع التحرير Emacs في Korn Shell. [ 3 ] [ 6 ] ويُعد Emacs الوضع الافتراضي. [ 7 ]

اختصارات لوحة المفاتيح في إيماكس

تم أخذ اختصارات لوحة المفاتيح لوضع التحرير في Emacs من محرر النصوص Emacs .

في بعض الأنظمة، Escيجب استخدام بدلاً من ، لأن الاختصار يتعارض مع اختصار آخر. على سبيل المثال، الضغط على + في نافذة محاكي الطرفية في Xfce لا يُحرك المؤشر كلمة واحدة للأمام، بل يُفعّل "ملف" في قائمة نافذة الطرفية، إلا إذا كان هذا الخيار مُعطّلاً في إعدادات المحاكي.AltAltAltf

  • Tab ↹ : إكمال تلقائي من موضع المؤشر.
  • Ctrl+a  : ينقل المؤشر إلى بداية السطر (مكافئ للمفتاح ).Home
  • Ctrl+b  : يُحرك المؤشر حرفًا واحدًا للخلف (ما يعادل المفتاح ).
  • Ctrl+c  : يرسل الإشارة SIGINT عبر طرفية زائفة إلى المهمة الحالية، مما يؤدي إلى إلغائها وإغلاقها. [ د ]
  • Ctrl+d
    • يرسل علامة نهاية الملف، والتي (ما لم يتم تعطيلها بواسطة خيار) تغلق نافذة الأوامر الحالية (مكافئة للأمر exit). (فقط إذا لم يكن هناك نص في السطر الحالي)
    • إذا كان هناك نص في السطر الحالي، فسيتم حذف الحرف الحالي (وهو ما يعادل المفتاح ).Delete
  • Ctrl+e  : ( نهاية ) ينقل المؤشر إلى نهاية السطر (مكافئ للمفتاح ).End
  • Ctrl+f  : يحرك المؤشر للأمام حرفًا واحدًا (ما يعادل المفتاح ).
  • Ctrl+g  : إيقاف البحث العكسي واستعادة السطر الأصلي.
  • Ctrl+h  : يحذف الحرف السابق (كما هو الحال مع مفتاح الحذف).
  • Ctrl+i  : يعادل مفتاح الجدولة.
  • Ctrl+j  : يعادل مفتاح الإدخال.
  • Ctrl+k  : يمسح محتوى السطر الموجود بعد المؤشر وينسخه إلى الحافظة .
  • Ctrl+l  : يمسح محتوى الشاشة (مكافئ للأمر clear).
  • Ctrl+n  : ( التالي ) يستدعي الأمر التالي (مكافئ للمفتاح ).
  • Ctrl+o  : ينفذ الأمر الذي تم العثور عليه من السجل، ويجلب السطر التالي بالنسبة للسطر الحالي من السجل للتعديل.
  • Ctrl+p  : ( السابق ) يستدعي الأمر السابق (مكافئ للمفتاح ).
  • Ctrl+r  : (بحث عكسي) يسترجع الأمر الأخير الذي يتضمن الأحرف المحددة. + ثانية تسترجع الأمر السابق التالي الذي يتوافق مع البحث.Ctrlr
  • Ctrl+s  : للعودة إلى الأمر الأحدث التالي في عملية البحث العكسي (احذر من تنفيذه من سطر الأوامر لأن هذا الأمر يُشغّل أيضًا ملف XOFF الخاص به). إذا قمت بتغيير إعداد XOFF، فاستخدم + للعودة.Ctrlq
  • Ctrl+t  : قم بتبديل الحرفين السابقين.
  • Ctrl+u  : يمسح محتوى السطر الموجود قبل المؤشر وينسخه إلى الحافظة .
  • Ctrl+v  : إذا كان الإدخال التالي عبارة عن تسلسل تحكم أيضًا، فاكتبه حرفيًا (على سبيل المثال * + + يكتب "^H"، وهو مسافة للخلف حرفيًا).CtrlvCtrlh
  • Ctrl+w  : يمسح الكلمة الموجودة قبل المؤشر وينسخها إلى الحافظة .
  • Ctrl+ + : يقوم بتحرير السطر الحالي في برنامج $EDITOR، أو vi إذا لم يتم تعريفه.xCtrle 
  • Ctrl+ + : اقرأ محتويات ملف inputrc، وقم بتضمين أي روابط أو تعيينات متغيرات موجودة هناك.xCtrlr 
  • Ctrl+ + : تراجع تدريجي، يتم تذكره بشكل منفصل لكل سطر.xCtrlu 
  • Ctrl++ : عرض معلومات الإصدار حول النسخة الحالية من Bash.xCtrlv 
  • Ctrl+ + : يُبدّل موضع المؤشر مع موضعه السابق. (Cx، لأن x له شكل متقاطع).xCtrlx 
  • Ctrl+y  : ( yank ) يضيف محتوى الحافظة من موضع المؤشر.
  • Ctrl+z  : يرسل الإشارة SIGTSTP إلى المهمة الحالية، مما يؤدي إلى تعليقها. لتشغيلها في الخلفية، يمكن إدخال الأمر bg. لإعادتها من الخلفية أو التعليق fg ['process name or job id']( إلى المقدمة )، يمكن استخدام الأمر.
  • Ctrl+_  : تراجع تدريجي، يتم حفظه بشكل منفصل لكل سطر.
  • Alt+b  : ( للخلف ) يحرك المؤشر كلمة واحدة للخلف.
  • Alt+c  : يحوّل الحرف الموجود أسفل المؤشر إلى حرف كبير وينتقل إلى نهاية الكلمة.
  • Alt+d  : يقطع الكلمة بعد المؤشر.
  • Alt+f  : ( للأمام ) يحرك المؤشر كلمة واحدة للأمام.
  • Alt+l  : يخفض حالة الأحرف من موضع المؤشر إلى نهاية الكلمة الحالية.
  • Alt+r  : يلغي التغييرات ويعيد السطر إلى ما كان عليه في السجل.
  • Alt+u  : يحوّل كل حرف من موضع المؤشر إلى نهاية الكلمة الحالية إلى حرف كبير.
  • Alt+.  : أدخل الوسيط الأخير للأمر السابق (الكلمة الأخيرة من إدخال السجل السابق).

رخصة

تُعرف مكتبة GNU Readline بكونها مكتبة برمجيات حرة مرخصة بموجب رخصة جنو العمومية العامة (GPL). في المقابل، تُرخص مكتبات البرمجيات الحرة في أغلب الأحيان بموجب رخصة جنو العمومية الصغرى (LGPL)، مثل مكتبة GNU C ، وGNU gettext ، و FLTK . يمكن لمطور تطبيق يختار الربط بمكتبة مرخصة بموجب LGPLv3 استخدام أي رخصة لا تقيد تعديل أجزاء المكتبة الموجودة في العمل المدمج، ولا تقيد الهندسة العكسية لتصحيح هذه التعديلات. [ 9 ] لكن الربط بمكتبة مرخصة بموجب GPLv3 مثل Readline يتطلب ترخيص التطبيق المدمج الناتج بالكامل بموجب GPLv3 عند توزيعه، وذلك امتثالاً للقسم 5 من رخصة جنو العمومية العامة. [ 10 ] [ 11 ]

اختارت مؤسسة البرمجيات الحرة (FSF) هذا الترخيص على أمل أن يشجع ذلك البرامج على التحول إلى رخصة جنو العمومية (GPL). [ 12 ] ومن الأمثلة المهمة على تطبيق غيّر ترخيصه ليتوافق مع شروط حقوق النسخ المحفوظة لـ GNU Readline ، برنامج CLISP ، وهو تطبيق للغة Common Lisp . صدر البرنامج لأول مرة عام 1987، ثم تحول إلى رخصة جنو العمومية عام 1992، [ 13 ] بعد تبادل رسائل بريد إلكتروني بين برونو هايبل، أحد مؤلفي CLISP الأصليين، وريتشارد ستالمان ، حيث جادل ستالمان [ 14 ] بأن ربط readline في CLISP يعني أن هايبل مُلزم بإعادة ترخيص CLISP بموجب رخصة جنو العمومية إذا رغب في توزيع تطبيق CLISP الذي يستخدم readline. [ 15 ]

وكان من بين الاستجابات الأخرى عدم استخدام هذا في بعض المشاريع، مما يجعل إدخال النص يستخدم برنامج تشغيل طرفية يونكس البدائي للتحرير.

مكتبات بديلة

تم إنشاء مكتبات بديلة بتراخيص أخرى بحيث يمكن استخدامها من قبل مشاريع البرامج التي ترغب في تنفيذ وظائف تحرير سطر الأوامر، ولكن يتم إصدارها بترخيص غير GPL.

  • تعتمد العديد من أنظمة BSD على مكتبة libedit المرخصة بموجب ترخيص BSD . [ 16 ] [ 17 ] كما يتيح كل من MariaDB و PHP للمستخدم اختيار الربط مع GNU Readline أو مع libedit أثناء عملية البناء. [ 18 ] [ 19 ]
  • مكتبة linenoise هي مكتبة صغيرة مكتوبة بلغة C توفر وظائف تحرير الأسطر. [ 20 ] اعتبارًا من عام 2025،يُستخدم هذا الأسلوب بشكل بارز في MongoDB و Redis . [ 21 ] [ 22 ] تم دمجه في نظام Android عام 2010، ولكن تم إيقاف دعمه منذ ذلك الحين. [ 23 ] [ 24 ]
  • هاسكيلاين هي مكتبة شبيهة بـ readline مرخصة بموجب رخصة BSD-3-Clause للغة هاسكل. كُتبت في الأساس لمترجم غلاسكو هاسكل ، [ 25 ] ولكنها متاحة أيضًا لمشاريع هاسكل الأخرى التي تحتاج إلى خدمات تحرير الأسطر. [ 26 ]
  • PSReadLine هو تطبيق readline مرخص بموجب BSD-2-Clause مكتوب بلغة C# لـ PowerShell مستوحى من bash و GNU Readline [ 27 ].

نموذج التعليمات البرمجية

الكود التالي مكتوب بلغة C ويجب ربطه بمكتبة readline عن طريق تمرير علامة -lreadline إلى المترجم:

#include <stdlib.h> #include <stdio.h> #include <readline/readline.h> #include <readline/history.h>int main () { // تهيئة readline لإكمال المسارات تلقائيًا عند الضغط على مفتاح Tab. rl_bind_key ( '\t' , rl_complete );// تفعيل سجل التاريخ باستخدام الدالة using_history ();بينما ( 1 ) { // عرض موجه الأوامر وقراءة المدخلات char * input = readline ( "prompt> " );// التحقق من نهاية الملف. إذا لم يكن هناك إدخال ، فاخرج من الحلقة .// أضف المدخلات إلى سجل readline. add_history ( input );// افعل الأشياء...// تحرير المخزن المؤقت الذي تم تخصيصه بواسطة readline free ( input ); } return 0 ; }

روابط

تتضمن لغات البرمجة غير C التي توفر روابط لغوية لـ readline ما يلي:

  • وحدة بايثون المدمجة readline؛
  • وحدة روبي المدمجة readline؛ [ 28 ]
  • Term::ReadLineوحدة الطرف الثالث (CPAN) الخاصة بـ Perl ، وتحديداً Term::ReadLine::Gnuلـ GNU ReadLine.
  • امتداد PHP. [ 29 ]

يختلف دعم بدائل خط القراءة بين هذه الروابط.

ملحوظات

  1. GPL-3.0-or-later منذ الإصدار 6.0 (2009-02-20).
  2. GPL-2.0-or-later من الإصدار 2.1 (1997-06-05) حتى الإصدار 5.2 (2006-10-11).
  3. GPL-1.0-or-later من ؟ حتى الإصدار 2.0 (1994-08-04).
  4. جزء من المحطات الطرفية الزائفة أو PTYs (لنظام Linux)، وهو ما يتضح من أدوات تكوين المحطة الطرفية مثل stty ؛ في توزيعة Linux النموذجية، تتعامل نقطة النهاية الرئيسية PTY مع الأحرف الخاصة كإشارات يتم إرسالها إلى المحطات التابعة على سبيل المثالSIGINT [ 8 ]

مراجع

  1. تشيت رامي (5 يوليو 2025). "إصدار Readline-8.3 متاح" . تم الاطلاع عليه في 5 يوليو 2025 .
  2. "readline.git - مكتبة GNU Readline" . تم الاطلاع عليه بتاريخ 7 أغسطس 2024 .
  3. 1 2 3 تارجت، سنكلير (22 أغسطس 2019). "أشياء لم تكن تعرفها عن GNU Readline" . تاريخ تو-بت . تم الاسترجاع في 29 يونيو 2026 .
  4. سارون يتبارك (3 سبتمبر 2019). "أبطال في بيئة باش" . أبطال سطر الأوامر (بودكاست). ريد هات. حدث ذلك عند الدقيقة 24:38 . تم الاطلاع عليه في 21 يناير 2026 .
  5. "sh — shell، مترجم لغة الأوامر القياسي" . مواصفات المجموعة المفتوحة الأساسية، الإصدار 8 (IEEE Std 1003.1-2024) . 2024.
  6. قارن "KSH88(1)" . 2 يوليو 2009. مؤرشف من الأصل في 5 نوفمبر 2015. تم الاطلاع عليه في 21 يناير 2026 .
  7. "مكتبة GNU Readline" . 30 ديسمبر 2024. الوضع الافتراضي لـ Readline هو وضع emacs.
  8. "pty(7) - صفحة دليل لينكس" . man7.org . تم الاطلاع عليه بتاريخ 30-09-2021 .
  9. "رخصة جنو العمومية الصغرى" . رخصة جنو العمومية الصغرى الإصدار 3.0 - مشروع جنو . مؤسسة البرمجيات الحرة. 2007. تم الاطلاع عليه بتاريخ 3 سبتمبر 2011 .
  10. "رخصة جنو العمومية العامة" . رخصة جنو العمومية العامة الإصدار 3.0 - مشروع جنو . مؤسسة البرمجيات الحرة. 2007. تم الاطلاع بتاريخ 3 سبتمبر 2011 .
  11. "الأسئلة الشائعة حول تراخيص جنو" . الأسئلة الشائعة حول تراخيص جنو - مشروع جنو . مؤسسة البرمجيات الحرة. 2010. تاريخ الاسترجاع: 3 سبتمبر 2011 .
  12. "لماذا لا ينبغي عليك استخدام رخصة جنو العمومية الصغرى لمكتبتك القادمة" . لماذا لا ينبغي عليك استخدام رخصة جنو العمومية الصغرى لمكتبتك القادمة - مشروع جنو - مؤسسة البرمجيات الحرة . مؤسسة البرمجيات الحرة. 2016. تم الاطلاع عليه بتاريخ 15 أكتوبر 2019 .
  13. "إشعار حقوق الطبع والنشر لـ CLISP" . مستودع CLISP. 1992. تم الاسترجاع في 2011-09-03 .
  14. "لماذا تخضع لغة CLISP لرخصة GPL؟" . مستودع CLISP. 1992. تم الاطلاع عليه بتاريخ 19 يناير 2023 .
  15. "الترخيص - لماذا رخصة جنو العمومية العامة؟" . الأسئلة الشائعة (مع الإجابات) حول لغة CLISP . فريق CLISP . تم الاطلاع بتاريخ 3 سبتمبر 2011 .
  16. "editline(3) - صفحات دليل NetBSD" . NetBSD . تم الاسترجاع في 13 سبتمبر 2022. مكتبة محرر سطر الأوامر (libedit, -ledit)
  17. مكتبة Editline (libedit)
  18. "MariaDB/server/blob/10.2/BUILD/SETUP.sh" . مستودع MariaDB . مؤسسة MariaDB . تم الاسترجاع بتاريخ 24-10-2017 .
  19. "php/php-src/tree/master/ext/readline" . مستودع PHP . مجموعة PHP . تم الاسترجاع في 24-10-2017 .
  20. ^ سانفيليبو ، سلفاتوري (10 مايو 2020). "antirez/linenoise" . جيثب .
  21. "قاعدة بيانات MongoDB" . GitHub . تم الاطلاع عليه بتاريخ 23 مارس 2025 .
  22. "Redis" . GitHub . تم الاطلاع عليه بتاريخ 23 مارس 2025 .
  23. "نظام أندرويد الأساسي" . جوجل جيت . 25 مايو 2010.
  24. "واجهة المستخدم وأدواتها لنظام أندرويد" . جوجل جيت .
  25. "التطبيقات والمكتبات" . ويكي هاسكل . haskell.org . تم الاطلاع عليه بتاريخ 24-10-2017 .
  26. يهودا جاكوبسون. "judah/haskeline: مكتبة هاسكل لإدخال البيانات عبر سطر الأوامر في برامج سطر الأوامر" . مستودع هاسكلين . تم الاطلاع عليه بتاريخ 24 أكتوبر 2017 .
  27. "PowerShell/PSReadLine: تطبيق readline مستوحى من bash لـ PowerShell" . مستودع PSReadLine . تم الاطلاع عليه بتاريخ 20 ديسمبر 2023 .
  28. "الوحدة: Readline (Ruby 3.2)" .
  29. "PHP: Readline - Manual" . www.php.net . تم الاطلاع عليه بتاريخ 30 أبريل 2025 .