الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قصة حياة زر الإنتر

بدأه most hacker في 6 ديسمبر 2010 · 14 رد · 4,607 مشاهدة · في المقالات العلمية و التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

قديما ً في العصر الحجري أيام استخدام الآلات الطابعة كانت الآلة الطابعة غير قادرة على العودة لبداية السطر عندما ينتهي السطر بل كان يتوجب على الشخص الذي يعمل عليها أن يقوم بإعاداتها يدويا ً فعند انتهاء السطر يقوم بإعداتها إلى أول السطر بشكل يدوي.هذه العملية تسمى carriage return حيث عند القيام بـ carriage return كانت الورقة تعاد إلى أقصى اليسار.

أيضا ً كانت الآلات الكاتبة تحوي ما يسمى بالـ Line feed و هي عبارة عن ذراع تقوم بنقل الكتابة سطر نحو الأسفل حيث كانت ترفع الورقة نحو الأعلى بمقدار سطر ... إن تنفيذ كلا ً من carriage return و line feed على الآلة الكاتبة يؤدي إلى الانتقال لسطر جديد و بدأ الكتابة من اليسار و بذلك كانت الكتابة تبدأ من أول السطر التالي .في حال قام الكاتب بتنفيذ carriage return و لم ينفذ line feed فستعاد الورقة إلى أول السطر و ستتم الكتابة على نفس السطر فوق الكتابة القديمة. (هذا ما يحدث برمجيا ً عند كتابة r\ )

بعض الآلات الكاتبة كانت تقوم بالأمرين معا ً بشكل أوتوماتيكي عبر تنفيذ carriage return و البعض منها كان يقتضي تنفيذ الأمرين معاً للكتابة على بداية سطر جديد. في عصر الحواسيب تم إطلاق المصطلح carriage return بشكل عام على الزر enter على الرغم من أنه يقوم بالمهمتين معاً فهو يؤدي عمل الـ carriage return عبر الانتقال لسطر جديد كما أنه يؤدي عمل الـ Line feed عبر العودة لبداية السطر و لهذا يأخذ زر الـ enter رمز سهم متجه نحو الأسفل و من ثم اليسار على الشكل↵, و بذلك أصبح الزر enter يقوم بمهمتين معا ً و لم نعد مضطرين للقيام بضغطتين بل يكفي ضغطة زر واحدة للقيام بكلتا العمليتين. على الرغم من قيام الزر enter بالأمرين معا ً إلا أنه اصطلح على تسميته carriage return و لكن عموما ً تختلف تسميات الناس له فالبعض يسميه line feed كما أن البعض يسميه new line و بعض المبرمجين يذكرون بنيته برمجيا ً فيقولون أنه carriage return و line feed فالأمر مختلط و التسميات مختلفة.

في عالم الحوسبة قامت مايكروسوفت بمحاكاة الآلة الكاتبة المتخلفة التي تحتاج لضغطتي زر ففي نظام الوندوز حتى ننتقل لسطر جديد يجب أن نقوم بتنفيذ كل من carriage return و Line feed معا ً و هذا ما يقوم به الوندوز بشكل آلي من خلف الكواليس عندما نضغط إنتر و لكن في الأنظمة الأخرى يقوم النظام بتنفيذ أمر واحد فقط ففي الماك يكفي تنفيذ carriage return و في الـ linux يكفي تنفيذ line feed. و هذا هو سبب اختلاف الناس في تسميتها ما بين carriage return و line feed و new line .

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

Underwoodfive.jpg

المصدر google !

تم تعديل هذه المشاركة بواسطة most hacker في 6 ديسمبر 2010 في 21:14

12
#2

و الله معلومة قيمة

شكرا جزيلًا

#3

مقاله لطيفه ولكن عندي سؤال..هل فعلا تنفيذ الامر

\r\n

او

\n

مرتبط بنظام التشغيل ام بمحرر النصوص، انا أظن أنه يرتبط بمحرر النصوص وليس بنظام التشغيل، أعتقد ان notepad في windows يقوم بعمل

\r\n

اما wordpad فيقوم بعمل

\n

فقط عند الضغط على enter، لست متأكد من ذلك لكني عند رأيي أنها تتعلق بالمحرر وليس بنظام التشغيل.

تم تعديل هذه المشاركة بواسطة مهدي حجازي في 7 ديسمبر 2010 في 03:02

#4

مقالة جميلة مكتوبة بأسلوب جميل .

اقتباس
فقط عند الضغط على enter، لست متأكد من ذلك لكني عند رأيي أنها تتعلق بالمحرر وليس بنظام التشغيل.

أعتقد أنه يمكن أن تحل مشكلة الاختلافات على مستوى التطبيق ، لكن أظن أن التعامل سيكون مختلف من نظام تشغيل لآخر على مستوى استقبال MSG نفسها ، لو فرضنا أنك تستقبل الحدث WM_KEYDOWN أو WM_CHAR في Windows ، وجاءك حدث " زر Enter " ، فستختلف قيمته ( ممكن رح يجيك /r/n مثلاً ؟ ) .. بعكس لو كنت على نظام linux .

لذلك التطبيقات مثل notepad++ تقوم بحل مشكلة نظام التشغيل . إذاً هي مشكلة نظام تشغيل وليست مشكلة تطبيقات . لأن التطبيقات تقوم بكتابة ما يردها من حروف بشكل مباشر .. لكن enter تتعامل معه بطريقة خاصة ( لا تكتب قيمته مباشرة ، ولكن قد تغيّر قيمته بناءً على هدف صاحب البرنامج ) .

