الوحدة TTY في Node.js

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

مؤشر الاستقرار: 2 - مستقر

توفر وحدة tty الصنفين tty.ReadStream و tty.WriteStream. في معظم الحالات، لن يكون من الضروري أو من الممكن استخدام هذه الوحدة مباشرةً. ومع ذلك، فإنه يمكن الوصول إليها باستخدام:

const tty = require('tty');

عندما تكتشف Node.js أنها تعمل من الطرفية النصية ("TTY") المرفقة، ستُعاد تهيئة process.stdin، بشكل افتراضي، كمثيل من tty.ReadStream ويصبح كل من عملية process.stdout و process.stderr مثيلَين على tty.WriteStream بشكل افتراضي. ويصبح التحقق من أن قيمة الخاصية process.stdout.isTTY هي true هو الطريقة المفضلة لتحديد ما إذا كان Node.js تعمل من داخل TTY:

$ node -p -e "Boolean(process.stdout.isTTY)"
true
$ node -p -e "Boolean(process.stdout.isTTY)" | cat
false

يجب أن يكون هناك سبب بسيط أو لا يوجد سبب لأي تطبيق لإنشاء مثيلات الصنفين tty.ReadStream و tty.WriteStream يدوياً.

الصنف tty.ReadStream

أُضيف مع الإصدار: v0.5.8.

الصنف tty.ReadStream هو صنف فرعي من net.Socket والذي يمثل الجانب القابل للقراءة من TTY. في الظروف العادية تصبح العملية process.stdin مثيل tty.ReadStream الوحيد في عملية Node.js ويجب ألّا يكون هناك أي سبب لإنشاء المزيد من المثيلات.

readStream.isRaw

أُضيف مع الإصدار: v0.7.7.

قيمة منطقية boolean تكون true إذا كان ضبط TTY الحالي يهيئها للعمل كجهاز خام (صريح). القيمة الافتراضية: false.

readStream.isTTY

أُضيف مع الإصدار: v0.5.8.

قيمة منطقية boolean تكون دائما true لمثيلات tty.ReadStream.

readStream.setRawMode(mode)‎

أُضيف مع الإصدار: v0.7.7.

  • mode من النوع <boolean> إذا كان true، يضبط وضع tty.ReadStream للعمل كجهاز خام. أما إذا كان false، يضبط tty.ReadStream للعمل في وضعه الافتراضي. ستضبط الخاصية readStream.isRaw إلى الوضع الناتج.

يسمح بضبط tty.ReadStream بحيث يعمل كجهاز خام.

عندما تكون في وضع raw، يكون الإدخال دائما متاحًا حرفًا بحرف، وغير متضمنًا المُعدِّلات. بالإضافة إلى ذلك، تُعطَّل كل معالجة خاصة للحروف من خلال الطرفية، بما في ذلك ارتداد الحروف المُدخَلة. لاحظ ان CTRL + C لم يعُد يسبب SIGINT في هذا الوضع.

الصنف tty.WriteStream

أُضيف مع الإصدار: v0.5.8.

الصنف tty.WriteStream هو صنف فرعي من net.Socket والذي تمثل الجانب القابل للكتابة من TTY. في الظروف العادية تصبح process.stdout و process.stderr المثيلين الوحيدين للخاصية tty.WriteStream المنشأة لعملية Node.js ويجب ألّا يكون هناك أي سبب لإنشاء المزيد من المثيلات.

الحدث: 'resize'

أُضيف مع الإصدار: v0.7.7.

ينطلق الحدث 'resize' كلما يتغير أيًا من الخاصيتين writeStream.columns أو writeStream.rows. لا تمرر أية وسائط إلى دالة رد اتصال المُستمِع عند استدعائه.

process.stdout.on('resize', () => {
  console.log('screen size has changed!');
  console.log(`${process.stdout.columns}x${process.stdout.rows}`);
});

writeStream.columns

أُضيف مع الإصدار: v0.7.7.

رقم من النوع number يحدد عدد الأعمدة الموجودة في TTY حاليًا. وتُحدِّث هذه الخاصية كلما انطلق الحدث 'resize'.

writeStream.isTTY

أُضيف مع الإصدار: v0.5.8.

قيمة منطقية من النوع boolean وتكون دائمًا true.

writeStream.rows

أُضيف مع الإصدار: v0.7.7.

رقم من النوع number يحدد عدد الصفوف الموجودة في TTY حاليًا. وتُحدِّث هذه الخاصية كلما انطلق الحدث 'resize'.

writeStream.getColorDepth([env])‎

أُضيف مع الإصدار: v9.9.0.

  • env من النوع <Object> وهو كائن يحتوي على متغيرات البيئة التي يجب التحقق منها. القيمة الافتراضية: process.env.
  • القيمة المُعادة: من النوع <number>.

القيمة المُعادة:

  • 1 في حالة دعم لونين إثنين،
  • 4 في حالة دعم 16 لون،
  • 8 في حالة دعم 256 لون،
  • 24 في حالة دعم 16,777,216 لون.

يستخدم هذا لتحديد عدد الألوان التي تدعمها الطرفية. نظرا لطبيعة الألوان في الطرفيات فمن الممكن أن يكون إما قيم false موجبة أو قيم false سالبة. ويعتمد ذلك على معلومات العملية ومتغيرات البيئة التي لها علاقة بالطرفية المستخدمة. لفرض سلوك معين دون الاعتماد على process.env من الممكن تمرير كائن مع إعدادات مختلفة.

يستخدم متغير البيئة NODE_DISABLE_COLORS لإجبار هذه الدالة على إعادة 1 دائمًا.

tty.isatty(fd)‎

أُضيف مع الإصدار: v0.5.8.

  • fd من النوع <number> وهو واصف ملف رقمي.

يُعيد التابع tty. isatty()‎ القيمة true إذا كان fd المعطى مقترنًا بـ tty ويعيد false إذا لم يكن كذلك، بما في ذلك كلما كان fd ليس عددا صحيحًا غير سالب.

مصادر