Linenoise: جعل السيطرة على اليسار واليمين

تم إنشاؤها على ٢٤ نوفمبر ٢٠١٦  ·  8تعليقات  ·  مصدر: antirez/linenoise

تعد اختصارات لوحة المفاتيح هذه مفيدة للغاية عند التنقل في سطر موجود بالفعل بسرعة. هل هناك أي سبب لعدم تنفيذها؟

ال 8 كومينتر

ج: هذا ليس أمر حركة نموذجي في POSIX / UNIX. Linenoise هو 100٪ POSIX.

ومع ذلك ، سيكون من السهل إضافة هذا إلى نسختك الخاصة من linenoise. يقوم الكثير من الأشخاص الذين يستخدمون لينويز باختراقه لسبب أو لآخر. من السهل جدًا فهمها وتعديلها.

فيما يلي مخطط يقارن استخدام مفتاح التحكم في Win / Unix / Emacs: https://en.wikipedia.org/wiki/Control_key


ما يجب القيام به؟

ستجد في السطر 41 في linenoise.c مناقشة حول كيفية التحكم في المؤشر.

ستجد على الخط رقم 768
static int linenoiseEdit (int stdin_fd، int stdout_fd، char * buf، size_t buflen، const char * الفوري)

إذا كنت تريد تغيير وظيفة التحرير ، فسيكون هنا في هذه الوظيفة.

تذكر أيضًا أنه يجب تشغيل التحرير متعدد الأسطر باستخدام استدعاء واجهة برمجة التطبيقات:

لينوايز سيت مولتي لاين (1) ؛

أتمنى أن يساعدك هذا وعيد شكر سعيد! (لا يهم أين أنت :-)

هل هذا يشير إلى نفس فكرة # 64 و # 92 أم شيء آخر؟

لا أعتقد أن linenoise يقيد نفسه بميزات تحرير الأسطر المحددة بواسطة POSIX (ولم أتمكن حتى من العثور على مصدر لتسلسلات الهروب المحددة التي يحددها POSIX ، على الرغم من أنني وجدت الكثير من المعلومات حول vi / emacs / readline back-word و تسلسل كلمة إلى الأمام). قد تفكر في حقيقة أن linenoise يعتمد على بيئة POSIX ، لكن هذا يعني فقط أنه يجب أن يبتعد عن المكالمات الخاصة بنظام التشغيل.

ربما لم أكن واضحًا - أدرك أن control + left لا يتوافق مع حرف التحكم (بالطريقة التي يتوافق بها ctrl + a مع \ 01 ، وما إلى ذلك). تنتج الكثير من المحاكيات الطرفية تسلسل هروب مختلفًا لهذا ، على الرغم من (مثل \033[1;5D أو \033f ) ، والتي تلتزم بها بعض مكتبات تحرير الأسطر افتراضيًا للتنقل للأمام / للخلف بكلمة. على الأقل ، أفترض أن هذا ما تقترحه هذه المشكلة.

إذا وجدت شيئًا يسرد تسلسل تحرير السطر الذي (لا) يحدده POSIX ، أو شيئًا ما ينص على أن Linenoise لن ينفذ أيًا منها ليس جزءًا من معيار POSIX ، فيرجى إبلاغي بذلك ، مثل لم أتمكن من العثور عليه.

تحرير: إذا كنت تشير إلى الجدول الذي ربطته أعلاه ، على الرغم من أن هذا لا يشير إلى POSIX ، أعتقد أنني أرى وجهة نظرك. أنا لا أجادل لصالح ctrl + left / right على وجه التحديد ، لكنني لا أعتقد أن بعض التسلسل فكرة سيئة. أيضًا ، هذه ليست قائمة كاملة بمجموعات المفاتيح أو روابط القراءة - أعتقد أن readline يربط esc-b / f (وربما تسلسلات هروب أخرى أطول) للعودة / إعادة الكلمة افتراضيًا ، والتي لم يتم سردها هناك.

أعتقد أن الميزة التي يريدها JelteF تتضمن توسيع مقابض تسلسل هروب الإدخال ( هنا ، على سبيل المثال ، التسلسلات التي تم إنشاؤها عن طريق الضغط على مفاتيح الأسهم أو الحذف) ، وأنت تشير إلى تسلسلات هروب الإخراج (على سبيل المثال ، التسلسلات المرسلة إلى الإخراج لتحريك المؤشر فعليًا) . أنا أوافق على أن التعامل مع termcap هو خارج نطاق لينويز ، وأنا أقدر حقيقة أن لينويز يتم تنفيذه بأوامر قليلة كما هي.

ربما يمكن لـJelteF توضيح ما يطلبه طلب الميزة هذا بالضبط. اعتقدت أن الأمر يتعلق بمعالجة تسلسلين إضافيين في linenoiseEdit () ، لكن قد أكون مخطئًا.

فقط لمعلوماتك ، إذا كان الأمر يتعلق بتحريك كلمة واحدة إلى اليسار / اليمين عند الضغط على ctrl-left أو ctrl-right (مع تسلسل الهروب الطويل المقابل \033[5;D و C على التوالي ، لدي تصحيح لذلك في روابط OCaml: https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@ c-cube صحيح أن ثا ما قصدته. آسف لعدم الرد في وقت سابق.

هاها ، لقد مر عام ونصف فقط ، وهذا لا شيء في وقت الإنترنت. وهناك حق في linenoiseEdit () أيضًا. شكرا @ c-cube: +1:

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

krux02 picture krux02  ·  8تعليقات

ghost picture ghost  ·  4تعليقات

fatcerberus picture fatcerberus  ·  5تعليقات

ozancaglayan picture ozancaglayan  ·  21تعليقات

denisvm picture denisvm  ·  9تعليقات