Skip to content

Commit fe8f0cf

Browse files
committed
Implement plumbing for setting the terminal window title text.
(It's not hooked up to the actual UI yet.)
1 parent 63cd012 commit fe8f0cf

File tree

7 files changed

+979
-899
lines changed

7 files changed

+979
-899
lines changed

libraries/emulatorview/src/jackpal/androidterm/emulatorview/EmulatorView.java

Lines changed: 13 additions & 898 deletions
Large diffs are not rendered by default.

libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermKeyListener.java

Lines changed: 910 additions & 0 deletions
Large diffs are not rendered by default.

libraries/emulatorview/src/jackpal/androidterm/emulatorview/TermSession.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ public void handleMessage(Message msg) {
115115
}
116116
};
117117

118+
private TitleChangedListener mTitleChangedListener;
119+
118120
public TermSession() {
119121
mWriteCharBuffer = CharBuffer.allocate(2);
120122
mWriteByteBuffer = ByteBuffer.allocate(4);
@@ -209,6 +211,7 @@ public void initializeEmulator(int columns, int rows) {
209211
mTranscriptScreen = new TranscriptScreen(columns, TRANSCRIPT_ROWS, rows, mColorScheme);
210212
mEmulator = new TerminalEmulator(this, mTranscriptScreen, columns, rows, mColorScheme);
211213
mEmulator.setDefaultUTF8Mode(mDefaultUTF8Mode);
214+
mEmulator.setTitleChangedListener(mTitleChangedListener);
212215

213216
mIsRunning = true;
214217
mReaderThread.start();
@@ -365,6 +368,19 @@ protected void notifyUpdate() {
365368
}
366369
}
367370

371+
/**
372+
* Set a {@link TitleChangedListener} to be invoked when the terminal emulator's
373+
* title is changed.
374+
*
375+
* @param listener The {@link TitleChangedListener} to be invoked on changes.
376+
*/
377+
public void setTitleChangedListener(TitleChangedListener listener) {
378+
mTitleChangedListener = listener;
379+
if (mEmulator != null) {
380+
mEmulator.setTitleChangedListener(listener);
381+
}
382+
}
383+
368384
/**
369385
* Change the terminal's window size. Will call {@link #initializeEmulator}
370386
* if the emulator is not yet running.

libraries/emulatorview/src/jackpal/androidterm/emulatorview/TerminalEmulator.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,9 @@ class TerminalEmulator {
350350
private CharsetDecoder mUTF8Decoder;
351351
private UpdateCallback mUTF8ModeNotify;
352352

353+
354+
private TitleChangedListener mTitleChangedListener;
355+
353356
/**
354357
* Construct a terminal emulator that uses the supplied screen
355358
*
@@ -1295,7 +1298,7 @@ private void doOSC() { // Operating System Controls
12951298

12961299
private void changeTitle(int parameter, String title) {
12971300
if (parameter == 0 || parameter == 2) {
1298-
logError("Change the window title:" + title);
1301+
notifyTitleChanged(title);
12991302
}
13001303
}
13011304

@@ -1749,4 +1752,24 @@ public void setColorScheme(ColorScheme scheme) {
17491752
public String getSelectedText(int x1, int y1, int x2, int y2) {
17501753
return mScreen.getSelectedText(x1, y1, x2, y2);
17511754
}
1755+
1756+
/**
1757+
* Set a {@link TitleChangedListener} to be invoked when the terminal emulator's
1758+
* title is changed.
1759+
*
1760+
* @param listener The {@link TitleChangedListener} to be invoked on changes.
1761+
*/
1762+
public void setTitleChangedListener(TitleChangedListener listener) {
1763+
mTitleChangedListener = listener;
1764+
}
1765+
1766+
/**
1767+
* Notify the {@link TitleChangedListener} registered by {@link
1768+
* #setUpdateCallback setTitleChangedListener} that the title has changed.
1769+
*/
1770+
private void notifyTitleChanged(String newTitle) {
1771+
if (mTitleChangedListener != null) {
1772+
mTitleChangedListener.onTitleChanged(newTitle);
1773+
}
1774+
}
17521775
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package jackpal.androidterm.emulatorview;
2+
3+
public interface TitleChangedListener {
4+
public void onTitleChanged(String newTitle);
5+
}

src/jackpal/androidterm/TermView.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,26 @@
1818

1919
import android.content.Context;
2020
import android.util.DisplayMetrics;
21+
import android.util.Log;
2122

2223
import jackpal.androidterm.emulatorview.ColorScheme;
2324
import jackpal.androidterm.emulatorview.EmulatorView;
2425
import jackpal.androidterm.emulatorview.TermSession;
26+
import jackpal.androidterm.emulatorview.TitleChangedListener;
2527

2628
import jackpal.androidterm.util.TermSettings;
2729

2830
public class TermView extends EmulatorView {
31+
private static final String TAG = "TermView";
32+
2933
public TermView(Context context, TermSession session, DisplayMetrics metrics) {
3034
super(context, session, metrics);
35+
setTitleChangedListener(
36+
new TitleChangedListener(){
37+
public void onTitleChanged(String newTitle) {
38+
Log.w(TAG, "Title changed: " + newTitle);
39+
}
40+
});
3141
}
3242

3343
public void updatePrefs(TermSettings settings, ColorScheme scheme) {

tests/setTitle.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
]0;I am a title\Window title should now be 'I am a title'.

0 commit comments

Comments
 (0)