<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Coco+Linden</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Coco+Linden"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Coco_Linden"/>
	<updated>2026-07-28T03:03:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Preparing_Code&amp;diff=183253</id>
		<title>Preparing Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Preparing_Code&amp;diff=183253"/>
		<updated>2008-12-22T22:15:25Z</updated>

		<summary type="html">&lt;p&gt;Coco Linden: /* Good Patch Practise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OSWikiContribBox}}&lt;br /&gt;
&lt;br /&gt;
If you have a piece of source code (be it a fix, new feature, or optimization of existing code) submit the patches in a way that makes it easy for the Lindens to incorporate them into the source code.&lt;br /&gt;
&lt;br /&gt;
== Good Patch Practice ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
The people who review and apply patches are the bottleneck in the system. If you can make it easier for Lindens to understand, test and apply your patch without lots of cleanup, Lindens can incorporate more patches in a fixed amount of time.&lt;br /&gt;
&lt;br /&gt;
===Before You Start===&lt;br /&gt;
&lt;br /&gt;
Check [https://jira.secondlife.com/secure/Dashboard.jspa JIRA Bug Tracker] to see if a similar issue has been submitted, and check its status. You will eventually attach to the existing issue if you find one. If your issue is new, it can help to create the issue before starting work so that others can begin voting for the patch. More votes lead to faster incorporation.&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t, don&#039;t forget to sign and send in the [http://secondlifegrid.net/programs/open_source/submission contribution agreement]. The sooner you do that, the sooner Lindens can accept your patch. Getting this out of the way early avoids any mailing or processing delays. You only need to do this one time.&lt;br /&gt;
&lt;br /&gt;
=== Coding Standard ===&lt;br /&gt;
&lt;br /&gt;
Please read and follow the coding standard: [[Coding_standard|Second Life coding standard]]&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Please do not add issue numbers and your name to the code section.  These have to be removed by hand. While comments explaining code in a general working context are helpful, bracketing a patch with comments like &amp;quot;// PATCH START&amp;quot; and &amp;quot;// PATCH END&amp;quot; does not add any information, and adds to the manual cleanup Lindens have to do.&lt;br /&gt;
&lt;br /&gt;
In short, add to the patch what is expected to appear in the final source.&lt;br /&gt;
&lt;br /&gt;
=== Give Yourself Credit! ===&lt;br /&gt;
&lt;br /&gt;
While names and JIRAs shouldn&#039;t appear in source, they do belong in doc/contributions.txt. Please don&#039;t be shy about adding the issue label and adding your name. We use this file for a number of purposes, including the generation of the [[Source contributions]] page. This also helps Lindens track the purpose of a given patch file.&lt;br /&gt;
&lt;br /&gt;
=== One Patch for one Issue ===&lt;br /&gt;
&lt;br /&gt;
Each patch should do exactly one thing. If you have three different bugs to fix, please submit three different patches.  When you fold unrelated hunks into a single patch, Lindens have to try to figure out which part of the patch applies to which bug, and split it out by hand, usually into several patches. Combo patches are particularly time consuming, and the manual splitting up makes it very easy to lose pieces of patches altogether.&lt;br /&gt;
&lt;br /&gt;
=== Less is more ===&lt;br /&gt;
&lt;br /&gt;
Smaller patches are easier to review and therefore more likely to be integrated quickly. The longer it takes for a patch to be incorporated, the higher the likelihood that the underlying code will change enough for the patch to fail. Please do not include formatting or other clean-up changes. These make a patch harder to review and more likely to fail.&lt;br /&gt;
&lt;br /&gt;
=== Path structure ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s best practice for your patch to be made on the directory level where the linden folder resides so that the path/file names in your patch will start with &#039;&#039;&#039;linden/&#039;&#039;&#039;.  If you are working from a SVN, a diff in SVN style starting from the &#039;&#039;&#039;indra&#039;&#039;&#039; directory level [https://lists.secondlife.com/pipermail/sldev/2008-May/009568.html is also fine].&lt;br /&gt;
&lt;br /&gt;
=== Additional Suggestions ===&lt;br /&gt;
&lt;br /&gt;
Getting your patches accepted into open source projects is a bit of an art. The Red Hat Linux project contains [http://et.redhat.com/~rjones/how-to-supply-code-to-open-source-projects/ some excellent tips] that you may find to be helpful.&lt;br /&gt;
&lt;br /&gt;
== Creating a Patch ==&lt;br /&gt;
&lt;br /&gt;
Patches should be submitted in unified diff format.  This format is similar to simple diffs, but with more detailed information, and it can be automatically integrated into the source.  You can generate a unified diff by calling &#039;&#039;diff -u &amp;lt;original file&amp;gt; &amp;lt;new file&amp;gt;&#039;&#039; (under Windows you will find the diff command as part of the CygWin project in C:\CYGWIN\BIN).&lt;br /&gt;
&lt;br /&gt;
Please submit a single plain text uncompressed patch file that affects all of the files you need to modify.  This is far easier to review than a collection of tiny one-file patches.  &lt;br /&gt;
&lt;br /&gt;
Also bad for reviewability are a compressed patch, or a tarball or zip containing one or more patches.&lt;br /&gt;
&lt;br /&gt;
=== Unified diff of all changed files in a folder tree ===&lt;br /&gt;
The easiest way to generate a clean patch is to keep two copies of the source tree.  Leave one completely unmodified, and make all of your changes in the second.  Then use &amp;quot;diff -urN&amp;quot; to generate the patch.  You can use the --exclude option to omit unwanted files.  For example:&lt;br /&gt;
&lt;br /&gt;
 diff -urN --exclude=&amp;quot;*.o&amp;quot; my_untouched_tree my_modified_tree&lt;br /&gt;
&lt;br /&gt;
=== Unified diff of multiple files ===&lt;br /&gt;
If for any reason you can not use a whole tree diff as above, you can still merge patches from different files into one, by appending the output of patch commands to the previous output (via &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039; redirection for the 2nd and later commands).&lt;br /&gt;
&lt;br /&gt;
 diff -u linden-untouched/indra/newview/viewer.h linden/indra/newview/viewer.h &amp;gt;mychanges.patch.txt&lt;br /&gt;
 diff -u linden-untouched/indra/newview/viewer.cpp linden/indra/newview/viewer.cpp &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039;mychanges.patch.txt&lt;br /&gt;
 diff -u linden-untouched/indra/newview/llviewerwindow.cpp linden/indra/newview/llviewerwindow.cpp &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039;mychanges.patch.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CR/LF vs LF and Whitespace===&lt;br /&gt;
In some situations, you will find that the patch contains the whole file, rather than just the lines changed.  The reason is that sometimes, files in Linux format find their way into the source distribution.  With these diff.exe will treat all lines as different from those in your modified file.&lt;br /&gt;
&lt;br /&gt;
There are various options that will help here.  You can add &#039;&#039;--strip-trailing-cr&#039;&#039; to the command line to fix this.  &lt;br /&gt;
&lt;br /&gt;
  diff -u --strip-trailing-cr linden-untouched/indra/newview/viewer.h linden/indra/newview/viewer.h &amp;gt;mychanges.patch.txt &lt;br /&gt;
&lt;br /&gt;
In some situations try the &#039;&#039;&#039;w&#039;&#039;&#039; (ignore whitespace) and/or &#039;&#039;&#039;B&#039;&#039;&#039; (ignore empty lines) options are also helpful (e.g. with tabs vs. space or spurious space characters while editing).   Type &#039;&#039;&#039;diff --help&#039;&#039;&#039; for more details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sample output ===&lt;br /&gt;
For reference, here&#039;s what a unified diff looks like.&lt;br /&gt;
&lt;br /&gt;
 --- linden-untouched/indra/newview/viewer.cpp    2007-05-14 16:47:26.000000000 +0200&lt;br /&gt;
 +++ linden/indra/newview/viewer.cpp 2007-05-22 08:49:50.484375000 +0200&lt;br /&gt;
 @@ -6302,7 +6326,7 @@&lt;br /&gt;
 &lt;br /&gt;
     llinfos &amp;lt;&amp;lt; &amp;quot;Cleaning Up&amp;quot; &amp;lt;&amp;lt; llendflush;&lt;br /&gt;
 &lt;br /&gt;
 -   LLKeyframeMotion::flushKeyframeCache();&lt;br /&gt;
 +   LLKeyframeMotion::flushKeyframeCache(TRUE); &lt;br /&gt;
 &lt;br /&gt;
     // Must clean up texture references before viewer window is destroyed.&lt;br /&gt;
     LLHUDObject::cleanupHUDObjects();&lt;br /&gt;
 @@ -6562,6 +6586,8 @@&lt;br /&gt;
     delete gVFS;&lt;br /&gt;
     gVFS = NULL;&lt;br /&gt;
 &lt;br /&gt;
 +   LLCurl::cleanup(); &lt;br /&gt;
 +&lt;br /&gt;
     // This will eventually be done in LLApp&lt;br /&gt;
     LLCommon::cleanupClass();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Submitting the Patch on JIRA ==&lt;br /&gt;
&lt;br /&gt;
When you are ready for the world to view your patch, submit the patch on the [https://jira.secondlife.com/secure/Dashboard.jspa| JIRA Bug Tracker].  Create a new issue or attach the patch to an existing entry as appropriate. Attach the &#039;&#039;.patch.txt&#039;&#039; file itself as a file attachment and make sure that the check mark for &#039;&#039;Patch attached&#039;&#039; is set (you can do that when creating the issue or by choosing Edit for an existing one).  Along with your patch, it helps to provide a brief description explaining your patch from an implementor&#039;s view. Non-trivial patches benefit form a simple review plan naming what systems were affected and describing what peers can do to verify that the patch works and doesn&#039;t break surrounding systems. Very often, you will find that writing only a few lines will give you pause and make you double-check some code.&lt;br /&gt;
&lt;br /&gt;
For all but the most trivial patches, it is a good idea to submit the patch for peer review on the [[Developer_communication_tools|mailing list]].  This way fellow developers can review the patch, uncover possible bugs, comment on undesired interactions or generally share ideas with you. Subscribe to the mailing list, then write an email to the list with a link to the description of what your patch does. &lt;br /&gt;
&lt;br /&gt;
Good luck!&lt;br /&gt;
&lt;br /&gt;
== Applying patches to your source ==&lt;br /&gt;
&lt;br /&gt;
In case you are interested, the application of other patches to your source is easy.  Assuming that you are at the directory level from where the patch references the files (usually in the folder where you see the &#039;&#039;&#039;linden&#039;&#039;&#039; folder), applying a patch can be done via:&lt;br /&gt;
&lt;br /&gt;
 c:\cygwin\bin\patch -p 0 -i changes.patch&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
  c:\cygwin\bin\patch -p 0 &amp;lt; changes.patch&lt;br /&gt;
&lt;br /&gt;
On your first attempts, you might also be interested in the &#039;&#039;&#039;--verbose&#039;&#039;&#039;, &#039;&#039;&#039;--backup&#039;&#039;&#039; or &#039;&#039;&#039;--dry-run&#039;&#039;&#039; (simulate patch) options.  See &#039;&#039;&#039;patch --help&#039;&#039;&#039; for details.&lt;br /&gt;
&lt;br /&gt;
 c:\cygwin\bin\patch -p 0 --verbose --backup --dry-run -i changes.patch&lt;br /&gt;
&lt;br /&gt;
Also, if a patch fails, look for files ending with &#039;&#039;&#039;.rej&#039;&#039;&#039; in the target folder.&lt;/div&gt;</summary>
		<author><name>Coco Linden</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=All_keyboard_shortcut_keys&amp;diff=89713</id>
		<title>All keyboard shortcut keys</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=All_keyboard_shortcut_keys&amp;diff=89713"/>
		<updated>2008-09-05T06:52:14Z</updated>

		<summary type="html">&lt;p&gt;Coco Linden: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a comprehensive list of keyboard shortcut keys in the Second Life Viewer, even ones that are rarely used. &lt;br /&gt;
&lt;br /&gt;
For a list of only the most commonly-used keyboard shortcut keys, see [[Keyboard shortcut keys]].&lt;br /&gt;
&lt;br /&gt;
== Menus ==&lt;br /&gt;
&lt;br /&gt;
=== File ===&lt;br /&gt;
&lt;br /&gt;
  Ctrl-U        --&amp;gt;  File &amp;gt; Upload Image...&lt;br /&gt;
  Ctrl-W        --&amp;gt;  File &amp;gt; Close Window&lt;br /&gt;
  Ctrl-Shift-W  --&amp;gt;  File &amp;gt; Close All Windows&lt;br /&gt;
  Ctrl-Shift-S  --&amp;gt;  File &amp;gt; Take or Refresh Snapshot&lt;br /&gt;
  Ctrl-`        --&amp;gt;  File &amp;gt; Snapshot to Disk&lt;br /&gt;
  Ctrl-Q        --&amp;gt;  File &amp;gt; Quit&lt;br /&gt;
&lt;br /&gt;
=== Edit ===&lt;br /&gt;
&lt;br /&gt;
  Ctrl-Z        --&amp;gt;  Edit &amp;gt; Undo&lt;br /&gt;
  Ctrl-Y        --&amp;gt;  Edit &amp;gt; Redo&lt;br /&gt;
  Ctrl-X        --&amp;gt;  Edit &amp;gt; Cut&lt;br /&gt;
  Ctrl-C        --&amp;gt;  Edit &amp;gt; Copy&lt;br /&gt;
  Ctrl-V        --&amp;gt;  Edit &amp;gt; Paste&lt;br /&gt;
  Del           --&amp;gt;  Edit &amp;gt; Delete&lt;br /&gt;
  Ctrl-F        --&amp;gt;  Edit &amp;gt; Search...&lt;br /&gt;
  Ctrl-A        --&amp;gt;  Edit &amp;gt; Select All&lt;br /&gt;
  Ctrl-E        --&amp;gt;  Edit &amp;gt; Deselect&lt;br /&gt;
  Ctrl-D        --&amp;gt;  Edit &amp;gt; Duplicate&lt;br /&gt;
  Ctrl-G        --&amp;gt;  Edit &amp;gt; Gestures...&lt;br /&gt;
  Ctrl-Shift-F  --&amp;gt;  Edit &amp;gt; Friends...&lt;br /&gt;
  Ctrl-P        --&amp;gt;  Edit &amp;gt; Preferences...&lt;br /&gt;
&lt;br /&gt;
=== View ===&lt;br /&gt;
&lt;br /&gt;
  M                 --&amp;gt;  View &amp;gt; Mouselook&lt;br /&gt;
  B                 --&amp;gt;  View &amp;gt; Build&lt;br /&gt;
  Alt-Shift-F       --&amp;gt;  View &amp;gt; Joystick Flycam&lt;br /&gt;
  Esc               --&amp;gt;  View &amp;gt; Reset View&lt;br /&gt;
  Ctrl-\            --&amp;gt;  View &amp;gt; Look at Last Chatter&lt;br /&gt;
  Ctrl-H            --&amp;gt;  View &amp;gt; Local Chat&lt;br /&gt;
  Ctrl-T            --&amp;gt;  View &amp;gt; Communicate&lt;br /&gt;
  Ctrl-I            --&amp;gt;  View &amp;gt; Inventory&lt;br /&gt;
  Ctrl-M            --&amp;gt;  View &amp;gt; World Map&lt;br /&gt;
  Ctrl-Shift-M      --&amp;gt;  View &amp;gt; Mini-Map&lt;br /&gt;
  Ctrl-Shift-1      --&amp;gt;  View &amp;gt; Statistics Bar&lt;br /&gt;
  Ctrl-Alt-Shift-P  --&amp;gt;  View &amp;gt; Property Lines&lt;br /&gt;
  Ctrl-Shift-T      --&amp;gt;  View &amp;gt; Hover Tips &amp;gt; Show Tips&lt;br /&gt;
  Ctrl-Alt-T        --&amp;gt;  View &amp;gt; Highlight Transparent&lt;br /&gt;
  Ctrl-Alt-Shift-N  --&amp;gt;  View &amp;gt; Beacons&lt;br /&gt;
  Ctrl-Alt-Shift-=  --&amp;gt;  View &amp;gt; Particle Sources&lt;br /&gt;
  Alt-Shift-H       --&amp;gt;  View &amp;gt; Show HUD Attachments&lt;br /&gt;
  Ctrl-0            --&amp;gt;  View &amp;gt; Zoom In&lt;br /&gt;
  Ctrl-9            --&amp;gt;  View &amp;gt; Zoom Default&lt;br /&gt;
  Ctrl-8            --&amp;gt;  View &amp;gt; Zoom Out&lt;br /&gt;
  Alt-Enter         --&amp;gt;  View &amp;gt; Toggle Fullscreen&lt;br /&gt;
&lt;br /&gt;
=== World ===&lt;br /&gt;
&lt;br /&gt;
  Enter         --&amp;gt;  World &amp;gt; Chat&lt;br /&gt;
  Ctrl-R        --&amp;gt;  World &amp;gt; Always Run&lt;br /&gt;
  Home          --&amp;gt;  World &amp;gt; Fly&lt;br /&gt;
  Ctrl-Shift-H  --&amp;gt;  World &amp;gt; Teleport Home&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Shift-Y  --&amp;gt;  World &amp;gt; Environment Settings &amp;gt; Midday&lt;br /&gt;
  Ctrl-Shift-N  --&amp;gt;  World &amp;gt; Environment Settings &amp;gt; Sunset&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
&lt;br /&gt;
  Ctrl-1        --&amp;gt;  Tools &amp;gt; Select Tool &amp;gt; Focus&lt;br /&gt;
  Ctrl-2        --&amp;gt;  Tools &amp;gt; Select Tool &amp;gt; Move&lt;br /&gt;
  Ctrl-3        --&amp;gt;  Tools &amp;gt; Select Tool &amp;gt; Edit&lt;br /&gt;
  Ctrl-4        --&amp;gt;  Tools &amp;gt; Select Tool &amp;gt; Create&lt;br /&gt;
  Ctrl-5        --&amp;gt;  Tools &amp;gt; Select Tool &amp;gt; Land&lt;br /&gt;
  &lt;br /&gt;
  G             --&amp;gt;  Tools &amp;gt; Snap to Grid&lt;br /&gt;
  Shift-X       --&amp;gt;  Tools &amp;gt; Snap Object XY to Grid&lt;br /&gt;
  Shift-G       --&amp;gt;  Tools &amp;gt; Use Selection for Grid&lt;br /&gt;
  Ctrl-Shift-B  --&amp;gt;  Tools &amp;gt; Grid Options...&lt;br /&gt;
  Ctrl-L        --&amp;gt;  Tools &amp;gt; Link&lt;br /&gt;
  Ctrl-Shift-L  --&amp;gt;  Tools &amp;gt; Unlink&lt;br /&gt;
  H             --&amp;gt;  Tools &amp;gt; Focus on Selection&lt;br /&gt;
  Shift-H       --&amp;gt;  Tools &amp;gt; Zoom to Selection&lt;br /&gt;
&lt;br /&gt;
=== Help ===&lt;br /&gt;
&lt;br /&gt;
  F1  --&amp;gt;  Help &amp;gt; Second Life Help&lt;br /&gt;
&lt;br /&gt;
=== Advanced ===&lt;br /&gt;
&lt;br /&gt;
  Ctrl-Shift-2      --&amp;gt;  Advanced &amp;gt; Consoles &amp;gt; Frame Console&lt;br /&gt;
  Ctrl-Shift-3      --&amp;gt;  Advanced &amp;gt; Consoles &amp;gt; Texture Console&lt;br /&gt;
  Ctrl-Shift-4      --&amp;gt;  Advanced &amp;gt; Consoles &amp;gt; Debug Console&lt;br /&gt;
  Ctrl-Shift-9      --&amp;gt;  Advanced &amp;gt; Consoles &amp;gt; Fast Timers&lt;br /&gt;
  Ctrl-Shift-0      --&amp;gt;  Advanced &amp;gt; Consoles &amp;gt; Memory&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Shift-F2     --&amp;gt;  Advanced &amp;gt; Reload personal settings overrides&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-Shift-1  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Simple&lt;br /&gt;
  Ctrl-Alt-Shift-2  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Alpha&lt;br /&gt;
  Ctrl-Alt-Shift-3  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Tree&lt;br /&gt;
  Ctrl-Alt-Shift-4  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Character&lt;br /&gt;
  Ctrl-Alt-Shift-5  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; SurfacePatch&lt;br /&gt;
  Ctrl-Alt-Shift-6  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Sky&lt;br /&gt;
  Ctrl-Alt-Shift-7  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Water&lt;br /&gt;
  Ctrl-Alt-Shift-8  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Ground&lt;br /&gt;
  Ctrl-Alt-Shift-9  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Volume&lt;br /&gt;
  Ctrl-Alt-Shift-0  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Grass&lt;br /&gt;
  Ctrl-Alt-Shift--  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Clouds&lt;br /&gt;
  Ctrl-Alt-Shift-=  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Particles&lt;br /&gt;
  Ctrl-Alt-Shift-\  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Types &amp;gt; Bump&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-F1       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; UI&lt;br /&gt;
  Ctrl-Alt-F2       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Selected&lt;br /&gt;
  Ctrl-Alt-F3       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Highlighted&lt;br /&gt;
  Ctrl-Alt-F4       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Dynamic Textures&lt;br /&gt;
  Ctrl-Alt-F5       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Foot Shadows&lt;br /&gt;
  Ctrl-Alt-F6       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Fog&lt;br /&gt;
  Ctrl-Alt-F7       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Palletized Textures&lt;br /&gt;
  Ctrl-Alt-F8       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Test FRInfo&lt;br /&gt;
  Ctrl-Alt-F9       --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Features &amp;gt; Flexible Objects&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-Shift-T  --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Selected Texture Info&lt;br /&gt;
  Ctrl-Shift-R      --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Wireframe&lt;br /&gt;
  Ctrl-Shift-O      --&amp;gt;  Advanced &amp;gt; Rendering &amp;gt; Object-Object Occlusion&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-F        --&amp;gt;  Advanced &amp;gt; UI &amp;gt; Dump Focus Holder&lt;br /&gt;
  Ctrl-Shift-P      --&amp;gt;  Advanced &amp;gt; UI &amp;gt; Print Selected Object Info&lt;br /&gt;
  Shift-P           --&amp;gt;  Advanced &amp;gt; UI &amp;gt; Print Agent Info&lt;br /&gt;
  Ctrl-Alt-Shift-M  --&amp;gt;  Advanced &amp;gt; UI &amp;gt; Memory Stats&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-R        --&amp;gt;  Advanced &amp;gt; Character &amp;gt; Rebake Textures&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-L        --&amp;gt;  Advanced &amp;gt; Network &amp;gt; Drop a Packet&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-Shift-U  --&amp;gt;  Advanced &amp;gt; Show Updates&lt;br /&gt;
  Ctrl-Alt-V        --&amp;gt;  Advanced &amp;gt; View Admin Options&lt;br /&gt;
  Ctrl-Alt-G        --&amp;gt;  Advanced &amp;gt; Request Admin Status&lt;br /&gt;
  Ctrl-Alt-Shift-G  --&amp;gt;  Advanced &amp;gt; Leave Admin Status&lt;br /&gt;
&lt;br /&gt;
=== Admin ===&lt;br /&gt;
&lt;br /&gt;
  Ctrl-Alt-Shift-O    --&amp;gt;  Admin &amp;gt; Object &amp;gt; Take Copy&lt;br /&gt;
  Ctrl-Alt-Shift-Del  --&amp;gt;  Admin &amp;gt; Object &amp;gt; Delete&lt;br /&gt;
  Ctrl-Alt-Shift-L    --&amp;gt;  Admin &amp;gt; Object &amp;gt; Lock&lt;br /&gt;
  Ctrl-Alt-Shift-I    --&amp;gt;  Admin &amp;gt; Object &amp;gt; Get Asset IDs&lt;br /&gt;
  &lt;br /&gt;
  Ctrl-Alt-Shift-C    --&amp;gt;  Admin &amp;gt; Parcel &amp;gt; Set to Linden Content&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
  Ctrl-Alt-Shift-H  --&amp;gt;  Hippos!&lt;/div&gt;</summary>
		<author><name>Coco Linden</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Preparing_Code&amp;diff=22783</id>
		<title>Preparing Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Preparing_Code&amp;diff=22783"/>
		<updated>2007-06-07T01:59:44Z</updated>

		<summary type="html">&lt;p&gt;Coco Linden: /* Good Patch Practise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OSWikiContribBox}}&lt;br /&gt;
&lt;br /&gt;
If you have a piece of source code (be it a fix or a new feature) submit the patches in a way that makes it easy for the Lindens to incorporate them into the source code.&lt;br /&gt;
&lt;br /&gt;
== Good Patch Practise ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
The best way to think about patches is that the people who are reviewing and applying your patches are the bottleneck in the system.  If you can make it easier for us to understand and apply patches without lots of cleanup, we can spend more time reviewing and incorporating your work.&lt;br /&gt;
&lt;br /&gt;
=== Coding Standard ===&lt;br /&gt;
&lt;br /&gt;
Please read and follow the coding standard: [[Coding_standard|Second Life coding standard]]&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Please do not add issue numbers or your name to patches.  We have to remove these by hand.  Also, please be careful in how you add comments.  Bracketing a patch with comments like &amp;quot;// PATCH START&amp;quot; and &amp;quot;// PATCH END&amp;quot; does not add any information, and adds to the manual cleanup we have to do.&lt;br /&gt;
&lt;br /&gt;
If you want to make sure you get credited, then&lt;br /&gt;
add yourself to doc/contributions.txt as part of the patch.  That makes&lt;br /&gt;
it easier for people to see the exact nature of the changes you&#039;ve added.&lt;br /&gt;
&lt;br /&gt;
In short, just add to the patch what is expected to appear in the final source.&lt;br /&gt;
&lt;br /&gt;
=== One Patch for one Issue ===&lt;br /&gt;
&lt;br /&gt;
Each patch should do exactly one thing.  If you have three different bugs to fix, please submit three different patches.  When you fold unrelated hunks into a single patch, we have to try to figure out which part of the patch applies to which bug, and split it out by hand, sometimes into several patches.  Combo patches are particularly time consuming, and the manual splitting up makes it very easy to lose pieces of patches altogether.&lt;br /&gt;
&lt;br /&gt;
=== Less is more ===&lt;br /&gt;
&lt;br /&gt;
Smaller patches are easier to review and therefore more likely to be integrated quickly. The longer it takes for a patch to be incorporated, the higher the likelihood that the underlying code will change enough for the patch to fail. Please do not include formatting or other clean-up changes as that makes it harder to review and more likely to fail.&lt;br /&gt;
&lt;br /&gt;
== Creating a Patch ==&lt;br /&gt;
&lt;br /&gt;
Patches should be submitted in Unidiff-Format.  This format is simlar to simple diffs but with more detailed information and can be automatically integrated into the source.  It is generated by calling &#039;&#039;diff -u &amp;lt;original file&amp;gt; &amp;lt;new file&amp;gt;&#039;&#039; (under Windows you will find the diff command as part of the CygWin project in C:\CYGWIN\BIN).&lt;br /&gt;
&lt;br /&gt;
With the file names it is best to rename the original file to something like &#039;&#039;viewer_orig.cpp&#039;&#039; have the new file the same name as in the Second Life project and redirect the output to a file that ends with &#039;&#039;.patch&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The patch command for a change viewer.cpp would then be something like &#039;&#039;diff -u --strip-trailing-cr linden/indra/newview/viewer_orig.cpp linden/indra/newview/viewer.cpp &amp;gt;viewer.patch&#039;&#039; and would create output file named &#039;&#039;viewer.patch&#039;&#039; like this:&lt;br /&gt;
&lt;br /&gt;
 --- linden/indra/newview/viewer_orig.cpp    2007-05-14 16:47:26.000000000 +0200&lt;br /&gt;
 +++ linden/indra/newview/viewer.cpp 2007-05-22 08:49:50.484375000 +0200&lt;br /&gt;
 @@ -6302,7 +6326,7 @@&lt;br /&gt;
 &lt;br /&gt;
     llinfos &amp;lt;&amp;lt; &amp;quot;Cleaning Up&amp;quot; &amp;lt;&amp;lt; llendflush;&lt;br /&gt;
 &lt;br /&gt;
 -   LLKeyframeMotion::flushKeyframeCache();&lt;br /&gt;
 +   LLKeyframeMotion::flushKeyframeCache(TRUE); &lt;br /&gt;
 &lt;br /&gt;
     // Must clean up texture references before viewer window is destroyed.&lt;br /&gt;
     LLHUDObject::cleanupHUDObjects();&lt;br /&gt;
 @@ -6562,6 +6586,8 @@&lt;br /&gt;
     delete gVFS;&lt;br /&gt;
     gVFS = NULL;&lt;br /&gt;
 &lt;br /&gt;
 +   LLCurl::cleanup(); &lt;br /&gt;
 +&lt;br /&gt;
     // This will eventually be done in LLApp&lt;br /&gt;
     LLCommon::cleanupClass();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Submitting the Patch for Peer Review ==&lt;br /&gt;
&lt;br /&gt;
Especially with larger or sensitive patches it is a good idea to first submit the patch for peer review on the [[Developer_communication_tools|mailing list]].  This way fellow developers can review the patch, uncover possible bugs, comment on undesired interactions or generally share ideas with you.&lt;br /&gt;
&lt;br /&gt;
Just subscribe to the mailing list, then write an email to the list with your &#039;&#039;.patch&#039;&#039; file attached and with a description of what it does in the text or also as an attachment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Submitting the Patch on JIRA ==&lt;br /&gt;
&lt;br /&gt;
Finally, when you think the patch is ready for the Lindens, submit the patch on the [https://jira.secondlife.com/secure/Dashboard.jspa|JIRA Bug Tracker].  Either create a new issue there or attach the patch to an existing entry.  Attach the &#039;&#039;.patch&#039;&#039; file itself as a file attachment and make sure that the check mark for &#039;&#039;Patch attached&#039;&#039; is set (you can do that when creating the issue or by choosing Edit for an existing one).&lt;br /&gt;
&lt;br /&gt;
Also, offer a description of the patch (the why and what) as a separate file and/or as a description or comment with the issue.&lt;br /&gt;
&lt;br /&gt;
Before you do that however, just have a look at existing patches through the &#039;&#039;Issues with patches attached&#039;&#039; filter on the JIRA main page to get a general idea how it is done.&lt;br /&gt;
&lt;br /&gt;
Good luck!&lt;/div&gt;</summary>
		<author><name>Coco Linden</name></author>
	</entry>
</feed>