জেডএসএইচ: সরাসরি জেডএল উইজেটগুলি কীভাবে করবেন?


12

ডকুমেন্টেশন বিভাগের 18.4 উইজেটগুলিতে বলেছে যে "উইজেটের কাজ কেবল কিছু ছোট ক্রিয়া সম্পাদন করা"। তবে কীভাবে এই ক্রিয়াগুলি চালিত করা যায়, অর্থাত্ কোনও উইজেটকে কীভাবে কল করা যায় তার কোনও সাধারণ বিবরণ আমি পাই না।

আমি উদাহরণগুলিতে দেখেছি (উদাহরণস্বরূপ এই প্রশ্নোত্তরটি দেখুন ) যে উইজেটগুলি কীগুলি ব্যবহার করে আবদ্ধ হতে পারে bindkey KEY WIDGET। তারপরে কেউ উইজেট ব্যবহার করে কল করতে পারেন KEY

আমি টগল করতে চেয়েছিলাম set-local-historyএবং চেষ্টা করেছি:

$ zle set-local-history 1
zle: widgets can only be called when ZLE is active

zle -hকাজ করে না, তবে আমি এখানে যুক্তিগুলির বিবরণ পেয়েছি । তবে মনে হয় না এরকম কিছু আছে --call

আমি কি ভুল করছি? বিন্ডকি ছাড়া উইজেটকে কল করা কীভাবে সম্ভব? আমি কীভাবে বর্তমান অবস্থা মুদ্রণ করতে পারি? ( set-local-historyরাষ্ট্র টগল করে)

উত্তর:


9

আপনি (ইমাস বাইন্ডিং) বা (vi বাইন্ডিং) execute-named-cmdআবদ্ধ উইজেট দ্বারা উইজেট সম্পাদন করতে পারেন :ESC-x:

execute-named-cmd (ESC-x) (:) (unbound)

একটি সম্পাদক কমান্ডের নামটি পড়ুন এবং এটি সম্পাদন করুন।

এটি কমান্ড লাইনের নীচে একটি মিনি-বাফার খুলবে , যেখানে আপনি জেল উইজেটগুলি শুরু করতে পারেন। (স্বতঃসম্পূর্ণতা উপলব্ধ!):

$ [ESC-x]
execute: set-[TAB]
set-local-history  set-mark-command

zle(স্থানীয় ইতিহাস সহ) এর অবস্থাটি জিজ্ঞাসা করতে, ভেরিয়েবলটি ব্যবহার করুন $ZLE_STATE(কেবলমাত্র উইজেট ফাংশনগুলির মধ্যে অ্যাক্সেসযোগ্য):

ZLE_STATE (scalar)

স্পেস-বিভাজিত শব্দের একটি সেট রয়েছে যা বর্তমান জেলের অবস্থা বর্ণনা করে।

বর্তমানে প্রদর্শিত রাজ্যগুলি ওভাররাইট মোড বা vi-রিপ্লেস উইজেটগুলি দ্বারা সেট করা হিসাবে সন্নিবেশ মোড এবং ইতিহাস-আদেশগুলি সেট-স্থানীয়-ইতিহাস উইজেটের দ্বারা নিয়ন্ত্রিত হিসাবে আমদানি করা এন্ট্রিগুলিতে পরিদর্শন করবে কিনা তা। insert কমান্ড লাইনে অক্ষরগুলি সন্নিবেশ করাতে থাকলে বিদ্যমান অক্ষরগুলি ডানদিকে সরানো হয় overwriteঅথবা অক্ষরগুলি সন্নিবেশ করতে হলে বিদ্যমান অক্ষরগুলিকে ওভাররাইট করে The এটিতে localhistoryযদি কেবল স্থানীয় ইতিহাসের আদেশগুলি পরিদর্শন করা হয় বা globalhistoryআমদানি করা ইতিহাসের আদেশগুলিও পরিদর্শন করা হয়।