طبعاً هذا مجرد تخمين وفلسفة فقط :-) .

شكراً مرة ثانية على المقال الرائع .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

شكرا لك أخي الشمري..تحليل منطقي أميل اليه..هل هناك طريقه تمكننا من التأكد من ذلك بغير استقبال الرسائل من النظام..أنا غشيم C++ للأسف :unsure:

#6

مقال جميل :)

-----

تخمينك و فلسفتك صحيحه أخي الشمري ففي الوندوز مثلاً كتبت مكتباتها بحيث تتعامل على أساس أن السطر الجديد يجب أن يحتوي على \r\n و هنا إذا قمت بإستدعاء مكتباتها في حفظ الملفات النصيه فسوف يسجل السطر الجديد بالحرفين \r\n و هنا نجد أن جميع برامج الوندوز تستعمل مكتباتها و لذلك لا تتعامل إلا مع الحرفين \r\n و هذا ينطبق من أول الطرفيه إلى الأوفيس و لكن لو قمنا بتصميم برنامج بحيث لا نعتمد فيه على مكتبات الوندوز في حفظ الملف فيمكننا في هذه اللحظه أن نحفظ التهيئه التي نريدها بل يمكننا أن ندمج الثلاث طرق معاً ففي Notepad++ عند فتح ملف يقوم بقراءه و فلتره الأسطر فإذا ظهر في سطر من الأسطر الحرفين \r\n\ بصفه متتاليه فسوف يقول لك أن هذا الملف على تهيئه الوندوز و لكن لو وجد حرف واحد فقط و ليكن \n يمثل جميع الأسطر فسيقول لك أنه Unex و هكذا

و لكن لا أعتقد أن رسائل النظام لها دخل بهذا :) فكل ما نحتاجه منها هو معرفه الزر الذي تم الضغط عليه فقط.

بالمناسبه مكتبه .net تقوم بقراءه الملفات و تتعرف علي الأسطر مهما إختلف نوع تسجيل السطر الجديد بها و هذا يدل على أن مايكروسوفت بدأت تنتبه إلى أن إستخدام \r\n في كل شئ ليس منطقي و أن المبرمج أو المستخدم ممكن أن يتعرض لأنواع ملفات مصممه على أنظمه أخرى في أي وقت مع أن الطبيعي بالنسبه لمكتبه .net هو \r\n :)

forum-signature-01.gif
#7

موضوع رائع و الى الأمام

%%% I Have Never Known Away To Impossible %%%

*** ليتني طفل أكبر همي لعبتي ***

#8

معلومة جميلة وتقديمها اجمل

لك جزيل الشكر

عماد حمدي
العراق _ بغداد

 


https://sites.google.com/site/emadhamdyy/home

#9

جزاك الله كل خير

#10
اقتباس

ففي نظام الوندوز حتى ننتقل لسطر جديد يجب أن نقوم بتنفيذ كل من carriage

return و Line feed معا ً و هذا ما يقوم به الوندوز بشكل آلي من خلف

الكواليس عندما نضغط إنتر و لكن في الأنظمة الأخرى يقوم النظام بتنفيذ أمر

واحد فقط ففي الماك يكفي تنفيذ carriage return و في الـ linux يكفي تنفيذ

line feed.

<br><br>فعلا ... أنظمه ماك ما قبل Mac OS X كانت تستخدم CR ... لكن النظام الجديد المبنى على FreeBSD يستخدم ال LF ...<br><br>http://en.wikipedia.org/wiki/Newline#Representations<br><br>
#11

شكراً لك على المقال لم اكن اعرف قصة الالة الكاتبة, بالنسبة للأختلاف حول تفسير الأوامر \r\n فهي عائدة لأنظمة التشغيل حصراً كما قال صاحب الموضوع, لذلك في دوت نت مثلاً ينصح باستخدام

Environment.NewLine

عندما نريد الأنتقال إلى سطر جديد وذلك لتوافقها على جميع انظمة التشغيل ويتم إعادة \r\n حسب نظام التشغيل الذي يعمل عليه التطبيق, وبالتالي سوف يكون لها فائدة كبيرة عند استخدام Mono مثلاً.

إذا نظرنا إلى ترميز ال Unicode سنجده كالتالي:

    "\r\n" (\u000D\u000A) Windows
    "\n" (\u000A) Unix
    "\r" (\u000D) Mac

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#12
اقتباس

شكراً لك على المقال لم اكن اعرف قصة الالة الكاتبة, بالنسبة للأختلاف حول تفسير الأوامر \r\n فهي عائدة لأنظمة التشغيل حصراً كما قال صاحب الموضوع, لذلك في دوت نت مثلاً ينصح باستخدام

Environment.NewLine

ياعجبا على ميكروسوفت ... (بيشتغلو نفسهم! .. )

#13

هذا الموضوع جعلني أفكر في قصة الازرار

laugh.gif
#14

أول مره أسمع بهذي المعلومه

I love .cpp

#15

مقال ممتع

يسلمو

تم تعديل هذه المشاركة بواسطة همس444 في 29 فبراير 2012 في 14:08

مواضيع مشابهة