একটি টিএমউक्स সেশনটি মেরে ফেলুন এবং অন্য একটি টিএমএক্স সেশনটি নির্বাচন করুন


11

আমি Xনিম্নলিখিতগুলি করার জন্য আবদ্ধ হওয়ার চেষ্টা করছি :

  • সেশনটি হত্যা করা উচিত কিনা ব্যবহারকারীকে অনুরোধ করুন
  • যদি yপ্রবেশ করানো হয়, সেশন হত্যা
  • সেশনটি মারা যাওয়ার পরে অন্য সেশনটি নির্বাচন করুন (শেষ, পূর্ববর্তী বা পরবর্তী সেশন)

কিছু অনুরূপ কমান্ড যা সঠিক নয় right

  1. সেশনটি মেরে টার্মিনালটি বন্ধ করুন:

    bind X confirm-before -p "Kill #S (y/n)?" kill-session
    
  2. সেশনটির নাম ব্যবহারের জন্য ব্যবহারকারীকে অনুরোধ করুন এবং হত্যা করার পরে পরবর্তী অধিবেশনটি নির্বাচন করুন:

    bind X command-prompt -p "kill:"  "switch-client -n \; kill-session -t '%%'"
    
  3. আমি অনুরূপ আদেশের উদাহরণগুলি সন্ধান করতে সক্ষম হইনি। এখানে একটি সমাধান এমন কিছু যা কার্যকর হয় না:

    bind X confirm-before -p "Kill #S (y/n)?" "SESSION='#S' \; \
    switch-client -n \; kill-session -t \"$SESSION\""
    

উত্তর:


12

আমি মনে করি এটি আপনি যা চান তার কাছাকাছি:

bind-key X confirm-before -p "Kill #S (y/n)?" "run-shell 'tmux switch-client -n \\\; kill-session -t \"#S\"'"

আপনার # 3 পদ্ধতির অধিকার লাইন বরাবর, কিন্তু সমস্যা হল confirm-beforeকরেন না status-left(যেমন -style বদল #S) তার কমান্ড স্ট্রিং।

উপরের বাইন্ডিংয়ের জন্য একটি সতর্কতা হ'ল যেহেতু সবকিছুই শেষ হয়ে গেছে run-shell, সুতরাং আদেশগুলি কোনও নির্দিষ্ট ক্লায়েন্ট বা সেশনের প্রসঙ্গে বাইরে চালিত হয়। এটি সত্যই কেবলমাত্র কাজ করে কারণ "ডিফল্ট" ক্লায়েন্ট (এর জন্য switch-client) এবং "ডিফল্ট" সেশন (এর জন্য #S) সর্বাধিক সক্রিয় রয়েছে। এটি কেবলমাত্র আপনার একক সক্রিয় ক্লায়েন্ট হিসাবে যেমন প্রত্যাশা করবে ততক্ষণ কার্যকর হবে (উদাহরণস্বরূপ এমন একক ব্যবহারকারী যা শেল কমান্ডগুলি শেষ না হওয়া অবধি অন্য tmux ক্লায়েন্টে টাইপ করে না ); এটি নাটকীয়ভাবে ব্যর্থ হতে পারে যদি (উদাহরণস্বরূপ) আপনি tmux ক্লায়েন্ট এ- তে বন্ডিং ট্রিগার করেন তবে শেলটি শুরু করার আগে তার কমান্ডগুলি চালনার সুযোগ পাওয়ার আগে tmux ক্লায়েন্ট বি দ্বারা নতুন ইনপুট পাওয়া run-shellযায়।

এই নির্দিষ্ট জাতি শর্তটি run-shellকমান্ডগুলিতে ক্লায়েন্ট / সেশন / উইন্ডো / ফলক তথ্য সরবরাহ করার জন্য একটি দুর্দান্ত অনুপ্রেরণার মতো বলে মনে হচ্ছে । প্রাপ্তি if-shellএবং run-shellসমর্থন সম্পর্কে একটি টোডো এন্ট্রি রয়েছে ( alচ্ছিক ?) status_replace()(অর্থাত্ status-leftস্টাইল বিকল্পগুলি), যদিও এর চেয়ে ভাল আরও পছন্দ হতে পারে format_expand(), যা একধরনের নতুন সুপার-সেট status_replace(অফার #{client_tty}ইত্যাদি)।


এটি ঠিক আমি যা খুঁজছিলাম ঠিক তা করছে বলে মনে হচ্ছে। আমি tmux display-message -p "#S"অন্য উত্তরে কৌশলটি সন্ধান করার পরেও অনুরূপ পদ্ধতিটি চেষ্টা করেছি tried দেখে মনে হচ্ছে রান-শেলের সমস্ত জিনিস মোড়ানোই মূল বিষয় ছিল। ধন্যবাদ!
ট্রে হানার

আপনি কীভাবে এটি ছাড়া করবেন confirm-before? সঠিকভাবে পালানোর জন্য আমার সমস্যা হচ্ছে।
মাইল

2
@ মাইলস: এটি ব্যবহার করে দেখুন: bind-key X run-shell 'tmux switch-client -n \; kill-session -t "#S"'( tmux 1.8+ সরাসরি run-shellপ্রসারিত #Sহয়, তাই আমরা display-messageএর অতিরিক্ত উদ্ধৃতিটি বাদ দিতে পারি )
ক্রিস জনসন

1

ঠিক যদি কেউ এই প্রশ্নটিতে হোঁচট খায় - tmux-sessionist অন্য অনেকের সাথে এই কার্যকারিতা সরবরাহ করে।


0

আরও একটি প্রশ্ন রয়েছে যা অনুরূপ প্রশ্ন জিজ্ঞাসা করে তবে এটি কিছুটা আলাদা।

যদি আপনি choose-sessionঅতিরিক্ত বৈশিষ্ট্যটির সাথে মানক আচরণ চান যা মূল সেশনটি মেরে ফেলে যদি অন্য কোনও ক্লায়েন্ট এতে যুক্ত থাকে না তবে সেই প্রশ্নটিও আগ্রহী হতে পারে।


0

প্রম্পট ছাড়াই কীভাবে এটি করা যায় তা সম্পর্কে উপরের ক্রিস জনসনের উত্তর (মন্তব্যগুলিতে) থেকে প্রসারিত করা বা confirm-before:

bind-key X run-shell 'tmux switch-client -n \; kill-session -t "#S"'

যদি কেবলমাত্র 1 টি অধিবেশন অবশিষ্ট থাকে (আপনি বর্তমানে যে অধিবেশনটি রয়েছেন) এবং আপনি কমান্ডটি চালান, আপনি একটি "ত্রুটি" বার্তা পাবেন এবং সেশনটি হত্যা করা হবে না। সাধারণত (আপনি যদি আমার মতো হন) আপনি সেশনটি সরিয়ে রাখতে কমান্ডটি চান তা সত্ত্বেও অন্য কোনও অধিবেশন না যেতে পারে। সুতরাং আমি এখানে যা নিয়ে আসছি তা এখানে:

bind-key X if-shell '[ $(tmux list-sessions | wc -l) -ne 1 ]' \
                    "run-shell 'tmux switch-client -n \\\; kill-session -t \"#S\"'" \
                    "run-shell 'tmux kill-session -t \"#S\"'"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.