Skip to content

Commit 9cb730f

Browse files
authored
Add ability to prevent terminal title updates from ANSI Escape sequence
When a more complete implementation of ANSI Escape sequence for renaming terminal titles was added in [CDT 10.2](https://github.com/eclipse-cdt/cdt/blob/main/NewAndNoteworthy/CDT-10.2.md#rename-terminal-tab) it caused a regression in use cases where extenders of the terminal wanted to retain control of the terminal's title. This commit adds a new flag that will prevent the title of the terminal tab from being updated from ANSI escape sequences. Fixes #494
1 parent be7969e commit 9cb730f

File tree

8 files changed

+89
-7
lines changed

8 files changed

+89
-7
lines changed

terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %pluginName
44
Bundle-SymbolicName: org.eclipse.tm.terminal.control; singleton:=true
5-
Bundle-Version: 5.4.100.qualifier
5+
Bundle-Version: 5.5.0.qualifier
66
Bundle-Activator: org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin
77
Bundle-Vendor: %providerName
88
Bundle-Localization: plugin

terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ public interface ITerminalListener {
2828
void setState(TerminalState state);
2929

3030
/**
31-
* Set the title of the terminal.
31+
* @deprecated Migrate to implementing {@link ITerminalListener3} and
32+
* override {@link ITerminalListener3#setTerminalTitle(String, String)
3233
* @param title
3334
*/
35+
@Deprecated(forRemoval = true)
3436
void setTerminalTitle(String title);
3537
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2023 Infineon Technologies AG. All Rights Reserved.
3+
*
4+
* This program and the accompanying materials are made available under the terms
5+
* of the Eclipse Public License 2.0 which accompanies this distribution, and is
6+
* available at https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*******************************************************************************/
10+
package org.eclipse.tm.internal.terminal.control;
11+
12+
/**
13+
* Terminal listener allowing to listen to terminal selection changes.
14+
* The interface overrides the deprecated {@link #setTerminalTitle(String)} with
15+
* {@link #setTerminalTitle(String, String)} that should be called instead.
16+
*
17+
* @since 5.5
18+
*/
19+
public interface ITerminalListener3 extends ITerminalListener2 {
20+
21+
/**
22+
* Enum defines terminal title change requestors for
23+
* setTerminalTitle method.
24+
*
25+
* @since 5.5
26+
*/
27+
enum TerminalTitleRequestor {
28+
ANSI, // Terminal tab title change requested using ANSI command in terminal.
29+
MENU, // Terminal tab title change requested from menu.
30+
OTHER; // Terminal tab title change requested by other requestors.
31+
}
32+
33+
/**
34+
* Set the title of the terminal.
35+
*
36+
* @param title Terminal title.
37+
* @param requestor Item that requests terminal title update.
38+
*/
39+
void setTerminalTitle(String title, TerminalTitleRequestor requestor);
40+
}

terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.eclipse.swt.dnd.Clipboard;
2323
import org.eclipse.swt.graphics.Font;
2424
import org.eclipse.swt.widgets.Control;
25+
import org.eclipse.tm.internal.terminal.control.ITerminalListener3.TerminalTitleRequestor;
2526
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
2627
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
2728
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
@@ -192,9 +193,19 @@ public interface ITerminalViewControl {
192193

193194
/**
194195
* @since 5.1
196+
* @deprecated call {@link #setTerminalTitle(String, String)} instead
195197
*/
198+
@Deprecated(forRemoval = true)
196199
void setTerminalTitle(String newTitle);
197200

201+
/**
202+
* Set the title of the terminal.
203+
* @param newTitle
204+
* @param requestor Item that requests terminal title update.
205+
* @since 5.5
206+
*/
207+
void setTerminalTitle(String newTitle, TerminalTitleRequestor requestor);
208+
198209
/**
199210
* @since 5.2
200211
*/

terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import java.io.OutputStream;
1616

17+
import org.eclipse.tm.internal.terminal.control.ITerminalListener3.TerminalTitleRequestor;
1718
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
1819
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
1920

@@ -28,7 +29,13 @@ public interface ITerminalControlForText {
2829

2930
void setState(TerminalState state);
3031

31-
void setTerminalTitle(String title);
32+
/**
33+
* Set the title of the terminal.
34+
*
35+
* @param title Termianl title.
36+
* @param requestor Item that requests terminal title update.
37+
*/
38+
void setTerminalTitle(String title, TerminalTitleRequestor requestor);
3239

3340
ITerminalConnector getTerminalConnector();
3441

terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100Emulator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.eclipse.swt.events.ControlEvent;
4646
import org.eclipse.swt.events.ControlListener;
4747
import org.eclipse.swt.graphics.RGB;
48+
import org.eclipse.tm.internal.terminal.control.ITerminalListener3.TerminalTitleRequestor;
4849
import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
4950
import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
5051
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
@@ -486,7 +487,7 @@ private void processAnsiOsCommand() {
486487
Logger.log("Ignoring unsupported ANSI OSC sequence: '" + ansiOsCommand + "'"); //$NON-NLS-1$ //$NON-NLS-2$
487488
return;
488489
}
489-
terminal.setTerminalTitle(ansiOsCommand.substring(2));
490+
terminal.setTerminalTitle(ansiOsCommand.substring(2), TerminalTitleRequestor.ANSI);
490491
}
491492

492493
/**

terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@
9898
import org.eclipse.tm.internal.terminal.control.ICommandInputField;
9999
import org.eclipse.tm.internal.terminal.control.ITerminalListener;
100100
import org.eclipse.tm.internal.terminal.control.ITerminalListener2;
101+
import org.eclipse.tm.internal.terminal.control.ITerminalListener3;
102+
import org.eclipse.tm.internal.terminal.control.ITerminalListener3.TerminalTitleRequestor;
101103
import org.eclipse.tm.internal.terminal.control.ITerminalMouseListener;
102104
import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
103105
import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
@@ -1261,7 +1263,17 @@ private void processKeyBinding(KeyEvent event, int accelerator) {
12611263

12621264
@Override
12631265
public void setTerminalTitle(String title) {
1264-
fTerminalListener.setTerminalTitle(title);
1266+
setTerminalTitle(title, TerminalTitleRequestor.OTHER);
1267+
}
1268+
1269+
@Override
1270+
public void setTerminalTitle(String title, TerminalTitleRequestor requestor) {
1271+
if (fTerminalListener instanceof ITerminalListener3 listener3) {
1272+
listener3.setTerminalTitle(title, requestor);
1273+
} else {
1274+
fTerminalListener.setTerminalTitle(title);
1275+
}
1276+
12651277
}
12661278

12671279
@Override

terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.eclipse.swt.widgets.Composite;
2424
import org.eclipse.swt.widgets.Shell;
25+
import org.eclipse.tm.internal.terminal.control.ITerminalListener3.TerminalTitleRequestor;
2526

2627
/**
2728
* Represents the terminal view as seen by a terminal connection.
@@ -155,11 +156,19 @@ public interface ITerminalControl {
155156
OutputStream getRemoteToTerminalOutputStream();
156157

157158
/**
158-
* Set the title of the terminal view.
159-
* @param title
159+
* @deprecated call {@link #setTerminalTitle(String, String)} instead
160160
*/
161+
@Deprecated(forRemoval = true)
161162
void setTerminalTitle(String title);
162163

164+
/**
165+
* Set the title of the terminal view.
166+
* @param title Termianl title.
167+
* @param requestor Item that requests terminal title update.
168+
* @since 5.5
169+
*/
170+
void setTerminalTitle(String title, TerminalTitleRequestor requestor);
171+
163172
/**
164173
* Show an error message during connect.
165174
* @param msg

0 commit comments

Comments
 (0)