টার্মিনাল কমান্ডের জন্য কী-বোর্ড শর্টকাট তৈরি করতে হয়


16

কমান্ডগুলির জন্য কীবোর্ড শর্টকাট সেট করার দক্ষতার জন্য আমি প্রায়শই গিট এবং আইটির্ম 2 পছন্দ করি। উদাহরণস্বরূপ, আমি সেট CTRL+ + ENTERথেকে git status।

জিনোম-টার্মিনাল দিয়ে এটি কি সম্ভব বা এটি অর্জনের জন্য আপনি অন্য কোনও বিকল্পের প্রস্তাব দিতে পারেন?

উত্তর:


17

আপনি bind -xবাশ-এ একটি শর্টকাটে একটি কমান্ড বাঁধতে ব্যবহার করতে পারেন । উদাহরণস্বরূপ, + শর্টকাটে git statusকমান্ড বাঁধাই আপনি ব্যবহার করতে পারেন:Crtlp

 bind -x '"\C-p":git status'

এটি ~/.bashrcমনে রাখতে ফাইলের মধ্যে রাখুন । ম্যান পৃষ্ঠা থেকে:

-x কীসেক: শেল-কমান্ড

কীসেক প্রবেশ করা হলে শেল-কমান্ড কার্যকর করা হবে। শেল-কমান্ড কার্যকর করা হলে, শেলটি রিডলাইন লাইন বাফার এবং READLINE_POINT ভেরিয়েবলটি সন্নিবেশকরণ পয়েন্টের বর্তমান অবস্থানে রেডলাইনপ্লাইনটি পরিবর্তনশীল সেট করে। যদি কার্যকর করা কমান্ড READLINE_LINE বা READLINE_POINT এর মান পরিবর্তন করে তবে সেই নতুন মানগুলি সম্পাদনা অবস্থায় প্রতিফলিত হবে।


অসাধারণ. আমি zsh ব্যবহার করছি তবে এর বিন্দকি নামে একটি সমতুল্য রয়েছে । তাই আমি যা চাই তা অর্জন করতে আমি এটি করেছি: bindkey -s '^[^M' 'git status\n'যা ALT + ENTER এর সাথে আবদ্ধ।
— mniess

1
bind -x '"\C-k":firefox'আমি এটি ব্যবহার করি কিন্তু কার্যকর হয় না
— আলহেলাল

1
এটি শেলটিতে কাজ করে তবে আমি সব সময় চাই।
— আলহেলাল

1
~/.bashrcফাইলের শেষে রাখুন । যদি এটি এখনও কাজ করে না, এটি দেখুন
— Nykakin

ব্যবহারের আরও তথ্য bindএখানে পাওয়া যেতে পারে: stackoverflow.com/a/4201274/712334
— জোশ Habdas

2

1. আপনার কমান্ডের আউটপুট প্রদর্শন করে স্বয়ংক্রিয়ভাবে একটি নতুন টার্মিনাল উইন্ডো খুলুন

যেহেতু কমান্ডটি চালানোর পরে আপনার টার্মিনালটি খোলা রাখা দরকার:

gnome-terminal -e 'bash -c "git status; read line"'

একটি শর্টকাট কী সংমিশ্রনের অধীনে, কাজটি করবে। এটি একটি নতুন gnome-terminal উইন্ডো খুলবে এবং এর ভিতরে কমান্ডটি চালাবে।

এটি একটি শর্টকাটে যুক্ত করুন

চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাটস"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন:

gnome-terminal -e 'bash -c "git status; read line"'

থেকে Ctrl+Enter

বিঃদ্রঃ

যদিও আপনার প্রস্তাবিত শর্টকাটটি কাজ করে, আপনি তখন Ctrl+ এর সাথে অন্য কোনও কী সংমিশ্রণটি বেছে নিতে পারেন Enter, যেহেতু এটি একটি নতুন পৃষ্ঠায় ঝাঁপ দেওয়ার জন্য শর্টকাটের সাথে অন্তত সংঘর্ষ হয় LibreOffice।

ব্যাখ্যা

gnome-terminalকমান্ড লাইন থেকে একটি নতুন উইন্ডো খুলতে এবং এতে একটি কমান্ড চালাতে, আপনি ব্যবহার করতে পারেন:

gnome-terminal -e 'bash -c <command>'

তবে, কমান্ডটি সফলভাবে চলবে, আপনি আউটপুটটি পড়ার আগেই টার্মিনাল উইন্ডোটি তত্ক্ষণাত বন্ধ হয়ে যাবে।

বিভাগ:

read line

তাহলে Enterকমান্ডটি চালানোর পরে টার্মিনালটি খোলা রাখা (আপনি আঘাত না করা )।

অন্যান্য আদেশ

এইভাবে, আপনি অবিলম্বে এটি বন্ধ না করেই টার্মিনালে কোনও (জটিল) কমান্ড চালাতে পারেন:

$ gnome-terminal -e 'bash -c "wmctrl -d; read line"'

আউটপুট হবে (যদি wmctrlইনস্টল করা থাকে):

এখানে চিত্র বর্ণনা লিখুন

চাপ Enterদেওয়ার পরে টার্মিনালটি বন্ধ হয়ে যাবে।

2. বর্তমানে সক্রিয় জিনোম-টার্মিনাল উইন্ডোতে একটি কমান্ড চালানো

