View Issue Details

IDProjectCategoryView StatusLast Update
0003424Far ManagerCommand Line/Executepublic2017-04-24 20:43
Reporterddv Assigned ToDrKnS  
PrioritynormalSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Platformx64OSWindowsOS Version10
Product Version3.0 
Fixed in Version3.0 
Summary0003424: Новый параметр командной строки для наследования заголовка консоли
DescriptionВо многих случаях было бы удобно запустить far.exe из уже исполняющейся консоли так, чтобы заголовок окна консоли остался таким, как был до его запуска. Для этого, по-моему, самый эффективный способ - иметь параметр командной строки для far.exe.
TagsNo tags attached.
Build4938

Activities

ddv

2017-04-22 04:17

reporter   bugnote:0015330

Прикрепляю patch

ddv

2017-04-22 04:18

reporter  

TitleSwitch.patch (2,639 bytes)   
Index: FarEng.hlf.m4
===================================================================
--- FarEng.hlf.m4	(revision 14757)
+++ FarEng.hlf.m4	(working copy)
@@ -250,6 +250,9 @@
   #/t templateprofile#
   Location of Far template configuration file - overrides Far.exe.ini.
 
+  #/title#
+  Inherit console window's title.
+
   #/clearcache [profilepath [localprofilepath]]#
   Clear plugins cache.
 
Index: FarRus.hlf.m4
===================================================================
--- FarRus.hlf.m4	(revision 14757)
+++ FarRus.hlf.m4	(working copy)
@@ -256,6 +256,9 @@
 если какой-либо из конфигурационных файлов не существует. Параметр templateprofile
 перекрывает значение TemplateProfile из Far.exe.ini.
 
+  #/title#
+  Наследовать заголовок окна консоли.
+
   #/clearcache [profilepath [localprofilepath]]#
   Очистить кэш плагинов и завершить работу.
   Необязательный параметр profilepath задаёт полный путь к конфигурационным файлам.
Index: main.cpp
===================================================================
--- main.cpp	(revision 14757)
+++ main.cpp	(working copy)
@@ -64,6 +64,7 @@
 #include "notification.hpp"
 #include "datetime.hpp"
 #include "tracer.hpp"
+#include "constitle.hpp"
 #include "local.hpp"
 #include "cvtname.hpp"
 
@@ -105,6 +106,8 @@
 		L"      Override the configuration parameter, see far:config for details." EOL_STR
 		L" -t <path>" EOL_STR
 		L"      Location of Far template configuration file - overrides Far.exe.ini." EOL_STR
+		L" -title" EOL_STR
+		L"      Inherit console window's title." EOL_STR
 #ifndef NO_WRAPPER
 		L" -u <username>" EOL_STR
 		L"      Allows to have separate registry settings for different users." EOL_STR
@@ -535,6 +538,7 @@
 	int CntDestName=0; // количество параметров-имен каталогов
 
 	string strProfilePath, strLocalProfilePath, strTemplatePath;
+	bool useTitle = false;
 
 	std::vector<std::pair<string, string>> Overridden;
 	FOR_RANGE(Args, Iter)
@@ -629,8 +633,12 @@
 					break;
 
 				case L'T':
-					if (Iter + 1 != Args.end())
+					if (!StrCmpNI(Arg + 1, L"title", 5))
 					{
+						useTitle = true;
+					}
+					else if (Iter + 1 != Args.end())
+					{
 						strTemplatePath = *++Iter;
 					}
 					break;
@@ -742,6 +750,8 @@
 	}
 
 	InitConsole();