সাবস্ট্রিংগুলি বর্ণমালা অনুসারে বাছাই করা হয়েছে যাতে আপনি ভবিষ্যত-প্রমাণ উপায়ে দুটি নির্দিষ্ট সাবস্ট্রিংয়ের জন্য পরীক্ষা করতে চান, আপনি এটি করে মিলটি করতে পারেন:

if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi

সমস্ত উদ্ধৃতি থেকে man zshzle


হ্যাঁ, আমি মনে করি আমি ইতিমধ্যে দুটি উদ্ধৃতি দেখেছি, তবে আমি তিনটি ধনুর্বন্ধনীগুলিতে মানটি বুঝতে পারি নি। ম্যান পেজটি বলে: "এই বিশেষ পরামিতিগুলি সর্বদা উইজেট ফাংশনগুলিতে পাওয়া যায় তবে কোনওভাবেই জেডএলএল এর বাইরে বিশেষ নয়" " তার মানে, জেডলেপেট পেতে, আমাকে একটি ফাংশন এবং একটি কাস্টম উইজেট সংজ্ঞা দেওয়া দরকার, তাই না?
লম্ব্রিক

@ লুম্ব্রিক: আপনি ঠিক বলেছেন, ZLE_STATEকেবলমাত্র উইজেট ফাংশনগুলির মধ্যেই এটি সংজ্ঞায়িত করা হয়েছে। আমি আমার উত্তর পরিমার্জন তোমার লক্ষ্য কি? [বন্য অনুমান: আমার প্রম্পটে স্থানীয় / বৈশ্বিক ইতিহাস নির্দেশ করতে আমি একটি উইজেট ব্যবহার করি (i।) একটি শেল ভেরিয়েবল সেট করে (এটি উইজেটগুলির অভ্যন্তরে সম্ভব) এবং (ii।) কার্যকর করতে হবে zle set-local-history]]
এমপিপি

আমার প্রাথমিক লক্ষ্যটি ছিল জ্লে উইজেটগুলির ধারণাটি বোঝা। সেট-লোকাল-ইতিহাস নিয়ে ঘুরে বেড়াতে, আমি এটি বর্তমানে বিশ্বব্যাপী বা স্থানীয়তে সেট করা আছে কিনা তা জানতে চেয়েছিলাম। আমি ভেবেছিলাম বর্তমান অবস্থা পেতে আমাদের অবশ্যই থাকতে হবে (বর্তমানে সক্রিয় বিকল্পগুলি পেতে "সেটপট" বলার অনুরূপ)। আমার মূল লক্ষ্যটি ইতিমধ্যে এই প্রশ্নোত্তর সমাধান করা হয়েছে ।
লম্ব্রিক

1
উদাহরণের আগে বাক্যটি পড়ার ভিত্তিতে পরীক্ষার স্ট্রিংটি " *globalhistory*insert*" এর পরিবর্তে " " হওয়া উচিত *insert*globalhistory*?
ভোলকার সিগেল

@ ভোলকারসিগেল: একটি খুব ভাল বিষয়, ধন্যবাদ! আমি উত্স কোডটি যাচাই করেছি এবং প্রদত্ত উদাহরণটি নিজেই চেষ্টা করেছিলাম, এই সিদ্ধান্তে পৌঁছেছি যে ম্যান পৃষ্ঠায় উদাহরণটি ভুল, বিবৃতি নয় ("বর্ণমালা অনুসারে বাছাই করা হয়েছে")। আমি আমার উত্তর সম্পাদনা করেছি এবং zsh- কর্মীদের মেলিং তালিকায় একটি পথ প্রেরণ করব ।
এমপি

1

আপনি যদি ব্যবহার করে থাকেন তবে আপনি tmuxবাউন্ড কীটি সাথে কল করতে পারেন send-keys

উদাহরণ:

# Current pane
$ tmux send-keys C-r

# Some targeted pane
$ tmux send-keys -t SESSION_NAME:WINDOW_NUMBER.PANE_NUMBER C-z
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.