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


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.