অবশ্যই আপনি পারে একটি শর্টকাট কী (অভিমানী আপনি আছে অধীনে একটি সহজ এক-লাইনের স্থান xdotoolইনস্টল করা আছে):

xdotool type "<command>"

যদিও কমান্ড টাইপ হবে অন্ধ , এ কোন অ্যাপ্লিকেশনটি এবং টাইপ কমান্ড পরিষ্কার বিকল্প নয়।

নীচে ছোট স্ক্রিপ্ট:

  • সক্রিয় উইন্ডোটি একটি gnome-terminalউইন্ডো কিনা তা দেখায় (এর পিড দিয়ে)
  • যদি তাই হয়, এটা পেস্ট সক্রিয় কমান্ড gnome-terminalউইন্ডো ছাপাখানা Return।
    যদি তা না হয় তবে স্ক্রিপ্টটি কিছুই করে না , সুতরাং এটি অন্যান্য অ্যাপ্লিকেশনগুলিতে পেস্ট করবে না।

যেহেতু স্ক্রিপ্টটি লক্ষ্যযুক্ত কমান্ডটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে, তাই আপনি একাধিক শর্টকাটের অধীনে একাধিক কমান্ড রাখতে পারেন।

এই পান্ডুলিপি

#!/usr/bin/env python3
import subprocess
import sys
import time

app = "gnome-terminal"
s = (" ").join(sys.argv[1:])

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def front(app):
    try:
        # see if gnome-terminal is running at all (raising error if not)
        app = get(["pgrep", app]) 
    except subprocess.CalledProcessError:
        app = False
    if app:
        # if so, see if the active window belongs to gnome-terminal comparing pids)
        active = get(["xdotool", "getwindowpid", get(["xdotool", "getactivewindow"])])
        return True if app == active else False

if front(app):
    # copy command to clipboard
    cm1 = ["/bin/bash", "-c", 'printf "'+s+'" | xclip -selection clipboard']
    # paste in terminal window
    cm2 = ["xdotool", "key", "Control_L+Shift_L+v"]
    # press return
    cm3 = ["xdotool", "key", "Return"]
    for cm in [cm1, cm2, cm3]:
        subprocess.call(cm)

কিভাবে ব্যবহার করে

  1. স্ক্রিপ্ট দরকার xdotool

    sudo apt-get xdotool ইনস্টল করুন

  2. ডাইরেক্টরিটি তৈরি করুন ~/binযদি এটি এখনও বিদ্যমান না হয়, হয় লগ আউট / ইন বা চালানোsource ~/.profile

  3. স্ক্রিপ্ট উপরে একটি খালি ফাইলে, কপি হিসাবে এটি সংরক্ষণ gterm_keysমধ্যে (কোন এক্সটেনশন) ~/bin, একটি এটিকে এক্সিকিউটেবল

এখন আপনি শর্টকাট কী থেকে সামনের উইন্ডোতে কমান্ডটি যুক্ত করে যে কোনও কমান্ড চালাতে পারবেন gnome-terminal:

gterm_keys <command>

একটি শর্টকাট কীতে বর্ণিত হয়েছে [1]


হাই জ্যাকব, আপনার উত্তরের জন্য ধন্যবাদ। আমি মনে করি, যদিও বাঁধাই (এবং বাইন্ডকি) সমাধানগুলি শেল-বিল্টিন হওয়ায় আরও ভাল। এইভাবে আমি দুর্ঘটনাক্রমে লিবারিফাইসে "গিট স্ট্যাটাস" লিখব না। ;)
— mniess

@ মনিজস, আমি সম্মত হলাম উত্তরটি উত্তম, তবে রেকর্ডের জন্য, আপনি যদি আমার উত্তর মনোযোগ সহকারে পড়েন, লিবারঅফিসে মুদ্রণ করেন, তা ঘটতে পারে না । তবে আপনি কি ঠিক নিম্নচাপ করেছেন ?? যে অত্যধিক হাসিখুশি.
— জ্যাকব ভিলিজম

আমি জানি, স্ক্রিপ্টটি চলমান অ্যাপ্লিকেশনটির জন্য পরীক্ষা করে। আমি ডাউনভোট করিনি। এই জাতীয় বিস্তারিত উত্তর লেখার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ জানাতে আমি মন্তব্যটি লিখেছিলাম।
— mniess

@ এমনিজ আহ, সিদ্ধান্তে ঝাঁপ দেওয়ার জন্য দুঃখিত! দুটি ঘটেছে পুরোপুরি সিঙ্ক্রোনাইজড। আমি আনন্দিত যে আপনি ছিলেন না। "জাস্ট" একটি ডাউনভোট আমার আপত্তি নেই।
— জ্যাকব ভিলিজম

2

যদি ব্যাশের পরিবর্তে zsh ব্যবহার করা হয় তবে নিম্নলিখিত লাইনটি + এ ~/.zshrcআবদ্ধ git statusহয় ।ALTENTER

bindkey -s '^[^M' 'git status\n'

বাশ-তে ALT+ পেতে ENTER, আমি এই লাইনটি ব্যবহার করি:

bind -x '"\e\C-m":git status'

কীভাবে কেউ অন্য কীগুলির জন্য বাইন্ডিংগুলি সনাক্ত করতে পারে?
— জোশ হাবদাস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.