আমি কীভাবে শেল কমান্ডের মাধ্যমে টার্মিনালে স্ক্রোলব্যাক পুনরায় সেট করব?


41

টার্মিনাল.এপ ব্যবহার করার সময়, আপনি শেল বিল্টিন ব্যবহার করে clearবা ^+ L(কন্ট্রোল-এল) টিপে স্ক্রিনটি সাফ করতে পারেন ।

যাইহোক, এই সবগুলি হ'ল বর্তমান পর্দার সামগ্রীগুলি এক পর্দার উচ্চতার পিছনে ফেলে দেয় এবং কার্সার / ইনপুটটিকে প্রথম লাইনে পুনরায় সেট করা হয়। এর অর্থ আপনি এখনও পিছনে স্ক্রোল করে দেখতে পারেন।

আপনি যা করতে সক্ষম হচ্ছেন তা হ'ল + K(কমান্ড-কে) টিপে আপনার পুরো স্ক্রোলব্যাকটি পুনরায় সেট করুন ।

আপনি এটি করার পরে, আপনি মোটেও আবার স্ক্রোল করতে পারবেন না।

নির্দিষ্ট পরিস্থিতিতে (উল্লেখযোগ্যভাবে, চলার আগে screenবা vim), কমান্ডটি বাস্তবে কার্যকর করার আগে আমি আবার স্ক্রোলটি পুনরায় সেট করতে চাই।

clearওএস এক্স-তে এমন কোনও আদেশ (যেমন ) প্রয়োগ করা হয়েছে যা আমাকে এটি করতে দেয়? এর অস্তিত্ব দেওয়া pbcopyএবং pbpaste, আমি ভাবছি এমন কিছু মিল থাকতে পারে যা আমাকে এটি করার অনুমতি দেবে।


