Index: config.cpp
===================================================================
--- config.cpp	(revision 7976)
+++ config.cpp	(working copy)
@@ -1392,7 +1392,7 @@
 	{
 		if (Opt.FindOpt.strSearchOutFormatWidth.IsEmpty())
 			Opt.FindOpt.strSearchOutFormatWidth=L"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";
-		TextToViewSettings(Opt.FindOpt.strSearchOutFormat.CPtr(),Opt.FindOpt.strSearchOutFormatWidth.CPtr(),false,
+		TextToViewSettings(Opt.FindOpt.strSearchOutFormat.CPtr(),Opt.FindOpt.strSearchOutFormatWidth.CPtr(),
                                   Opt.FindOpt.OutColumnTypes,Opt.FindOpt.OutColumnWidths,Opt.FindOpt.OutColumnWidthType,
                                   Opt.FindOpt.OutColumnCount);
 	}
Index: FarRus.hlf.m4
===================================================================
--- FarRus.hlf.m4	(revision 7976)
+++ FarRus.hlf.m4	(working copy)
@@ -3723,7 +3723,8 @@
                       N - не отображать расширения файлов;
                  Эти символы можно комбинировать, например NMR
 
-    X          - расширение файла
+    X[R]       - расширение файла
+                 где: R - выравнивать по правому краю;
 
     S[C,T,F,E] - размер файла
     P[C,T,F,E] - выделенный размер файла
Index: flshow.cpp
===================================================================
--- flshow.cpp	(revision 7976)
+++ flshow.cpp	(working copy)
@@ -642,7 +642,7 @@
 		{
 			TextToViewSettings(Info.PanelModesArray[ViewMode].ColumnTypes,
 			                   Info.PanelModesArray[ViewMode].ColumnWidths,
-			                   false,ViewSettings.ColumnType,ViewSettings.ColumnWidth,
+			                   ViewSettings.ColumnType,ViewSettings.ColumnWidth,
 			                   ViewSettings.ColumnWidthType,ViewSettings.ColumnCount);
 
 			if (Info.PanelModesArray[ViewMode].StatusColumnTypes &&
@@ -650,7 +650,7 @@
 			{
 				TextToViewSettings(Info.PanelModesArray[ViewMode].StatusColumnTypes,
 				                   Info.PanelModesArray[ViewMode].StatusColumnWidths,
-				                   true,ViewSettings.StatusColumnType,ViewSettings.StatusColumnWidth,
+				                   ViewSettings.StatusColumnType,ViewSettings.StatusColumnWidth,
 				                   ViewSettings.StatusColumnWidthType,ViewSettings.StatusColumnCount);
 			}
 			else if (Info.PanelModesArray[ViewMode].Flags&PMFLAGS_DETAILEDSTATUS)
@@ -1162,7 +1162,11 @@
 							}
 							if (ExtPtr && *ExtPtr) ExtPtr++; else ExtPtr = L"";
 
-							FS<<fmt::LeftAlign()<<fmt::Width(ColumnWidth)<<fmt::Precision(ColumnWidth)<<ExtPtr;
+							unsigned __int64 ViewFlags=ColumnTypes[K];
+							if (ViewFlags&COLUMN_RIGHTALIGN)
+								FS<<fmt::RightAlign()<<fmt::Width(ColumnWidth)<<fmt::Precision(ColumnWidth)<<ExtPtr;
+							else
+								FS<<fmt::LeftAlign()<<fmt::Width(ColumnWidth)<<fmt::Precision(ColumnWidth)<<ExtPtr;
 
 							if (!ShowStatus && StrLength(ExtPtr) > ColumnWidth)
 							{
Index: flplugin.cpp
===================================================================
--- flplugin.cpp	(revision 7976)
+++ flplugin.cpp	(working copy)
@@ -1162,7 +1162,7 @@
 void FileList::PluginGetColumnTypesAndWidths(string& strColumnTypes,string& strColumnWidths)
 {
 	ViewSettingsToText(ViewSettings.ColumnType,ViewSettings.ColumnWidth,ViewSettings.ColumnWidthType,
-	                   ViewSettings.ColumnCount,false,strColumnTypes,strColumnWidths);
+	                   ViewSettings.ColumnCount,strColumnTypes,strColumnWidths);
 }
 
 void FileList::PluginBeginSelection()
Index: panelmix.cpp
===================================================================
--- panelmix.cpp	(revision 7976)
+++ panelmix.cpp	(working copy)
@@ -269,7 +269,7 @@
 }
 
 
-void TextToViewSettings(const wchar_t *ColumnTitles,const wchar_t *ColumnWidths,bool StatusLine,
+void TextToViewSettings(const wchar_t *ColumnTitles,const wchar_t *ColumnWidths,
 						unsigned __int64 *ViewColumnTypes,int *ViewColumnWidths,int *ViewColumnWidthsTypes,int &ColumnCount)
 {
 	const wchar_t *TextPtr=ColumnTitles;
@@ -391,6 +391,14 @@
 						if (strArgName.At(1)==L'L')
 							ColumnType|=COLUMN_FULLOWNER;
 					}
+					else if (strArgName.At(0)==L'X')
+					{
+						unsigned __int64 &ColumnType=ViewColumnTypes[ColumnCount];
+						ColumnType=EXTENSION_COLUMN;
+
+						if (strArgName.At(1)==L'R')
+							ColumnType|=COLUMN_RIGHTALIGN;
+					}
 					else
 					{
 						for (unsigned I=0; I<ARRAYSIZE(ColumnSymbol); I++)
@@ -433,7 +441,7 @@
 
 
 void ViewSettingsToText(unsigned __int64 *ViewColumnTypes,int *ViewColumnWidths,int *ViewColumnWidthsTypes,int ColumnCount,
-						bool StatusLine,string &strColumnTitles,string &strColumnWidths)
+						string &strColumnTitles,string &strColumnWidths)
 {
 	strColumnTitles.Clear();
 	strColumnWidths.Clear();
@@ -493,6 +501,12 @@
 				strType += L"L";
 		}
 
+		if (ColumnType==EXTENSION_COLUMN)
+		{
+			if (ViewColumnTypes[I] & COLUMN_RIGHTALIGN)
+				strType += L"R";
+		}
+
 		strColumnTitles += strType;
 		wchar_t *lpwszWidth = strType.GetBuffer(20);
 		_itow(ViewColumnWidths[I],lpwszWidth,10);
Index: flmodes.cpp
===================================================================
--- flmodes.cpp	(revision 7976)
+++ flmodes.cpp	(working copy)
@@ -166,9 +166,9 @@
 		ModeDlg[MD_CHECKBOX_FILESLOWERCASE].Selected=(NewSettings.Flags&PVS_FILELOWERCASE)?1:0;
 		ModeDlg[MD_CHECKBOX_UPPERTOLOWERCASE].Selected=(NewSettings.Flags&PVS_FILEUPPERTOLOWERCASE)?1:0;
 		ViewSettingsToText(NewSettings.ColumnType,NewSettings.ColumnWidth,NewSettings.ColumnWidthType,
-		                   NewSettings.ColumnCount,false,ModeDlg[2].strData,ModeDlg[4].strData);
+		                   NewSettings.ColumnCount,ModeDlg[2].strData,ModeDlg[4].strData);
 		ViewSettingsToText(NewSettings.StatusColumnType,NewSettings.StatusColumnWidth,NewSettings.StatusColumnWidthType,
-		                   NewSettings.StatusColumnCount,true,ModeDlg[6].strData,ModeDlg[8].strData);
+		                   NewSettings.StatusColumnCount,ModeDlg[6].strData,ModeDlg[8].strData);
 		{
 			Dialog Dlg(ModeDlg,ARRAYSIZE(ModeDlg));
 			Dlg.SetPosition(-1,-1,76,17);
@@ -193,9 +193,9 @@
 			NewSettings.Flags|=PVS_FILELOWERCASE;
 		if (ModeDlg[MD_CHECKBOX_UPPERTOLOWERCASE].Selected)
 			NewSettings.Flags|=PVS_FILEUPPERTOLOWERCASE;
-		TextToViewSettings(ModeDlg[MD_EDITTYPES].strData,ModeDlg[MD_EDITWIDTHS].strData,false,NewSettings.ColumnType,
+		TextToViewSettings(ModeDlg[MD_EDITTYPES].strData,ModeDlg[MD_EDITWIDTHS].strData,NewSettings.ColumnType,
 		                   NewSettings.ColumnWidth,NewSettings.ColumnWidthType,NewSettings.ColumnCount);
-		TextToViewSettings(ModeDlg[MD_EDITSTATUSTYPES].strData,ModeDlg[MD_EDITSTATUSWIDTHS].strData,true,NewSettings.StatusColumnType,
+		TextToViewSettings(ModeDlg[MD_EDITSTATUSTYPES].strData,ModeDlg[MD_EDITSTATUSWIDTHS].strData,NewSettings.StatusColumnType,
 		                   NewSettings.StatusColumnWidth,NewSettings.StatusColumnWidthType,NewSettings.StatusColumnCount);
 		ViewSettingsArray[ModeNumber]=NewSettings;
 		CtrlObject->Cp()->LeftPanel->SortFileList(TRUE);
@@ -240,11 +240,11 @@
 		PanelViewSettings NewSettings=ViewSettingsArray[VIEW_0+I];
 
 		if (!strColumnTitles.IsEmpty())
-			TextToViewSettings(strColumnTitles,strColumnWidths,false,NewSettings.ColumnType,
+			TextToViewSettings(strColumnTitles,strColumnWidths,NewSettings.ColumnType,
 			                   NewSettings.ColumnWidth,NewSettings.ColumnWidthType,NewSettings.ColumnCount);
 
 		if (!strStatusColumnTitles.IsEmpty())
-			TextToViewSettings(strStatusColumnTitles,strStatusColumnWidths,true,NewSettings.StatusColumnType,
+			TextToViewSettings(strStatusColumnTitles,strStatusColumnWidths,NewSettings.StatusColumnType,
 			                   NewSettings.StatusColumnWidth,NewSettings.StatusColumnWidthType,NewSettings.StatusColumnCount);
 
 		NewSettings.Flags = (DWORD)Flags;
@@ -272,9 +272,9 @@
 
 		PanelViewSettings NewSettings=ViewSettingsArray[VIEW_0+I];
 		ViewSettingsToText(NewSettings.ColumnType,NewSettings.ColumnWidth,NewSettings.ColumnWidthType,
-		                   NewSettings.ColumnCount,false,strColumnTitles,strColumnWidths);
+		                   NewSettings.ColumnCount,strColumnTitles,strColumnWidths);
 		ViewSettingsToText(NewSettings.StatusColumnType,NewSettings.StatusColumnWidth,NewSettings.StatusColumnWidthType,
-		                   NewSettings.StatusColumnCount,true,strStatusColumnTitles,strStatusColumnWidths);
+		                   NewSettings.StatusColumnCount,strStatusColumnTitles,strStatusColumnWidths);
 
 		unsigned __int64 id = PanelModeCfg->CreateKey(0, FormatString() << I);
 		if (!id)
Index: FarEng.hlf.m4
===================================================================
--- FarEng.hlf.m4	(revision 7976)
+++ FarEng.hlf.m4	(working copy)
@@ -3609,7 +3609,8 @@
                  These modifiers may be used in combination,
                  for example NMR
 
-    X          - file extension
+    X[R]       - file extension
+                 where: R - right align file extension;
 
     S[C,T,F,E] - file size
     P[C,T,F,E] - allocation file size
Index: filelist.cpp
===================================================================
--- filelist.cpp	(revision 7976)
+++ filelist.cpp	(working copy)
@@ -3133,7 +3133,7 @@
 		string strColumnTypes,strColumnWidths;
 //    SetScreenPosition();
 		ViewSettingsToText(ViewSettings.ColumnType,ViewSettings.ColumnWidth,ViewSettings.ColumnWidthType,
-		                   ViewSettings.ColumnCount,false,strColumnTypes,strColumnWidths);
+		                   ViewSettings.ColumnCount,strColumnTypes,strColumnWidths);
 		ProcessPluginEvent(FE_CHANGEVIEWMODE,(void*)strColumnTypes.CPtr());
 	}
 
Index: findfile.cpp
===================================================================
--- findfile.cpp	(revision 7976)
+++ findfile.cpp	(working copy)
@@ -827,7 +827,7 @@
 			if (Opt.FindOpt.strSearchOutFormatWidth.IsEmpty())
 				Opt.FindOpt.strSearchOutFormatWidth=L"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";
 
-			TextToViewSettings(Opt.FindOpt.strSearchOutFormat.CPtr(),Opt.FindOpt.strSearchOutFormatWidth.CPtr(),false,
+			TextToViewSettings(Opt.FindOpt.strSearchOutFormat.CPtr(),Opt.FindOpt.strSearchOutFormatWidth.CPtr(),
                                   Opt.FindOpt.OutColumnTypes,Opt.FindOpt.OutColumnWidths,Opt.FindOpt.OutColumnWidthType,
                                   Opt.FindOpt.OutColumnCount);
         }
Index: panelmix.hpp
===================================================================
--- panelmix.hpp	(revision 7976)
+++ panelmix.hpp	(working copy)
@@ -45,7 +45,7 @@
 const string FormatStr_Size(__int64 FileSize, __int64 AllocationSize, __int64 StreamsSize, const string& strName,
 						DWORD FileAttributes,DWORD ShowFolderSize,DWORD ReparseTag,int ColumnType,
 						unsigned __int64 Flags,int Width,const wchar_t *CurDir=nullptr);
-void TextToViewSettings(const wchar_t *ColumnTitles,const wchar_t *ColumnWidths,bool StatusLine,
+void TextToViewSettings(const wchar_t *ColumnTitles,const wchar_t *ColumnWidths,
 						unsigned __int64 *ViewColumnTypes,int *ViewColumnWidths,int *ViewColumnWidthsTypes,int &ColumnCount);
 void ViewSettingsToText(unsigned __int64 *ViewColumnTypes,int *ViewColumnWidths,int *ViewColumnWidthsTypes,int ColumnCount,
-						bool StatusLine,string &strColumnTitles,string &strColumnWidths);
+						string &strColumnTitles,string &strColumnWidths);
