diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 51312df2cc..1149bd7e35 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -31,6 +31,7 @@ using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
+using System.Text.RegularExpressions;
using System.Timers;
using log4net;
using Nini.Config;
@@ -56,7 +57,16 @@ namespace OpenSim
protected bool m_gui = false;
protected string m_consoleType = "local";
protected uint m_consolePort = 0;
- protected string m_custom_prompt;
+
+ ///
+ /// Prompt to use for simulator command line.
+ ///
+ private string m_consolePrompt;
+
+ ///
+ /// Regex for parsing out special characters in the prompt.
+ ///
+ private Regex m_consolePromptRegex = new Regex(@"([^\\])\\(\w)", RegexOptions.Compiled);
private string m_timedScript = "disabled";
private Timer m_scriptTimer;
@@ -111,7 +121,7 @@ namespace OpenSim
Util.FireAndForgetMethod = asyncCallMethod;
stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15);
- m_custom_prompt = startupConfig.GetString("custom_prompt", "Region");
+ m_consolePrompt = startupConfig.GetString("console_prompt", @"Region (\R) ");
}
if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool)
@@ -835,7 +845,22 @@ namespace OpenSim
string regionName = (m_sceneManager.CurrentScene == null ? "root" : m_sceneManager.CurrentScene.RegionInfo.RegionName);
MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName));
- m_console.DefaultPrompt = String.Format("{0} ({1}) ", m_custom_prompt, regionName);
+
+// m_log.DebugFormat("Original prompt is {0}", m_consolePrompt);
+ string prompt = m_consolePrompt;
+
+ // Replace "\R" with the region name
+ // Replace "\\" with "\"
+ prompt = m_consolePromptRegex.Replace(prompt, m =>
+ {
+// m_log.DebugFormat("Matched {0}", m.Groups[2].Value);
+ if (m.Groups[2].Value == "R")
+ return m.Groups[1].Value + regionName;
+ else
+ return m.Groups[0].Value;
+ });
+
+ m_console.DefaultPrompt = prompt;
m_console.ConsoleScene = m_sceneManager.CurrentScene;
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index a3ac756a1d..b758b8f8ca 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -2119,18 +2119,23 @@ namespace OpenSim.Region.Framework.Scenes
//if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0)
// return;
- bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0);
-
- if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f))
+ // If we somehow got here to updating the SOG and its root part is not scheduled for update,
+ // check to see if the physical position or rotation warrant an update.
+ if (m_rootPart.UpdateFlag == UpdateRequired.NONE)
{
- m_rootPart.UpdateFlag = UpdateRequired.TERSE;
- lastPhysGroupPos = AbsolutePosition;
- }
+ bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0);
- if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f))
- {
- m_rootPart.UpdateFlag = UpdateRequired.TERSE;
- lastPhysGroupRot = GroupRotation;
+ if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f))
+ {
+ m_rootPart.UpdateFlag = UpdateRequired.TERSE;
+ lastPhysGroupPos = AbsolutePosition;
+ }
+
+ if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f))
+ {
+ m_rootPart.UpdateFlag = UpdateRequired.TERSE;
+ lastPhysGroupRot = GroupRotation;
+ }
}
SceneObjectPart[] parts = m_parts.GetArray();
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index c5205dbeae..253b24dbbf 100755
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -36,6 +36,14 @@
[Startup]
+ ;# {ConsolePrompt} {} {ConsolePrompt} {} "Region (\R) "
+ ;; Console prompt
+ ;; Certain special characters can be used to customize the prompt
+ ;; Currently, these are
+ ;; \R - substitute region name
+ ;; \\ - substitute \
+ ; ConsolePrompt = "Region (\R) "
+
;# {save_crashes} {} {Save crashes to disk?} {true false} false
;; Set this to true if you want to log crashes to disk
;; this can be useful when submitting bug reports.
@@ -230,12 +238,6 @@
;; by scripts have changed.
; DeleteScriptsOnStartup = true
- ;; Custom prompt
- ;; This value replaces the word "Region" in console prompt
- ;; (usualy "Region (regionName) # "
- ;; Useful only if you have to monitor serveral servers
- ; custom_prompt = "MyServer1"
-
[SMTP]
;; The SMTP server enabled the email module to send email to external
;; destinations.
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 3e6a8939d7..1c0af76d09 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -3,6 +3,13 @@
[Startup]
+ ; Console prompt
+ ; Certain special characters can be used to customize the prompt
+ ; Currently, these are
+ ; \R - substitute region name
+ ; \\ - substtitue \
+ ConsolePrompt = "Region (\R) "
+
; Set this to true if you want to log crashes to disk
; this can be useful when submitting bug reports.
; However, this will only log crashes within OpenSimulator that cause the entire program to exit