1 /*
2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7 #include "TitlePlaceholderMapper.h"
8
9 #include <Catalog.h>
10
11 #include "TermConst.h"
12
13
14 // #pragma mark - TitlePlaceholderMapper
15
16
TitlePlaceholderMapper(const ShellInfo & shellInfo,const ActiveProcessInfo & processInfo)17 TitlePlaceholderMapper::TitlePlaceholderMapper(const ShellInfo& shellInfo,
18 const ActiveProcessInfo& processInfo)
19 :
20 fShellInfo(shellInfo),
21 fProcessInfo(processInfo)
22 {
23 }
24
25
26 bool
MapPlaceholder(char placeholder,int64 number,bool numberGiven,BString & _string)27 TitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number,
28 bool numberGiven, BString& _string)
29 {
30 switch (placeholder) {
31 case 'd':
32 {
33 // current working directory
34
35 // If a number is given, extract the respective number of rightmost
36 // components.
37 BString directory(fProcessInfo.CurrentDirectory());
38 if (numberGiven && number > 0) {
39 int32 index = directory.Length();
40 while (number > 0 && index > 0) {
41 index = directory.FindLast('/', index - 1);
42 number--;
43 }
44
45 if (number == 0 && index >= 0 && index + 1 < directory.Length())
46 directory.Remove(0, index + 1);
47 }
48
49 _string = directory;
50 return true;
51 }
52
53 case 'e':
54 if (fShellInfo.Encoding() != M_UTF8) {
55 _string.Truncate(0);
56 _string << "[" << fShellInfo.EncodingName() << "]";
57 }
58 return true;
59
60 case 'p':
61 // process name -- use "--", if the shell is active and it is the
62 // default shell
63 if (fProcessInfo.ID() == fShellInfo.ProcessID()
64 && fShellInfo.IsDefaultShell()) {
65 _string = "--";
66 } else
67 _string = fProcessInfo.Name();
68 return true;
69 }
70
71 return false;
72 }
73
74
75 // #pragma mark - WindowTitlePlaceholderMapper
76
77
WindowTitlePlaceholderMapper(const ShellInfo & shellInfo,const ActiveProcessInfo & processInfo,int32 windowIndex,const BString & tabTitle)78 WindowTitlePlaceholderMapper::WindowTitlePlaceholderMapper(
79 const ShellInfo& shellInfo, const ActiveProcessInfo& processInfo,
80 int32 windowIndex, const BString& tabTitle)
81 :
82 TitlePlaceholderMapper(shellInfo, processInfo),
83 fWindowIndex(windowIndex),
84 fTabTitle(tabTitle)
85 {
86 }
87
88
89 bool
MapPlaceholder(char placeholder,int64 number,bool numberGiven,BString & _string)90 WindowTitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number,
91 bool numberGiven, BString& _string)
92 {
93 switch (placeholder) {
94 case 'T':
95 // The Terminal application name for the current locale
96 _string = B_TRANSLATE_SYSTEM_NAME("Terminal");
97 return true;
98
99 case 'i':
100 // window index
101 _string.Truncate(0);
102 if (fWindowIndex != 0)
103 _string << fWindowIndex;
104 return true;
105
106 case 't':
107 // the tab title
108 _string = fTabTitle;
109 return true;
110 }
111
112 return TitlePlaceholderMapper::MapPlaceholder(placeholder, number,
113 numberGiven, _string);
114 }
115
116
117 // #pragma mark - TabTitlePlaceholderMapper
118
119
TabTitlePlaceholderMapper(const ShellInfo & shellInfo,const ActiveProcessInfo & processInfo,int32 tabIndex)120 TabTitlePlaceholderMapper::TabTitlePlaceholderMapper(const ShellInfo& shellInfo,
121 const ActiveProcessInfo& processInfo, int32 tabIndex)
122 :
123 TitlePlaceholderMapper(shellInfo, processInfo),
124 fTabIndex(tabIndex)
125 {
126 }
127
128
129 bool
MapPlaceholder(char placeholder,int64 number,bool numberGiven,BString & _string)130 TabTitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number,
131 bool numberGiven, BString& _string)
132 {
133 switch (placeholder) {
134 case 'i':
135 // tab index
136 _string.Truncate(0);
137 _string << fTabIndex;
138 return true;
139 }
140
141 return TitlePlaceholderMapper::MapPlaceholder(placeholder, number,
142 numberGiven, _string);
143 }
144