> For the complete documentation index, see [llms.txt](https://sh.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sh.howtocode.dev/2.0.0.part2intro/2.2.0.customprompt/2.2.3.movecursor.md).

# কার্সরের অবস্থান পরিবর্তন

[আগের](/2.0.0.part2intro/2.2.0.customprompt/2.2.2.colorprompt.md) লেসনে আমরা দেখেছি এস্কেপ ক্যারেক্টার ব্যবহার করে কীভাবে রঙ দিতে হয় প্রম্পটে। এস্কেপ ক্যারেক্টার ব্যবহার করে আরো বেশকিছু কাজ করা যায়। তার মধ্যে একটা হল কার্সরের স্থান পরিবর্তন। প্রম্পট ছাড়া অন্য কোনো স্থানে যেমন টার্রমিনালের সবচেয়ে উপরের বা নীচের লাইনে কোনোকিছু দেখাতে হলে(যেমন, ঘড়ি বা অন্যকোন তথ্য।) এর প্রয়োজন পড়ে।

টার্মিনাল স্ক্রীনে স্থান নির্দেশ করা হয় গ্রাফের মত করেই। এবং একটি অবস্থান একটি অক্ষর লেখার মত জায়গা দেয়। সবচেয়ে উপরের লাইনের(line) প্রথম অক্ষরের(Column) অবস্থানকে আমরা (0,0) অবস্থান বলতে পারি। সেভাবেই তার ঠিক ডানপাশে (0,1) এবং নীচে (1,0)। এই পদ্ধতিতে আমরা স্ক্রীনে যেকোনো অবস্থান নির্দেশ করতে পারি।

এবার দেখে নেওয়া যাক কার্সরের অবস্থান পরিবর্তনের এস্কেপ কোডগুলো:

| কোড         | কার্যকারিতা                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `\033[l;cH` | l-তম লাইনের c-তম অক্ষরে কার্সর যাবে। যেমন `\033[2;3H` লিখলে ৩য় লাইনের ৪র্থ অক্ষরের অবস্থানে যাবে। মনে রাখতে হবে গোনা শুরু হয় 0 দিয়ে। |
| `\033[nA`   | n লাইন উপরে যাবে।                                                                                                                    |
| `\033[nB`   | n লাইন নীচে যাবে।                                                                                                                    |
| `\033[nC`   | n অক্ষর সামনে যাবে।                                                                                                                  |
| `\033[nD`   | n অক্ষর পিছনে যাবে।                                                                                                                  |
| `\033[2J`   | স্ক্রীনের সবকিছু মুছে দেবে এবং কার্সর (0,0) অবস্থানে নেবে।                                                                           |
| `\033[K`    | কার্সরের অবস্থান থেকে লাইনের শেষপর্যন্ত মুছে ফেলবে।                                                                                  |
| `\033[s`    | কার্সরের বর্তমান অবস্থানকে স্মৃতিতে রাখবে।                                                                                           |
| `\033[u`    | স্মৃতিতে রাখা কার্সরের অবস্থান মনে করবে।                                                                                             |

এবার আমরা একটা প্রম্পট তৈরী করবো যা প্রত্যকবার দেখানোর সময় লাল ব্যাকগ্রাউন্ডের ওপর হলুদ লেখায় একটা ঘড়ি দেখাবে টার্মিনালের প্রথম লাইনে। এর ব্যবহারিক সুবিধা নগণ্য আপনি হয়ত আমাদের পূর্ববর্তী প্রম্পটি বেশি কাজের মনে করবেন। তাহলে দেখা যাক:

```
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ "
```

আসুন, এটি ভেঙে দেখা যাক:

| কোড         | অর্থ                                                                                                                                               |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| \[          | ননপ্রিন্টিং কোডের শুরু। এটা দেওয়ার কারন হল এগুলোসহ অবস্থান হিসেব করলে তা নিঁখুত হবে না।                                                            |
| \033\[s     | কার্সরের বর্তমান পজিশন স্মৃতিতে রাখবে।                                                                                                             |
| \033\[0;0H  | কার্সরকে (0,0) অর্থাৎ প্রথম লাইনের প্রথম অক্ষরের জায়গায় নিয়ে যাবে।                                                                                 |
| \033\[0;41m | লাল ব্যাকগ্রাউন্ড কালার নেবে।                                                                                                                      |
| \033\[K     | লাইনের শেষ পর্যন্ত সব লেখা মুছে দেবে। আমাদের ব্যাকগ্রাউন্ড কালার লাল বলে একটি লাল বার তৈরী হবে। উল্লেখ্য, কার্সর কিন্তু তার নিজের অবস্থানেই থাকবে। |
| \033\[1;33m | লেখার রঙ হলুদ নির্বাচন করা হবে।                                                                                                                    |
| \t          | সময় দেখাবে।                                                                                                                                        |
| \033\[0m    | টেক্সট ও ব্যাকগ্রাউন্ড কালারকে ডিফল্ট কালারে নিয়ে আসবে।                                                                                            |
| \033\[u     | কার্সরকে তার স্মৃতিতে রাখা অবস্থানে নিয়ে যাবে।                                                                                                     |
| ]           | ননপ্রিন্টিং কোড শেষ।                                                                                                                               |
| <\u@\h \W>$ | প্রম্পট দেখাবে।                                                                                                                                    |