+	if (useTitle)
+		ConsoleTitle::SetUserTitle(Global->strInitTitle);
 
 	SCOPE_EXIT
 	{
TitleSwitch.patch (2,639 bytes)   

DrKnS

2017-04-22 10:28

administrator   bugnote:0015331

Параметр /title наводит на мысли, что мы хотим установить некий пользовательский заголовок, переданный в следующем параметре, а не сохранить текущий.

Для наглядности, возможно, лучше будет /keeptitle, /notitle и т. п. или же, действительно, устанавливать заголовком переданную строку, а если её нет - брать текущий.

ddv

2017-04-22 11:31

reporter   bugnote:0015332

OK, почему бы нет. Предлагаю так:
 -title[:<valuestring>]
      Set the given <valuestring> as the window title; if <valuestring> is not provided, inherit the console window's title.

Чтобы включить в valuestring произвольные символы, можно заключить весь аргумент в кавычки и escape символ кавычек предварением его символом backslash.

DrKnS

2017-04-22 12:03

administrator   bugnote:0015333

Да, вроде хорошо.

"можно заключить весь аргумент в кавычки и escape символ кавычек предварением его символом backslash", как я понимаю, обеспечивается рантаймом и валидно для любых аргументов, поэтому, наверное, можно не уточнять.

ddv

2017-04-22 12:51

reporter  

TitleSwitch1.patch (4,001 bytes)   
Index: far.vcxproj
===================================================================
--- far.vcxproj	(revision 14757)
+++ far.vcxproj	(working copy)
@@ -593,7 +593,7 @@
       <FileType>Document</FileType>
       <Message>Generating language files based on %(Identity)...</Message>
       <Command>tools\lng.generator.exe -nc -i bootstrap\lang.ini -ol $(OutDir) %(Identity)</Command>
-      <AdditionalInputs>%(Identity).m4;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs>%(RelativeDir)..\%(FileName)%(Extension).m4;%(AdditionalInputs)</AdditionalInputs>
       <Outputs>bootstrap\lang.inc;bootstrap\lang.ini;$(OutDir)\FarCze.lng;$(OutDir)\FarEng.lng;$(OutDir)\FarGer.lng;$(OutDir)\FarHun.lng;$(OutDir)\FarPol.lng;$(OutDir)\FarRus.lng;$(OutDir)\FarSpa.lng;$(OutDir)\FarSky.lng;$(OutDir)\FarIta.lng;$(OutDir)\FarUkr.lng;%(Outputs)</Outputs>
     </CustomBuild>
     <MASM Include="vc_crt_fix.asm">
Index: FarEng.hlf.m4
===================================================================
--- FarEng.hlf.m4	(revision 14757)
+++ FarEng.hlf.m4	(working copy)
@@ -250,6 +250,10 @@
   #/t templateprofile#
   Location of Far template configuration file - overrides Far.exe.ini.
 
+  #/title[:<valuestring>]#
+  If <valuestring> is given, use it as the window title;
+  otherwise, inherit the console window's title.
+
   #/clearcache [profilepath [localprofilepath]]#
   Clear plugins cache.
 
Index: FarRus.hlf.m4
===================================================================
--- FarRus.hlf.m4	(revision 14757)
+++ FarRus.hlf.m4	(working copy)
@@ -256,6 +256,10 @@
 если какой-либо из конфигурационных файлов не существует. Параметр templateprofile
 перекрывает значение TemplateProfile из Far.exe.ini.
 
+  #/title[:<valuestring>]#
+  Если указана <valuestring>, то использовать её как заголовок окна;
+  иначе, наследовать заголовок окна консоли.
+
   #/clearcache [profilepath [localprofilepath]]#
   Очистить кэш плагинов и завершить работу.
   Необязательный параметр profilepath задаёт полный путь к конфигурационным файлам.
Index: main.cpp
===================================================================
--- main.cpp	(revision 14757)
+++ main.cpp	(working copy)
@@ -64,6 +64,7 @@
 #include "notification.hpp"
 #include "datetime.hpp"
 #include "tracer.hpp"
+#include "constitle.hpp"
 #include "local.hpp"
 #include "cvtname.hpp"
 
@@ -105,6 +106,9 @@
 		L"      Override the configuration parameter, see far:config for details." EOL_STR
 		L" -t <path>" EOL_STR
 		L"      Location of Far template configuration file - overrides Far.exe.ini." EOL_STR
+		L" -title[:<valuestring>]" EOL_STR
+		L"      If <valuestring> is given, use it as the window title;" EOL_STR
+		L"      otherwise, inherit the console window's title." EOL_STR
 #ifndef NO_WRAPPER
 		L" -u <username>" EOL_STR
 		L"      Allows to have separate registry settings for different users." EOL_STR
@@ -535,6 +539,8 @@
 	int CntDestName=0; // количество параметров-имен каталогов
 
 	string strProfilePath, strLocalProfilePath, strTemplatePath;
+	bool useTitle = false;
+	string title;
 
 	std::vector<std::pair<string, string>> Overridden;
 	FOR_RANGE(Args, Iter)
@@ -629,8 +635,14 @@
 					break;
 
 				case L'T':
-					if (Iter + 1 != Args.end())
+					if (!StrCmpNI(Arg + 1, L"title", 5))
 					{
+						useTitle = true;
+						if (Arg[6] == L':')
+							title = Arg + 7;
+					}
+					else if (Iter + 1 != Args.end())
+					{
 						strTemplatePath = *++Iter;
 					}
 					break;
@@ -742,6 +754,8 @@
 	}
 
 	InitConsole();
+	if (useTitle)
+		ConsoleTitle::SetUserTitle(title.empty() ? Global->strInitTitle : title);
 
 	SCOPE_EXIT
 	{
TitleSwitch1.patch (4,001 bytes)   

ddv

2017-04-22 12:52

reporter   bugnote:0015334

Last edited: 2017-04-22 13:37

"обеспечивается рантаймом и валидно для любых аргументов" - да.
Сделал, прикрепил.

DrKnS

2017-04-22 13:45

administrator   bugnote:0015335

Ок. В CONTRIBUTORS добавлять?

ddv

2017-04-22 13:48

reporter   bugnote:0015336

Можно.

DrKnS

2017-04-22 14:22

administrator   bugnote:0015337

4938

Issue History

Date Modified Username Field Change
2017-04-22 01:46 ddv New Issue
2017-04-22 04:17 ddv Note Added: 0015330
2017-04-22 04:18 ddv File Added: TitleSwitch.patch
2017-04-22 10:28 DrKnS Note Added: 0015331
2017-04-22 11:31 ddv Note Added: 0015332
2017-04-22 12:03 DrKnS Note Added: 0015333
2017-04-22 12:51 ddv File Added: TitleSwitch1.patch
2017-04-22 12:52 ddv Note Added: 0015334
2017-04-22 13:37 ddv Note Edited: 0015334
2017-04-22 13:45 DrKnS Note Added: 0015335
2017-04-22 13:48 ddv Note Added: 0015336
2017-04-22 14:22 DrKnS Note Added: 0015337
2017-04-22 14:22 DrKnS Assigned To => DrKnS
2017-04-22 14:22 DrKnS Status new => feedback
2017-04-24 20:43 DrKnS Build => 4938
2017-04-24 20:43 DrKnS Status feedback => closed
2017-04-24 20:43 DrKnS Resolution open => fixed
2017-04-24 20:43 DrKnS Fixed in Version => 3.0