ক্রিস পৃষ্ঠাগুলির উত্তর যেমন টার্মিনাল ইউজ কমান্ডে বলা হয়েছে: clear && printf '\e[3J' (আপনি সঠিক উত্তরটি সঠিক উত্তর হিসাবে বেছে
সাইবার্গ

উত্তর:


57

টার্মিনালটি স্ক্রোল-ব্যাকটি মুছে ফেলার জন্য ইডি (ডিসপ্লেতে মুছে ফেলুন) এস্কেপ ক্রমের সম্প্রসারণকে সমর্থন করে। এটি এক্সটার্ম দ্বারা সমর্থিত। ভিটি 100 ম্যানুয়ালটিতে বর্ণিত ইডি কমান্ড, পিএস প্যারামিটারের জন্য এই মানগুলি গ্রহণ করে:

ইসি [পিএস জে

প্যারামিটার প্যারামিটার অর্থ

0 সক্রিয় অবস্থান থেকে পর্দার শেষ পর্যন্ত মুছুন
1 স্ক্রিনের শুরু থেকে সক্রিয় অবস্থানে মুছুন
2 প্রদর্শন সমস্ত মুছে দিন

টার্মিনাল ( এবং এক্সটার্ম ) যোগ করে:

3 স্ক্রোল-ব্যাক মুছুন (ওরফে "সংরক্ষিত রেখাগুলি")

মনে রাখবেন এটি কেবল স্ক্রোল-ব্যাক মুছে ফেলে, স্ক্রিনটি নয়। এটি আপনাকে দুটি বা পালানোর সিকোয়েন্স পাঠিয়ে এক বা অন্যটিকে মুছতে দেয়।

উদাহরণস্বরূপ, আপনি নীচের শেল কমান্ডের সাহায্যে স্ক্রিন এবং স্ক্রোল-ব্যাক সাফ করতে পারেন: clear && printf '\e[3J'

( clearবর্তমান টার্মিনালের জন্য পর্দা সাফ করার জন্য কমান্ডটি উপযুক্ত ক্রমটি সন্ধান করছে, তবে "স্ক্রল-ব্যাক মুছে ফেলুন" এস্কেপ সিকোয়েন্সটি প্রথাগত এবং অবশ্যই হার্ড-কোডেড থাকতে হবে you আপনি যদি এটি শেল স্ক্রিপ্টে রাখেন যা আপনি জানেন না If নির্দিষ্ট শুধুমাত্র কখনও টার্মিনাল দিয়ে চালানো হবে, আপনি পরীক্ষা করা উচিত যে $TERM_PROGRAMহয় Apple_Terminalএটা পাঠানোর আগে।)


4
এটি ওসাস্ক্রিপ্টের চেয়ে অনেক দ্রুত!
সের্গেই

3
এটি একটি আরও ভাল উত্তর। সুতরাং, এটি স্থায়ী করতে, আপনার ~ / .Bash_ প্রোফাইলে যুক্ত করুন: alias clear="clear && printf '\e[3J'"
টম

1
আমি এই স্ক্রিপ্টটি আমার পাঠাতে রেখেছি:echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
ওয়াকার হেল চতুর্থ

2
@ ওয়াকারহেলিআইভি আপনি স্টাডাউটে কেবল পালানোর ক্রমটি ছাপানোর পরিবর্তে এক্সিকিউটেবল কেন তৈরি করছেন?
ক্রিস পেজ

1
ER TERM_APPLICATION হওয়া উচিত $ TERM_PROGRAM
pbatey

30

,কে, "দেখুন> স্ক্রোলব্যাক সাফ করুন" এর শর্টকাট।

আপডেট : নিম্নলিখিত কমান্ড দ্বারা এটি অ্যাপলস্ক্রিপ্টের সাথে স্বয়ংক্রিয় করা যেতে পারে:

osascript -e 'tell application "System Events" to keystroke "k" using command down'

… যা আপনি যা aliasচান অবশ্যই করতে পারেন বা আপনার ~/.profileলগইন স্ক্রিপ্টের কোনও ফাংশনে সঞ্চয় করতে পারেন :)

সুরক্ষা হিসাবে যদিও, কোনও ভুল ফ্রন্ট অ্যাপ্লিকেশনটিতে একটি কী-স্ট্রোক ইস্যু করার ঝুঁকি ছাড়াই ব্যাকগ্রাউন্ডে এটি ব্যবহার করতে সক্ষম হতে, আমি নিম্নলিখিত পরীক্ষার সাথে এটি ঘিরে পরামর্শ দিচ্ছি:

if application "Terminal" is frontmost

… যা আমাদের নিম্নলিখিত কোড দেয়:

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

… যা ঘুরে, সঠিকভাবে পালাতে এবং aliasএড শেষ হয়:

alias clear="osascript -e 'if application \"Terminal\" is frontmost then tell application \"System Events\" to keystroke \"k\" using command down'"

এবং এখানে আপনার নতুন clear! :)


এখানে মূল বক্তব্যটি হ'ল আমি আমার শেলের পরিবেশে এমন কিছু স্থাপন করতে চাই যাতে আমি যখন কোনও কমান্ড চালিত করি (বলি vim), শেলটি ভিএম কার্যকর করার আগে "স্ক্রোলব্যাক পুনরায় সেট করুন" চালায়। প্রোগ্রামেটিক, ইন্টারেক্টিভ নয়।
জেসন সালাজ

1
@ জেসনসালাজ ঠিক আছে, তা পেল না, দুঃখিত। এজন্য কোড যুক্ত হয়েছে।
ম্যাটিএসজি

1
@ জেসনসালাজ যদি এই উত্তরটি আপনার সমস্যার সমাধান করে, দয়া করে এটি যাচাই করতে ভুলবেন না। যদি তা না হয় তবে দয়া করে মন্তব্যগুলিতে ফিরে আসুন :) মনে রাখবেন, ভবিষ্যতের ব্যবহারকারীরা আপনাকে ধন্যবাদ
জানাবে

