Tmux में माउस के साथ स्क्रॉल शेल आउटपुट


255

माउस स्क्रॉल में काम नहीं करता tmux जिस तरह से यह काम करता है जब मैं tmux बिना खोल चलाने (ग्नोम टर्मिनल में)। ऐसा लगता है कि tmux माउस स्क्रॉल ईवेंट भेजता है जैसे कि मैंने ऊपर / नीचे कीज़ दबाया हो। लेकिन मैं चाहता हूं कि यह शेल आउटपुट हिस्ट्री को स्क्रॉल करे । क्या इस तरह से tmux बनाने का कोई तरीका है?

नोट: मुझे पता है कि कीबोर्ड के साथ कैसे स्क्रॉल किया जाता है ( यहां एक और सवाल के लिए धन्यवाद )।

मैंने tmux के दो संस्करणों में माउस स्क्रॉलिंग की कोशिश की:


1
मुझे लगता है कि bukzor का उत्तर tmux 1.5 और नए के लिए आपकी समस्या को हल करता है।
kynan

जवाबों:


252

आउटपुट के इतिहास में स्क्रॉल करने के लिए आप ^b+ का उपयोग [ कर सकते हैं और फिर पेज के लिए M + V का उपयोग कर सकते हैं और ^ V से पेज डाउन करने के लिए। मुझे नहीं पता कि आप असली PgUpऔर PgDownयद्यपि का उपयोग कर सकते हैं । मेरा टर्मिनल इन कुंजियों को tmux पर नहीं भेजता है। इसके बजाय यह खुद को स्क्रॉल करता है और tmux इतिहास को नहीं।

कॉपी मोड से बाहर निकलने के लिए, ESC दबाएँ

इस मोड में अपने माउस का उपयोग करने के लिए (कॉपी मोड कहा जाता है) ^b+ दबाएं : और निम्नलिखित दर्ज करें:

setw -g mouse on

नोट: tmux <2.1 में, विकल्प का नाम दिया गया था mode-mouse, और नहींmouse

अब जब आप कॉपी मोड में बदल जाते हैं, तो आप अपने माउस को इसके माध्यम से स्क्रॉल करने के लिए उपयोग कर सकते हैं। इस कमांड को आप अपने ~ / .tmux.conf में डाल सकते हैं यदि आप चाहें तो हर बार लोड होने पर आप tmux चलाते हैं।

अद्यतन: 1.5 tmux के रूप में यह विकल्प स्क्रॉल व्हील का उपयोग करके स्वचालित रूप से कॉपी मोड में स्विच करता है और tmux स्क्रॉलबैक बफर को वापस स्क्रॉल करता है। पहले हिट Ctrl-B+ [किसी भी अधिक करना आवश्यक नहीं है । प्रॉम्प्ट पर वापस स्क्रॉल करने से कॉपी मोड भी स्वतः समाप्त हो जाता है।


1
ध्यान दें कि यदि आपके पास पहले से चल रहा tmux सर्वर है तो आपको कॉन्फिग फ़ाइल को फिर से लोड करना पड़ सकता है। blog.sanctum.geek.nz/reloading-tmux-config tmux स्रोत-फ़ाइल ~ / .tmux.conf
एलन Nienhuis

7
ओएस एक्स पर मेरे लिए काम नहीं कर रहा है
ऐन

2
@ ऐन - अब ओएस एक्स के 11 प्रमुख संस्करण हैं। हम किस संस्करण के बारे में बात कर रहे हैं?
रामहाउंड

10
Tmux> = 2.1 के लिए, @ DannyRe का उत्तर देखें (वर्तमान में काफी नीचे)।
joelostblom

3
set -g mouse onमेरे लिए macOS tmux 2.1 पर काम किया
मिगुएल मोटा

123

Tmux 2.1 के लिए कुछ बदलाव हैं

  • माउस-मोड को फिर से लिखा गया है। अब इसके लिए कोई विकल्प नहीं है:

    • माउस आकार फलक
    • माउस का चयन फलक
    • माउस का चयन खिड़की
    • मोड माउस

    इसके बजाय सिर्फ एक विकल्प है: 'माउस' जो पूरी तरह से माउस समर्थन को चालू करता है।

यह होगा

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

6
धन्यवाद, अब पैन का चयन, आदि काम करते हैं, लेकिन स्क्रॉल नहीं करता है। स्क्रॉलिंग कार्य को फिर से बनाने के लिए, इसका उपयोग करें: github.com/NHDaly/tmux-scroll-copy-mode
Mahdi

1
कमाल - यह भी साइबर पर काम करता है - WINDOWS 7 पर tmux
GWD

@ मेहदी यह ओएक्सएक्स पर काम नहीं करता है। कोई संकेत?
दियोटी

2
bindअब tmux 2.3
थेरॉन Luhn

2
के लिए +1 set -g mouse on। पिछली टिप्पणी सही है। बाँध की अब जरूरत नहीं है।
दक्खन

63

Tmux (1.5) का वर्तमान संस्करण आपको बस मोड-माउस विकल्प को चालू करने देता है, और आपको माउस व्हील के साथ स्क्रॉल करने की अनुमति देता है।

         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

मेरे .tmux.conf में:

set-window-option -g mode-mouse on

यही वह व्यवहार है जो आप वास्तव में चाहते हैं! माउस स्क्रॉल कॉपी मोड को सक्षम करता है, न कि केवल शेल वैकल्पिक बफर को स्क्रॉल करना। वह अंत में मेरे लिए स्क्रीन से tmux में स्विच करने का प्रोत्साहन था। क्या शिफ्ट + PgUp के साथ भी समान व्यवहार प्राप्त करने का विकल्प है?
kynan

1
@kynan: मैं व्यक्तिगत रूप C-A PgUpसे ऐसा करने के लिए सिर्फ प्रेस करता हूं। आप सीधे पेज-अप कुंजी को बांध सकते हैं tmux bind-key -n PPage copy-mode -u। यदि आप अपने स्थानीय टर्मिनल से अन-बाइंड करते हैं, तो इसी तरह की शिफ्ट शिफ्ट + पेजअप के लिए काम करना चाहिए।
बूकॉर

1
यह एक अजीब व्यवहार का परिणाम है, जहां जब मैं कमांड लाइन पर वापस स्क्रॉल करता हूं, तो मुझे सीएलआई में डाला गया एक अतिरिक्त चरित्र मिलता है, जिसके परिणामस्वरूप आमतौर पर मेरा पहला कमांड विकृत हो जाता है। यह बहुत कष्टप्रद है।
क्रिस आर

ध्यान दें, हालांकि यह माउस के साथ स्क्रॉल को ट्रिगर करने के लिए ठीक काम करता है, यह पाठ को मध्य-क्लिक के साथ चिपकाए जाने पर अजीब व्यवहार का कारण बनता है। ट्रेडऑफ स्वीकार्य नहीं होने के कारण मैंने Cb pg-up / down (डिफ़ॉल्ट) को समाप्त कर दिया।
hrr

@ क्रिस मुझे यह थोड़ा बहुत मिलता है और यह काफी सुसंगत नहीं है। क्या यह एक [M [M [M # [M [M # [M [M # [M [M [[M] स्ट्रिंग का प्रकार है?
एलिजा लिन

53

अपने .tmux.conf में यह कोशिश करें

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

Http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY से लिया गया


+1 की escape-timeस्थापना के लिए
डाकुसन

किसी और को आश्चर्यचकित करने के लिए, .tmux.conf फ़ाइल को आपके होम डायरेक्टरी में रखा जाता है।
user2647513 14

15

किसी ने (मेरे द्वारा खोए गए स्रोत से) निम्नलिखित को जोड़ने का सुझाव दिया ~.tmux.conf:

set -g terminal-overrides 'xterm*:smcup@:rmcup@'

मुझे नहीं पता कि यह कैसे काम करता है या क्या करता है, लेकिन यह अब मुझे tmux के कॉपी मोड में प्रवेश किए बिना tmux सेशन के अंदर माउस व्हील के साथ स्क्रॉल करने की अनुमति देता है; मैं बस पहिया और BAM स्क्रॉल करता हूं! यह काम करता हैं। ध्यान दें कि मैं Terminal.app का उपयोग कर रहा हूं, लेकिन मुझे याद है कि ओपी ने विशेष रूप से उपयोग के लिए उत्तर दिया था gnome-terminal


1
जेड, धन्यवाद! आपकी सलाह सूक्ति-टर्मिनल में भी काम करती है। मैं कुछ समय के लिए इस सेटअप का उपयोग करने का प्रयास करूंगा। लेकिन इसका एक नुकसान है: माउस स्क्रॉलिंग अब अपेक्षित रूप से काम नहीं करता है less। यदि मैं lessअंदर लोड tmuxकरता हूं , तो माउस स्क्रॉलिंग खोली गई फ़ाइल को स्क्रॉल नहीं करता है less। यह पूरे टर्मिनल को स्क्रॉल करता है। अजीब तरह से, अपने सेटअप के साथ vimअंदर की उम्मीद के अनुसार व्यवहार करता है tmux
user31494

2
ध्यान दें कि tmux 1.5 के रूप में यह setw -g mode-mouse onविकल्प द्वारा अलग किया गया है, जो माउस व्हील का उपयोग करके कॉपी मोड स्क्रॉलबैक करता है।
kynan 13

3
स्पष्टीकरण यह है कि यह विकल्प टर्मिनल के वैकल्पिक स्क्रीन पर स्क्रॉल लॉक को अक्षम करता है, जो कि ज्यादातर मामलों में वांछनीय है क्योंकि वैकल्पिक स्क्रीन बफर (vi, कम, tmux आदि) का अनुरोध करने वाले अनुप्रयोग अपनी स्वयं की स्क्रॉलिंग क्षमता प्रदान करते हैं। Tmux में इस लॉक को ओवरराइड करने से टर्मिनल के वैकल्पिक स्क्रीन बफर को स्क्रॉल करने की अनुमति मिलती है जो सभी मामलों में वांछित परिणाम नहीं देता है लेकिन कुछ मामलों में। वैकल्पिक स्क्रीन को समझाने से उद्धरण के लिए यह उत्तर देखें man xterm
kynan

काश, यह iTerm
Suan

मैं iTerm 2 में इस के साथ सकारात्मक परिणाम मिला है
कीथ स्माइली

5

tmux 2.1 नए माउस बाइंड का परिचय देता है।

मैंने इन बंधनों को आज ही लिखा है। यह मूल रूप से विम में नहीं होने पर माउस व्हील को तीर से बांधता है, क्योंकि विम कच्चे माउस व्हील कोड की व्याख्या करने में सक्षम है (ऐसे उद्देश्यों के लिए जो चुनने के लिए विम विंडो आपके लिए स्क्रॉल करता है जिसके आधार पर आपका माउस खत्म हो गया है)।

इसका अर्थ है कि हम अंततः माउस का उपयोग केवल कई मैन पेज देखने के लिए कर सकते हैं और जो कुछ भी तीर कुंजी को स्वीकार करता है। आप ifअपने अनुप्रयोगों के लिए अधिक तर्क को लागू करने के लिए तर्क को आवश्यक रूप से विस्तारित और श्रृंखलाबद्ध कर सकते हैं।

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

इस नए व्हील बाइंडिंग क्षमता के साथ माउस व्हील को किसी भी संदर्भ संवेदनशील व्यवहार को करने के लिए स्क्रिप्ट करना संभव है जो आपको पसंद है।


अब मैं बस बॉर्डर पर पान बॉर्डर पर मूसली बनाने के विचार के साथ कुछ दिलचस्प करने की कोशिश कर रहा हूं। संभवत: मैं जो करूंगा वह सीमा पर मैप व्हील नहीं है, लेकिन स्टेटसलाइन पर किए जाने पर tmux विंडो को साइकल करने के लिए इसे मैप करें।
स्टीवन लू

आपके जीथुब का लिंक क्या है? मैं आपके प्रयासों के बराबर रखना चाहता हूँ! एक अन्य विशेषता जो मैं देख रहा हूं, वह है एक्स-क्लिपबोर्ड पर शब्द को डबल-क्लिक करने के लिए, जैसे कि वह टमक्स के बाहर करता है।
joeytwield

@joeytwiddle मैं अत्यधिक github.com/NHDaly/tmux-better-mouse-mode की सलाह देता हूं, मेरे अन्य उत्तर देखें
स्टीवन लू

3

गनोम-टर्मिनल कुछ साफ-सुथरी चालबाजी करता है जो माउस स्क्रॉलिंग ईवेंट्स को प्रतिबंधित "सामान्य" स्क्रॉलिंग की स्थिति में अप और डाउन एरो कीज़ में ट्रांसलेट करता है। उदाहरण के लिए, जब आप कुछ का उपयोग कर पाठ को देखने less(यह विशेष रूप से होता है जब आप एक आदमी पढ़ रहे हैं), तो आप का उपयोग कर सामग्री स्क्रॉल कर सकते हैं j, kऔर तीर कुंजी। लेकिन यह भी , साथ gnome-terminal, आप कर सकते हैं माउस स्क्रॉल के साथ कि, उल्लेख किया चाल के लिए धन्यवाद।

तो मुझे लगता tmuxहै कि टर्मिनल में कुछ "कैप्चरिंग" जैसा है less- और gnome-terminalकिक में समान तंत्र : माउस स्क्रॉलिंग अप / डाउन एरो की प्रेस में अनुवाद करता है।

आप इस सुविधा को प्रोफ़ाइल सेटिंग में बंद कर सकते हैं और किसी भी परिस्थिति में नियमित स्क्रॉलिंग प्राप्त कर सकते हैं। बस "स्क्रॉलिंग" टैब में अंतिम चेकबॉक्स को चिह्नित करें चेकबॉक्स:।


स्पष्टीकरण के लिए धन्यवाद, uldtko! लेकिन यह माउस स्क्रॉलिंग समस्या में मदद नहीं करता है। हां, विकल्प बंद होने के साथ, gnome-terminalट्रिपल ^[[Aऔर ^[[Bमाउस-स्क्रॉल पर भेजना बंद हो जाता है । यह अच्छे है tmux( ^[[A^[[A^[[Aकुछ कार्यक्रमों में कोई बदसूरत नहीं, कोई बदसूरत कमांड-हिस्ट्री-स्क्रॉलिंग नहीं है), लेकिन अब lessमाउस-स्क्रॉल पर स्क्रॉल करना बंद कर देता है।
14

1
यूक्रेनियाई? (द्वारा अनुमान लगा iअक्षर)
dotancohen

1

https://github.com/NHDaly/tmux-better-mouse-mode

नए tmuxes के लिए माउस नियंत्रण का विन्यास और सुविधा संपन्न कार्यान्वयन। अत्यधिक सिफारिशित।

आप संभवतः उपयोग करना चाहते हैं

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

इसके साथ भी।


मैंने इसे स्थापित किया है लेकिन अब माउस के साथ टेक्स्ट को हाइलाइट और कॉपी करने में सक्षम नहीं हूं। क्या आप ऐसा कर पा रहे हैं?
१।

हां, आपके पास अन्य माउस संबंधित tmux कॉन्फिग मौजूद है जो इसके साथ संघर्ष करता है।
स्टीवन लू

0

आप बहुत संतोषजनक स्क्रॉलिंग व्यवहार प्राप्त करने के लिए अन्य उत्तरों से बाध्यकारी विचारों को जोड़ सकते हैं: टर्मिनल में स्वचालित रूप से कॉपी मोड में बदलाव के लिए काम करता है और इसे तब बाहर निकालता है जब आप नीचे तक पहुंचते हैं फिर भी आप अपने मूसवेल का उपयोग आदमी, कम और जर्नल में करने की अनुमति देते हैं।

मेरा कोड:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

आप grep -e 'man' भाग में स्क्रॉल करने के लिए तीर कुंजियों की आवश्यकता वाले अन्य आदेश जोड़ सकते हैं

मैंने कई बार सेंड-कीज जोड़ीं, इसलिए मूसवेल पर एक टिक एक बार में 4 लाइनों को स्क्रॉल करेगा


0

यदि आप पहले से ही tmux सेशन में हैं तो आप कमांड चला सकते हैं

set mouse on

अनुस्मारक: कमांड चलाने के लिए, अपने उपसर्ग का उपयोग करें :

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.