次の制御シーケンスを使用して設定し、XTermのシェル(BASH)でコマンドラインをクリックします。カーソルをこの位置に移動します。。少なくとも私が持っていた古代のFedora 18ではそれがうまくいきました。 (私は非常に長いパイプラインを作成する傾向があるため、この機能は長年使用して完全に慣れてきたので、私にとっては素晴らしく重要です。)
「ターゲットクリック」機能を有効にするにはどうすればよいですか(通常はPS1
BASH変数で):
\[\e[?2001;2002;2003;2004;2005;2006s\e[?2001;2002;2003h\]
そして、元の保存状態を復元します(通常PS0
はシェルで実行されるコマンドに影響を与えないため)。
\[\e[?2001;2002;2003;2004;2005;2006r\]
実験に使用したエイリアスは次のとおりです。
alias tmouseon='printf -- '\''\e[2001;2002;2003;2004;2005;2006s\e[?2001;2002;2003h'\'''
alias tmouseoff='printf -- '\''\e[?2001;2002;2003;2004;2005;2006r'\'''
以下は私のXTerm設定です。一部はこの問題に関連している可能性がありますが、XTermのマニュアルによると、私の設定に問題を引き起こす可能性がある他のオプションやオプションが見つかりませんでした。また、xrdb -merge
私のXを知らないことに注意してください。リソースファイルを使用.xinitrc
しましたがxrdb
、ディストリビューションのデフォルト設定が気に入らず、ディストリビューションへのフルアクセスを望んでいたため、何年も問題なく使用してきました。
! Init
XTerm.ptyInitialErase: true
XTerm.waitForMap: true
! Buffers
XTerm.buffered: true
XTerm.bufferedFPS: 100
XTerm.maxBufSize: 131072
XTerm.minBufSize: 8192
! TERMINAL
! Name
XTerm.VT100.termName: xterm-256color
! Session
XTerm.VT100.loginShell: true
! Features
XTerm.VT100.allowFontOps: true
XTerm.VT100.allowMouseOps: true
XTerm.VT100.allowTcapOps: true
XTerm.VT100.allowTitleOps: true
XTerm.VT100.allowWindowOps: true
XTerm.VT100.c132: true
! Input
XTerm.VT100.backarrowKey: true
XTerm.VT100.backarrowKeyIsErase: true
! Scrolling
XTerm.VT100.scrollBar: false
XTerm.VT100.scrollTtyOutput: false
XTerm.VT100.allowScrollLock: true
! Screen buffer
XTerm.VT100.saveLines: 10000
! Alternate screen
XTerm.VT100.titeInhibit: true
XTerm.VT100.tiXtraScroll: true
! Visual bell
XTerm.VT100.visualBell: true
XTerm.VT100.visualBellLine: true
XTerm.VT100.visualBellDelay: 150
! Pointer shape
XTerm.VT100.pointerShape: hand1
! Margin bell
XTerm.VT100.marginBell: true
XTerm.VT100.nMarginBell: 8
! Cursor blinking
XTerm.VT100.cursorBlink: true
XTerm.VT100.cursorOffTime: 250
XTerm.VT100.cursorOnTime: 750
! Selection
XTerm.VT100.charClass: 33:48,36-47:48,58-59:48,61:48,63-64:48,95:48,126:48
XTerm.VT100.highlightReverse: false
XTerm.VT100.highlightSelection: true
XTerm.VT100.trimSelection: true
(色設定を省略...)
非常に古い(知っていますが、かなり「スパルタ」環境にあり、通常のツールを使用したとき)、Fedora 18ワークステーションを最新のFedora 36にアップグレードした後、マウスの機能はXTerm Clickのカーソルが機能しなくなり、見つかりませんでした。問題の根本原因。 (一生懸命修正しようとしましたが、完全に失敗しました。)機能を復元したいと思います。誰でも助けることができますか?
誰も同じ問題がありますか?どうやって分析しますか?
私の考えでは可能TermInfoで問題が発生しましたが、もう詳しく調べる方法がわかりません。
答え1
通常、他のディストリビューションに適用されるので、別の答えを残しておきます。この回答は、readline-button
Fedora 31で動作が停止した理由を説明しています。
rpmバージョン30をダウンロードしてローカルに解凍し、バイナリで「readline-button」を見つけましたxterm
。
rel=30; mkdir $rel; cd $rel
dnf download --disablerepo='*' --enablerepo=fedora --downloadonly \
--releasever=$rel xterm
rpm2cpio xterm-*fc$rel.x86_64.rpm | cpio -cdimB
strings usr/bin/xterm | grep readline-button
Fedora 30バイナリにはまだ表示されますが、Fedora 31バイナリでは消えました。
ソースrpmをダウンロードして解凍しました。
dnf download --disablerepo='*' --enablerepo=fedora-source \
--source --releasever=$rel xterm
HOME=$PWD rpm -i xterm-*fc$rel.src.rpm
HOME=$PWD rpmbuild -bp --nodeps rpmbuild/SPECS/xterm.spec
(cd rpmbuild/BUILD/; ln -s xterm-* xterm)
ソースを比較するとさまざまなバリエーションが表示されますが、これは関連性があるようです。
$ diff -wub {30,31}/rpmbuild/BUILD/xterm/ptyx.h
@@ -830,12 +845,6 @@
-#if OPT_PASTE64 && !OPT_READLINE
-/* OPT_PASTE64 uses logic from OPT_READLINE */
-#undef OPT_READLINE
-#define OPT_READLINE 1
-#endif
変更ログファイルには次のものがあります。
$ diff -wub {30,31}/rpmbuild/BUILD/xterm/xterm.log.html
+ <li>adjusted ifdef's so that the paste64 configure option does
+ not automatically enable the readline-mouse configure
+ option.</li>
タイトルの下パッチ #338 - 2018/12/09。 rpm仕様ファイルを比較すると、唯一の実際の違いは、xtermバージョン334からこの新しいパッチを含む346に移行されることです。
$ diff -wub {30,31}/rpmbuild/SPECS/xterm.spec
-Version: 334
+Version: 346
追加の手がかりは次のとおりです。
$ diff -wub {30,31}/rpmbuild/BUILD/xterm/INSTALL
--enable-readline-mouse enable support for mouse in readline applications
- Compile-in code to support experimental bracketed paste mode, i.e.,
+ Compile-in code to support predecessor to bracketed paste mode, i.e.,
provide functions for setting/getting the selection data. Essentially
this puts xterm into a mode that sends special function-key strings to
bracket the data.
- (See --enable-paste64, which fits xterm's protocol better).
+ (The "paste64" feature, which fits xterm's protocol better, is
+ configured by default).
仕様ファイルは、--enable-readline-mouse
構成に使用されたことがないことを示しています31/rpmbuild/SPECS/xterm.spec
。
%configure \
--enable-meta-sends-esc \
--disable-backarrow-key \
--enable-256-color \
--enable-exec-xterm \
--enable-luit \
%{?with_trace: --enable-trace} \
--enable-warnings \
--enable-wide-chars \
--with-app-defaults=%{x11_app_defaults_dir} \
--with-icon-theme=hicolor \
--with-icondir=%{_datadir}/icons \
--with-utempter \
--with-tty-group=tty \
--disable-full-tgetent
このオプションがないとOPT_READLINE
ゼロと定義されるため、readline-buttonコードはコンパイルされません31/rpmbuild/BUILD/xterm-346/charproc.c
。たとえば、次のようになります。
#if OPT_READLINE
{ "readline-button", ReadLineButton },
#endif
結論として
Fedoraでは使用されません--enable-readline-mouse
。バージョン30より前は--enable-paste64
デフォルトで有効になっており、定義OPT_PASTE64
に使用されていたため、これは重要ではありませんOPT_READLINE
。バージョン 31 およびパッチ 338 ではこれ以上実行されないため、この機能は失われました。
解決策は--enable-readline-mouse
Fedora仕様ファイルに追加することです。
答え2
提供されたエスケープシーケンスに慣れていないがman xterm
便利な関数があります。
行読み取りボタン() ボタン解除イベントで繰り返されるカーソルの前方または後方の制御シーケンスをエコーし、ホストアプリケーションにボタンイベントと一致するようにカーソル位置の概念を更新するように要求することによって、オプションの読取り線機能をサポートします。
これを使用するには、適切な翻訳バインディングを追加するか、以下を使用してテストします-xrm
。
xterm -xrm 'XTerm.VT100.translations: #override\
Mod4 <Btn1Down>: readline-button()\n'
この例のバインディングでは、Meta(またはSuper)キーを使用して入力行の文字をマウスの左ボタンでクリックすると、xtermはカーソルが揃うまで左または右クリックを生成します。
man urxvt-readline
同様に、urxvtにはデフォルトで有効にされ、Shiftと左クリックをバインドする組み込みのPerl拡張(参考資料を参照)があります。