সেই কমিকটি আমার সম্পর্কে, আপনি জানেন। আমি ডেনভার, সিও তে প্রোগ্রাম করি (না, আসলে তা নয়, তবে এটি উন্মাদ হয়ে
উঠত

এটি আমার পক্ষে কাজ করে না। আমি যতদূর বলতে পারি এটি টাইপিংয়ের সমতুল্য clear; এটি স্ক্রিনটি সাফ করে, তবে আমি আবারও স্ক্রোল করতে পারি। হিট Command Kস্বাভাবিকভাবে কাজ করে।
জেভ আইজেনবার্গ

7

এখানে কোড যা ম্যাকোসের টার্মিনাল এবং আইটার্ম 2 উভয়ের জন্যই কাজ করে। অগ্রভাগে উইন্ডোটি লাগার দরকার নেই either

printf '\033[2J\033[3J\033[1;1H'

কিভাবে এটা কাজ করে

এটি 3 এএনএসআই এস্কেপ সিকোয়েন্সগুলির রচনা , বিশেষত "কন্ট্রোল সিকোয়েন্স ইন্ট্রোডুসার" কমান্ড

\033এটি একটি পালানোর অনুক্রম যা প্রতিনিধিত্ব করে এমন চরিত্রের জন্য কোড পয়েন্টকে হার্ডকোড করে। শীর্ষস্থানীয় 0ইঙ্গিত দেয় যে বাকী অনুক্রমটি অক্টাল মানকে এই ক্ষেত্রে, একটি অক্টাল মানকে এনকোড করে 33। এর দশমিক মান 27( 3 * 8^1 + 3 * 8^0= 3 * 8 + 3= 24 + 3= 27)। ASCII তে কোড পয়েন্ট 27হ'ল "ESC" (পালানো) অক্ষর।

CSIকমান্ডস দিয়ে শুরু ESC [, ওরফে \033[। এটি জেনে আমরা স্ট্রিংটিকে এর 3 অংশে বিভক্ত করতে পারি।

  1. CSI 2 J
    • এটি "ED - Erase in Display" কমান্ডের একটি উদাহরণ, যা ফর্মটি রয়েছে CSI n J
    • nমানে সেট করা 2এই ক্ষেত্রে, যা দ্বিতীয় বৈকল্পিক ডাকে মধ্যে: "যদি n হল 2, স্পষ্ট সমগ্র পর্দায় রয়েছে (এবং প্যাচসমূহ উপরের ডস ANSI.SYS উপর বাম কার্সার)।"
  2. CSI 3 J:
    • এটি "ED - Erase in Display" কমান্ডের একটি উদাহরণ, যা ফর্মটি রয়েছে CSI n J
    • nমানে সেট করা 3এই ক্ষেত্রে, যা তৃতীয় বৈকল্পিক ডাকে মধ্যে: "যদি এন 3, স্পষ্ট সমগ্র পর্দায় রয়েছে এবং (এই বৈশিষ্ট্যটি xterm জন্য যোগ করা হয়েছে এবং অন্য ২ টি প্রান্তে অ্যাপ্লিকেশন দ্বারা সমর্থিত) স্ক্রলব্যাক বাফার সংরক্ষিত সব লাইন মুছে দিন।"
  3. CSI 1 ; 1 H:
    • এটি "ED - Erase in Display" কমান্ডের একটি উদাহরণ, যা ফর্মটি রয়েছে CSI n ; m H

      কার্সারটিকে সারি n, কলামে নিয়ে যায় m। মানগুলি 1-ভিত্তিক এবং বাদ পড়লে 1 (উপরে বাম কোণে) এ ডিফল্ট হয়। যেমন একটা ক্রম CSI ;5Hজন্য একটি প্রতিশব্দ হয় CSI 1;5Hসেইসাথে CSI 17;Hসিএসআই 17H এবং হিসাবে একইCSI 17;1H

    • nএবং mমান উভয় সেট 1, যা এই কমান্ড প্যাচসমূহ উপরের বামদিকের কোণায় কার্সর মানে।

আপনি জিজ্ঞাসা করতে পারেন আপনি এটি কোথা থেকে পেয়েছেন? আমার কাছ থেকে +1 - এটি যেভাবেই কাজ করে
rbrtl


1
দেখে মনে হচ্ছে এটি " CSI n J" (যেখানে এন = 2) + " CSI n J" (যেখানে এন = 3) + " CSI n ; m H" (যেখানে এন, এম = 1, 1), যা অনুবাদ করে: "ইডি - প্রদর্শনে মুছুন" (বৈকল্পিক 2), "ইডি - ডিসপ্লে ইরেজ ইন ডিসপ্লে" (ভেরিয়েন্ট 3), "সিইউপি - কার্সার পজিশন" (1, 1 এ চলেছে)
আলেকজান্ডার - মনিকা পুনরায় ইনস্টল করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.