Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<<importTiddlers>>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/***
|!Параметр|!Цвет|!Параметр|!Цвет|!Параметр|!Цвет|!Параметр|!Цвет|
|Background|background-color:#f6f6f6;|~PrimaryPale|background-color:#8cf;|~SecondaryPale|background-color:#ffc;|~TertiaryPale|background-color:#eee;|
|Foreground|background-color:#000;|~PrimaryLight|background-color:#18f;|~SecondaryLight|background-color:#fe8;|~TertiaryLight|background-color:#ccc;|
|||~PrimaryMid|background-color:#04b;|~SecondaryMid|background-color:#db4;|~TertiaryMid|background-color:#999;|
|Error|background-color:#f88;|~PrimaryDark|background-color:#014;|~SecondaryDark|background-color:#841;|~TertiaryDark|background-color:#666;|
!Цвета текста, фона и ссылок в заголовках таблиц разных уровней
|!Параметр|!Цвет|!Параметр|!Цвет|!Параметр|!Цвет|!Параметр|!Цвет|!Параметр|!Цвет|
|~TableHeader|background-color:#fcfcfc;|~TableHeader2|background-color:#960;|~TableHeader3|background-color:#960;|~TableHeader4|background-color:#960;|~TableHeader5|background-color:#850;|
|~TableHeaderBg|background-color:#db4;|~TableHeader2Bg|background-color:LightYellow;|~TableHeader3Bg|background-color:HoneyDew;|~TableHeader4Bg|background-color:LavenderBlush;|~TableHeader5Bg|background-color:pink;|
|~TableHeaderRef|background-color:#ffa;|~TableHeader2Ref|background-color:#089;|~TableHeader3Ref|background-color:#089;|~TableHeader4Ref|background-color:#089;|~TableHeader5Ref|background-color:#078;|
!Цвета, используемые в подключаемых модулях и в [[пользовательской таблице оформления|StyleSheet]]
|!Параметр|!Цвет|!Описание параметра|
|~HeaderTop|background-color:#46b;|Top gradient color of the wiki header {{remark{(верхний цвет градиентного заголовка)}}} |
|~HeaderBottom|background-color:#8af;|Bottom gradient color of the wiki header {{remark{(нижний цвет градиентного заголовка)}}} |
|~PreBg|background-color:#ffc;|Preformatted text {{remark{(code samples, etc.)}}} background color {{remark{(цвет фона форматированного текста)}}} |
|~PreBorder|background-color:#fe8;|Preformatted text border color {{remark{(цвет рамки вокруг форматированного текста)}}} |
|~FooterTop|background-color:#ffe4c0;|#eee #ffe4c0 тоже неплохо смотрелся |
|~FooterBottom|background-color:#eed090;|#ddd; #eed090 тоже неплохо смотрелся |
|~FooterBg|background-color:#fcdc66;|Цвет однородного фона подвала |
|~FooterBorder|background-color:#cba;|#ccc #cba тоже неплохо смотрелся|
|~FooterText|background-color:#000;|Цвет текста в подвале |
|~FooterRef|background-color:#950;|Цвет ссылок в подвале |
/%
Background: #f6f6f6
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

TableHeader: #fcfcfc
TableHeaderBg: #db4
TableHeaderRef: #ffa
TableHeader2: #960
TableHeader2Bg: LightYellow
TableHeader2Ref: #089
TableHeader3: #960
TableHeader3Bg: HoneyDew
TableHeader3Ref: #089
TableHeader4: #960
TableHeader4Bg: LavenderBlush
TableHeader4Ref: #089
TableHeader5: #850
TableHeader5Bg: pink
TableHeader5Ref: #078

HeaderTop: #46b
HeaderBottom: #8af
PreBg: #ffc
PreBorder: #fe8
FooterTop: #ffe4c0
FooterBottom: #eed090
FooterBg: #fcdc66
FooterBorder: #cba
FooterText: #000
FooterRef: #950

***/

//%/
[[Содержание]]
/***
|Name:|DisableWikiLinksPlugin|
|Source:|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|Version:|1.6.0|
|Author:|Eric Shulman|
|License:|http://www.TiddlyTools.com/#LegalStatements|
|CoreVersion:|2.1|
|Type:|plugin|
|Description:|selectively disable TiddlyWiki's automatic WikiWord linking behavior|
***/
//{{{
version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};

if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks=true;
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";

// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
	config.formatters[i].coreHandler=config.formatters[i].handler;
	config.formatters[i].handler=function(w) {
		// supress any leading "~" (if present)
		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
		var title=w.matchText.substr(skip);
		var exists=store.tiddlerExists(title);
		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
		// check for excluded Tiddler
		if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// check for specific excluded wiki words
		var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
		if (t && t.length && t.indexOf(w.matchText)!=-1)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if not disabling links from shadows (default setting)
		if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
			return this.coreHandler(w);
		// check for non-existing non-shadow tiddler
		if (config.options.chkDisableNonExistingWikiLinks && !exists)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if wikiLinks disabled, just return text without linking
		if (config.options.chkDisableWikiLinks)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// do standard WikiWord link formatting
		return this.coreHandler(w);
	}
}

Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function() {
/*
	var skip=(this.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
	var title=this.substr(skip);
	var exists=store.tiddlerExists(title);
	var exists=store.tiddlerExists(this.title);
alert(this.title+"; "+exists);
	if (config.options.chkDisableNonExistingWikiLinks && !exists) return false;
*/
	// if all automatic links are not disabled, just return results from core function
	if (config.options.chkDisableWikiLinks) return false;
	return this.coreAutoLinkWikiWords.apply(this,arguments);
}

Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	this.disableWikiLinks_changed.apply(this,arguments);
	// remove excluded wiki words from links array
	var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
	if (t.length) for (var i=0; i<t.length; i++)
		if (this.links.contains(t[i]))
			this.links.splice(this.links.indexOf(t[i]),1);
}

config.optionsDesc["chkDisableWikiLinks"]="Disables WikiLinks";
config.optionsDesc["chkDisableNonExistingWikiLinks"]="Disables only non-existing WikiLinks";
config.optionsDesc["chkAllowLinksFromShadowTiddlers"]="Allows WikiLinks from ShadowTiddlers";
config.optionsDesc["txtDisableWikiLinksList"]="Name of tiddly which contains the default settings for DisableWikiLinksPlugin";
config.optionsDesc["txtDisableWikiLinksTag"]="Disables WikiWords for tiddlers, marked by this tag";

//}}}
<html><span class="source">Источник: <a href="https://wiki.archlinux.org/index.php/Color_Bash_Prompt_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29" target="_blank">AltLinux wiki</a></span>
<table style="font-family:Arial,sans-serif"><thead>
	<tr><th>Последовательность</th><th>Действие</th></tr>
</thead><tbody>
	<tr class="odd"><td><strong><code>\e[</code></strong>цвет<strong><code>;</code></strong>атрибуты<strong><code>m</code></strong></td><td>Установка цвета или фона текста. При опущенном атрибуте изменяется только цвет текста, а атрибут <span class="remark">(подчёркивание, яркость)</span> сохраняется. Позиции атрибута и цвета можно менять местами.</td></tr>
	<tr class="evn"><td><strong><code>\e[</code></strong>строка<strong><code>;</code></strong>колонка<code><strong>f</strong></code></td><td>Установка позиции курсора.</td></tr>
	<tr class="odd"><td><strong><code>\e[s</code></strong></td><td>Сохранение текущей позиции курсора.</td></tr>
	<tr class="evn"><td><strong><code>\e[u</code></strong></td><td>Восстановление сохранённой позиции курсора.</td></tr>
</tbody></table>
</html>См.также: [[Литеральные последовательности в Bash]], [[Таблица цветов в Bash]]
<!--{{{-->
<table width=100%><tr>
	<td valign=top><div class='title' macro='view title'></div></td>
	<td valign=top><div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div></td>
</tr></table>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'>
	<span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span>
</div>
<div class='editor' macro='edit text'></div>
<!--}}}-->
/***
|''Name:''|ExcludeOrphansPlugin|
|''Author:''|vmunt|
|''Description:''|Обработчик тега excludeOrphans<br>Тag excludeOrphans handler|
|''Version:''|0.1|
|''Date:''|2010|
|''Source:''|http://vmunt.site/tw/plugins|
|''License:''|BSD open source license|
|''CoreVersion:''|2.6.0|
Этот модуль создаёт обработчик тега {{{excludeOrphans}}}. Заметки с этим тегом не появляются в списке Потери. Можно использовать для пометки плагинов {{remark{(заметок, помеченных тегом systemConfig, ибо они доступны из сервисных меню, генерируемых кодом)}}}, и для заметок, описывающих авторов заметок {{remark{(ибо ссылка на автора всё равно присутствует в заголовке каждой заметки)}}}. Плагин сделан простой подменой функции {{{TiddlyWiki.prototype.getOrphans}}}
Eng:
This plugin creates tag {{{excludeOrphans}}} handler. This tag useful for {{{systemConfig}}} tiddlers, author tiddlers and others service tiddlers, links to them missing in text tiddlers in this wiki. Tiddlers marks for this tag is not shown in list More/Orphans. Plugin makes as simple replace by function {{{TiddlyWiki.prototype.getOrphans}}}

{{remark{(If you find ugly constructions in my English, I will be pleased to advice how to makes this text more correct. My native language is Russian, and I have no language practice before...}}}
***/
//{{{
// Return an array of names of tiddlers that are defined but not referred to
TiddlyWiki.prototype.getOrphans = function()
{
	var results = [];
	this.forEachTiddler(function (title,tiddler) {
		if(this.getReferringTiddlers(title).length == 0 && !tiddler.isTagged("excludeLists") && !tiddler.isTagged("excludeOrphans"))
			results.push(title);
	});
	results.sort();
	return results;
};
//}}}
Назначение и описание TiddlyWiki можно прочитать [[здесь|./tw.tutorial.rus.html#TiddlyWiki]] 
Для начала работы с пустой TiddlyWiki Вам может потребоваться изменить следующие заметки:
* [[Заголовок|SiteTitle]] и [[Подзаголовок|SiteSubtitle]] этой TiddlyWiki
* Содержимое [[Главного меню|MainMenu]] ({{remark{которое обычно располагается слева}}})
* [[Заметки, открываемые по умолчанию|DefaultTiddlers]]
Ваше имя для подписывания корректировок можно ввести тут: <<option txtUserName>>
/***
|''Name:''|ImportTablePlugin|
|''Old name:''|ImportTiddlersExp|
|''Author:''|vmunt|
|''Description:''|Расширенное меню импорта заметок|
|''Version:''|0.1.1|
|''Date:''|2010|
|''Source:''|http://vmunt.site/tw/plugins|
|''License:''|BSD open source license|
|''CoreVersion:''|2.6.0|
|''Remark:''|Не закончена функция formatDateStr() и стоит явное указание форматной строки {{remark{(потому что выравнивание колонки по правому краю в wizard-е пока не знаю, как делать)}}}. Также думаю сделать закомментированный вариант английских названий колонок|
Вместо такого меню импорта:
|!Заметка|!Размер|!Метки|
|TiddlyWiki:rus|26 KB|systemConfig|
делает такое
|!Заметка|!Метки|!Размер|!Кем|!Изменена|!Старая дата|!Бывший автор|!Сколько занимала|
|TiddlyWiki:rus|systemConfig|26 KB|vmunt|16.06.2010|28.07.2010|vmunt|26 KB|
***/
//{{{
config.macros.importTiddlers.listViewTemplateExp = {
	columns: [
		{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
		{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
		{name: 'Tags', field: 'tags', title: "Метки", type: 'Tags'},
		{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Размер", type: 'Size'},
		{name: 'Modifier', field: 'modifier', title: "Кем", type: 'String'},	//**** vmunt: added ****
		{name: 'Modified', field: 'modified', title: "Изменена", type: 'String'},	// Fri Jun 4 09:37:00 UTC+0600 2010
		{name: 'StoreModifier', field: 'sModified', title: "Старая дата", type: 'String'}, // 201006041906
		{name: 'StoreModified', field: 'sModifier', title: "Бывший автор", type: 'String'},
		{name: 'StoreSize', field: 'sSize', title: "Сколько занимала", type: 'Size'}],
	rowClasses: [
		{className: 'warning', field: 'sNewer'},
		{className: 'lowlight', field: 'sEqual'}
]};

String.prototype.formatDateString = function(template) {
	function hour12(s) { return (int.s > 12) ? zeroPad(int.s - 12,2) : int.s; }

	var t = template.replace(/wYYYY/g,this.substr(0,4));
	t = t.replace(/wYY/g,this.substr(2,4));
	t = t.replace(/YYYY/g,this.substr(0,4));
	t = t.replace(/YY/g,this.substr(2,4));
	t = t.replace(/mmm/g,config.messages.dates.shortMonths[parseInt(this.substr(4,2))-1]);
	t = t.replace(/MMM/g,config.messages.dates.months[parseInt(this.substr(4,2))-1]);
	t = t.replace(/0MM/g,this.substr(4,2));
	t = t.replace(/MM/g,parseInt(this.substr(4,2))); // not quite correct
	t = t.replace(/0DD/g,this.substr(6,2));
	t = t.replace(/DD/g,parseInt(this.substr(6,2)));

//	t = t.replace(/0mm/g,String.zeroPad(this.getMinutes(),2));
//	t = t.replace(/mm/g,this.getMinutes());
//	t = t.replace(/0hh12/g,String.zeroPad(this.substr(8,2)));
/*
	t = t.replace(/hh12/g,this.getHours12());
	t = t.replace(/0hh/g,String.zeroPad(this.getHours(),2));
	t = t.replace(/hh/g,this.getHours());
	t = t.replace(/0ss/g,String.zeroPad(this.getSeconds(),2));
	t = t.replace(/ss/g,this.getSeconds());
	t = t.replace(/[ap]m/g,this.getAmPm().toLowerCase());
	t = t.replace(/[AP]M/g,this.getAmPm().toUpperCase());
	t = t.replace(/0WW/g,String.zeroPad(this.getWeek(),2));
	t = t.replace(/WW/g,this.getWeek());
	t = t.replace(/DDD/g,config.messages.dates.days[this.getDay()]);
	t = t.replace(/ddd/g,config.messages.dates.shortDays[this.getDay()]);
	t = t.replace(/DDth/g,this.getDate()+this.daySuffix());
	var tz = this.getTimezoneOffset();
	var atz = Math.abs(tz);
	t = t.replace(/TZD/g,(tz < 0 ? '+' : '-') + String.zeroPad(Math.floor(atz / 60),2) + ':' + String.zeroPad(atz % 60,2));
	t = t.replace(/\\/g,"");
*/
	return t;
};
config.macros.importTiddlers.onGerTiddlerListOrig = config.macros.importTiddlers.onGetTiddlerList;	// Save pointer to original macro

config.macros.importTiddlers.onGetTiddlerList = function(context,wizard) {
	if(context.status !== true) {
		wizard.setButtons([{caption: config.macros.importTiddlers.cancelLabel, tooltip: config.macros.importTiddlers.cancelPrompt, onClick: config.macros.importTiddlers.onCancel}],config.macros.importTiddlers.errorGettingTiddlerList);
		return;
	}
	// Extract data for the listview
	var listedTiddlers = [];
	if(context.tiddlers) {
		for(var n=0; n<context.tiddlers.length; n++) {
			var tiddler = context.tiddlers[n];
			var ss = 0;
			if (store.tiddlerExists(tiddler.title)) {
				ss = store.getTiddlerText(tiddler.title);
				ss = ss.length > 0 ? ss.length : -1;
			}
			var tm = tiddler.modified.convertToYYYYMMDDHHMM();
			var sm = store.getValue(tiddler.title,'modified');
			listedTiddlers.push({
				title: tiddler.title,
				modified: tm.formatDateString("0DD.0MM.YYYY"), // config.views.wikified.dateFormat),
				modifier: tiddler.modifier,
				text: tiddler.text ? wikifyPlainText(tiddler.text,100) : "",
				tags: tiddler.tags,
				size: tiddler.text ? tiddler.text.length : 0,
				tiddler: tiddler,
//*** vmunt added ***
				sModified: ss == 0 ? '' : sm.formatDateString("0DD.0MM.YYYY"), // config.views.wikified.dateFormat), //sm.formatDateString("DD.0MM.YYYY")
				sModifier: ss == 0 ? '' : store.getValue(tiddler.title,'modifier'),
				sSize: ss,
				sEqual: sm==tm ? true : false,
				sNewer: sm>tm ? true : false
			});
		}
	}
	listedTiddlers.sort(function(a,b) {return a.title < b.title ? -1 : (a.title == b.title ? 0 : +1);});
	// Display the listview
	wizard.addStep(config.macros.importTiddlers.step3Title,config.macros.importTiddlers.step3Html);
	var markList = wizard.getElement("markList");
	var listWrapper = document.createElement("div");
	markList.parentNode.insertBefore(listWrapper,markList);
	var listView = ListView.create(listWrapper,listedTiddlers,config.macros.importTiddlers.listViewTemplateExp);
	wizard.setValue("listView",listView);
	wizard.setValue("context",context);
	var txtSaveTiddler = wizard.getElement("txtSaveTiddler");
	txtSaveTiddler.value = config.macros.importTiddlers.generateSystemServerName(wizard);
	wizard.setButtons([
		{caption: config.macros.importTiddlers.cancelLabel, tooltip: config.macros.importTiddlers.cancelPrompt, onClick: config.macros.importTiddlers.onCancel},
		{caption: config.macros.importTiddlers.importLabel, tooltip: config.macros.importTiddlers.importPrompt, onClick: config.macros.importTiddlers.doImport}]);
};
//}}}
[[Содержание]]
[[Справочник]]
[[Косяки]]
[[Как сделать…]]
[[Черновики и заметки]]
----
@@color:green;font-size:.9em;[[TiddlyWiki|GettingStarted]], v.<<version>><br>&copy; [[Jeremy Ruston|http://www.tiddlywiki.com/#JeremyRuston]], [[vmunt]], 2010@@
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" type="image/x-icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAwFBMVEX////39/fv7+/3787378Xm6u/35sXm5ub35rX35oTe3t7q3r3e1tbe1s7W1tb33hnOzs7Fzs7azpTmzkrmzkLFxcXFxb29xcXOxYzmxTq9vb3WvXO9va3mvTrKvYDawSG1tb21tbXFtWvOtUKtra2trZylpaW1pVqcnKWcnJwA/wCUlJSMjIyMjISEjIyljAyEhIR7e3tzc3Nra2taWlpSUlJSUkpKSkpCQkI6OjoxMTEpKSkhISEZGRkICAgAAACqrk2TAAAAK3RSTlP///////////////////////////////////////////////////////8AI8mn0AAAAAlwSFlzAAALEgAACxIB0t1+/AAAANNJREFUeJxVzU0LgkAQBuDRdnNds+zDILr0CeWlQ///JwRBV6UggrAizdRabTfb7NAchuFhZl7kwH8h2b12wjV8nP1g5wSQZHixnpcwR9TocVF1RAn6cwtO7M/M2xe8Dn8NcRZmpPxRV0gjSi5TqnhjCX1giJw1v0lGciMY5CtRs0/RZtnwbARigK9CiVmmprE5OaHU2I2janGIgafU7SKdWwwqMj2Hhy0+k4+NHFAOGuzbMuXQ0nUeW2p4PUtwzRC6FlGDECx3UoBavGT3p8Yo0AjeCglPTDpc9NcAAAAASUVORK5CYII=" />
<!--}}}-->
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
[[Настройки интерфейса|SystemSettings]] для изменения вида TiddlyWiki, которые сохраняются программой просмотра

Ваше имя для подписывания правок. Можете записать его как WikiWord (к примеру, JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> Резервная копия
<<option chkAutoSave>> Автосохранение
<<option chkRegExpSearch>> Регулярные выражения
<<option chkCaseSensitiveSearch>> Чувствительность к регистру
<<option chkAnimate>> Анимация

----
[[Начальные настройки|GettingStarted]]
[[Расширенные настройки|AdvancedOptions]]
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::HeaderTop]] [[ColorPalette::HeaderBottom]]'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
	<div class='headerForeground'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
	<div class="topSearch"><span macro='search ""'></span></div>
</div>
<div id='sidebar'>
	<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
	<div id='sidebarOptions' refresh='content' force='true' tiddler='SideBarOptions'></div>
	<!-- vmunt: Tabs slider inserted to SideBarOptions -->
	<!-- <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div> -->
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<<newTiddler>><<permaview>>{{remark{<<unsavedChanges inline "<br>">>}}}<<saveChanges>><<closeAll>><<slider chkSliderOptionsPanel OptionsPanel "настройки »" "Изменение настроек TiddlyWiki">> <<slider chkSliderHistoryPanel SideBarTabs "история »" "Панель истории изменений и прочих списков заметок">>
(заметки новичка)
Освоение Linux
http://vmunt.site/
/***
|!Дата|!Изменение|
|03.09.2011|Под Linux в FireFox начертание шрифта {{{font-family:-moz-fixed;font-style:italic}}} отсутствует, поэтому пришлось добавить стили {{{.remark CODE}}} и {{{.remark PRE}}} с прямым начертанием шрифта|
|12.07.2011|Перенёс определение высот тегов {{{BODY}}} и {{{HTML}}} обратно. Переделал вёрстку [[PageTemplate]] по-правильному. Выравнивание стиля {{{source}}} сделал-таки по правому краю {{remark{(поставил display:block, ибо всё равно обычно всю строку делаю таким абзацем)}}}|
|10.07.2011|Перенёс определение высот тегов {{{BODY}}} и {{{HTML}}} {{remark{(а заодно и тегов #pageFrame и #contentWrapper)}}} в заметку [[MarkupPostHead]], которая будет распространяться вместе с [[шаблоном страницы|PageTemplate]] с подвалом {{remark{(ибо, как оказалось, в IE8 height:100% размножается кратно {{remark{(в IE7 и других браузерах этой проблемы нет)}}})}}}. Завести стили прямо в [[шаблон страницы|PageTemplate]] с подвалом не удалось, ибо тот же IE8 переопределение стилей внутри тега BODY уже не воспринимает, а лепить модуль исключительно для стилевой поддержки пока не очень хочется. Вся эта возня, собственно, затеяна для того, чтобы сделать универсальную {{remark{(подходящую для всех моих шаблонов)}}} стилевую таблицу|
|18.06.2011|Сделал стилевую поддержку для заголовков второго-пятого уровней в таблицах {{remark{(сама поддержка таких заголовков включается плагином TableHeadersPlugin)}}}|
|08.05.2011|Внутри displayArea {{remark{(в заметках)}}} для гиперссылок поставлен запрет переноса на другую строку {{remark{(чтобы не разрывать ссылку на несколько строк, ибо часто некрасиво получается)}}}|
|20.03.2011|Сделан левый отступ для sliderPanel. Теперь вложенные sliderPanel имеют визуальную ступенчатую структуру |
|02.03.2011|Добавлены стили перекрёстных ссылок в заголовках {{remark{(для лучшего распознавания сдвигающихся/раздвигающихся текстов)}}} |
|02.02.2011|Добавлены стили для оформления подвала {{remark{(pageFrame, pageFooter, pageFooterLimiter)}}} |
|31.12.2011|Добавлен стиль {{{.viewer TH A}}} для установления цвета ссылок в заголовках таблиц с указанием цвета текста из параметра [[ColorPalette::TableHeaderRef|ColorPalette]] |
|03.11.2010|Добавлен стиль {{{.viewer TH}}} с указанием параметрических цветов текста [[ColorPalette::TableHeader|ColorPalette]] и фона [[ColorPalette::TableHeaderBg|ColorPalette]], плюс тег {{{.viewer PRE}}} тоже сделан параметрическим {{remark{(введены параметры [[ColorPalette::PreBg|ColorPalette]] и [[ColorPalette::PreBorder|ColorPalette]])}}}|
|15.10.2010|К стилю {{{tabContents}}} добавлено свойство {{{overflow:hidden}}} для того, чтобы длинные слова не вылазили за рамку истории|
|14.10.2010|Введён стиль ячейки {{{TD.left}}} с выравниванием по левому краю и абзацным выступом и определены стили {{{TR.oddRow}}} и {{{TR.evenRow}}}|
|20.09.2010|Изменил цвет внутренних ссылок TiddlyWiki, чтобы они чуток отличались цветом от внешних ссылок. Удобно при импортировании текстов с других сайтов, чтобы отличать ссылки, которые уже исправлены на ссылки внутри TiddlyWiki, и которые ещё нет.|
|16.09.2010|Присваивание специфических для {{{DIV.pic}}} параметров {{remark{(float:left в частности)}}} {{{TD.pic}}}-у решено признать неудачной идеей...|
|06.09.2010|Чуток приподнял subtitle в заголовке, чтобы текст смотрелся посередине заголовка {{remark{(ну и при уменьшении ширины экрана чтобы меньше с поиском пересекалось)}}}|
|30.08.2010|Изменена длина строки поиска в заголовке {{remark{(стиль DIV.topSearch)}}}|
|24.08.2010|Добавлен стиль {{{TD.pic}}} и {{{DIV.pic}}} для вставок картинок и оформления галерей|
|20.08.2010|Включена заметная тень заголовка {{remark{(.headerShadow left&top)}}}|
|03.08.2010|Изменено расположение блока меток, для этого изменены стили {{{.tagging}}} и {{{.tagged}}}|
|02.08.2010|Включено выравнивание текста в заметках по ширине {{remark{(стиль .viewer)}}}. Оставлено центрирование заголовков таблиц {{remark{(стиль .viewer TH)}}}. Сделан отступ от правого края списков в истории {{remark{(стили #sidebar LI и #sidebar LI.listTitle)}}}. Убран устаревший стиль {{{LI.listLink}}}|
***/
/*{{{*/
H1, H2, H3, H4, H5, H6 { font-style:italic;padding:0px }
H1, H2 {  border-bottom:2px solid lightgray;margin-bottom:3px;margin-top:6px }
H3, H4, H5, H6 {  border-bottom:1px solid lightgray;margin-bottom:2px;margin-top:3px }
H1 A { color:#620 } /* #841 */
H2 A { color:[[ColorPalette::SecondaryDark]] }
H3 A { color:#861 }
H4 A { color:#771 }
H5 A { color:#691 }

P { margin:5px 0px;padding:0px;text-align:justify;text-indent:25px }
.accent { color:#044;font-style:oblique;font-weight:bold } /* Выделение, акцент на слово или на фразу */
.alert { color:red } /* Места, требующие особого внимания */
.ask { font-style:italic;font-weight:bold;margin-bottom:0px;margin-top:10px } /* Абзац вопроса при интервью */
.author { color:#444;font-style:italic;text-align:right } /* Автор публикации */
.intro { color:#444;font-style:italic;text-align:justify } /* Вступление или предисловие к статье */
.remark { color:#800;font-size:.9em;font-style:italic;margin-bottom:6px;margin-top:6px } /* Примечания переводчика или мои */
.remark CODE,
.remark PRE { font-style:normal;font-size:1.4em } /* TT, KBD, SAMP -- в firefox под linux font-family: -moz-fixed; при font-style:italic просто отсутствует */
.remark CODE { color:#840 }
.remark PRE { color:#600 }
.source { color:#080;display:block;float:right;font-style:italic } /* Ссылка на источник публикации;text-align:right */
.trans,
.titled { color:#060;font-style:italic;font-weight:bold } /* Слово, имеющее всплывающую расшифровку */
LI { margin:4px 0px 4px 25px;text-align:justify }
SAMP { color:blue }
CITE { color:#006 }
.viewer PRE { background-color:[[ColorPalette::PreBg]];border:1px solid [[ColorPalette::PreBorder]];margin:6px 4px }
DIV.cite { border:1px solid #666 }
DIV.cite P { color:#004;font-style:italic;margin:4px 25px 4px 25px;text-align:left;text-indent:0px } /* Цитата, взятая из какого-либо источника */
.txtOptionInput { width:11.5em } /* Длина строк ввода (например, имени пользователя) */
.viewer BLOCKQUOTE,
BLOCKQUOTE { border-bottom:1px solid #555;border-top:1px solid #555;border-left:3px solid #555;margin:10px 25px;margin-right:0px;padding:5px 20px;padding-right:0px } /* Цитата HTML */
BLOCKQUOTE P { color:#004;font-size:0.9em;font-style:italic;margin:2px 0px;text-indent:0px }
BLOCKQUOTE LI { font-size:0.9em;font-style:italic;margin:4px 0px;text-align:justify }
DIV.tiddler { padding-top:6px }
DIV.toolbar { margin-top:4px }
DIV.toolbar A {  } /* white-space:nowrap */
DIV.topSearch INPUT.txtOptionInput { width:18em } /* Длина строки поиска в заголовке */
DIV.topSearch { position:absolute;right:12px;top:21px } /* Специальный класс для строки поиска в заголовке (используется в PageTemplate */
DIV.topSearch A,
DIV.topSearch A:visited { border:none;color:white }
DIV.topSearch A:hover { color:#FFEE88 }
DIV.topSearch INPUT { margin-left:.5em }
A.tiddlyLink { color:#064;padding-left:1px;padding-right:1px }
A.tiddlyLink:hover { background-color:#064;color:#fff }
DIV.sliderPanel { padding-left:10px }
#sidebarOptions .sliderPanel A.tiddlyLink,
#sidebarOptions .sliderPanel A.tabSelected,
#sidebarOptions .sliderPanel A.tabUnselected { color:#042;padding-left:1px;padding-right:1px }
#sidebarOptions .sliderPanel A.tiddlyLink:hover,
#sidebarOptions .sliderPanel A.tabSelected:hover,
#sidebarOptions .sliderPanel A.tabUnselected:hover { background-color:#042;color:#fff }
#sidebarOptions A { margin-left:0px;margin-right:0px;padding-left:.5em;padding-right:.5em }

.quickEdit A:hover { color:white } /* !!! new for toolbar buttons */
.viewer TABLE { margin:5px 4px }
.viewer TH { background-color:[[ColorPalette::TableHeaderBg]];color:[[ColorPalette::TableHeader]] }
.viewer TH A { color:[[ColorPalette::TableHeaderRef]] }
.viewer TH A:hover { background-color:[[ColorPalette::TableHeaderRef]];color:[[ColorPalette::TableHeaderBg]] }
.viewer TH.th2 { background-color:[[ColorPalette::TableHeader2Bg]];color:[[ColorPalette::TableHeader2]] }
.viewer TH.th3 { background-color:[[ColorPalette::TableHeader3Bg]];color:[[ColorPalette::TableHeader3]] }
.viewer TH.th4 { background-color:[[ColorPalette::TableHeader4Bg]];color:[[ColorPalette::TableHeader4]] }
.viewer TH.th5 { background-color:[[ColorPalette::TableHeader5Bg]];color:[[ColorPalette::TableHeader5]] }
.viewer TH.th2 A { color:[[ColorPalette::TableHeader2Ref]] }
.viewer TH.th3 A { color:[[ColorPalette::TableHeader3Ref]] }
.viewer TH.th4 A { color:[[ColorPalette::TableHeader4Ref]] }
.viewer TH.th5 A { color:[[ColorPalette::TableHeader5Ref]] }
.viewer TH.th2 A:hover { background-color:[[ColorPalette::TableHeader2Ref]];color:[[ColorPalette::TableHeader2Bg]] }
.viewer TH.th3 A:hover { background-color:[[ColorPalette::TableHeader3Ref]];color:[[ColorPalette::TableHeader3Bg]] }
.viewer TH.th4 A:hover { background-color:[[ColorPalette::TableHeader4Ref]];color:[[ColorPalette::TableHeader4Bg]] }
.viewer TH.th5 A:hover { background-color:[[ColorPalette::TableHeader5Ref]];color:[[ColorPalette::TableHeader5Bg]] }

TR.info { height:1% } /* Непустые строки в анкетах. Используется для установления минимально необходимой высоты, чтобы пустая строка заполнила всё пространство при объединении ячеек по строкам */
TD.ask { font-style:normal;text-align:right }
TD.odd, TR.odd, TR.oddRow { background-color:#fff } /* В коде TiddlyWiki перепут чётных и нечётных строк */
TD.even, TD.evn, TR.even, TR.evn, TR.evenRow { background-color:#EEEEEE }
TD.num { padding:0px 5px;text-align:right } /* Колонка нумерации */
TD.mark { background-color:#afa;text-align:center } /* Выделенная ячейка расписания */
TD.mid, TD.midb { text-align:center } /* Ячейки с выравниванием по центру */
TD.midb { font-weight:bold }
TD.left { padding:1em;text-align:left;text-indent:-1em } /* Ячейки с выравниванием по левому краю и абзацным выступом */
TD.right { padding:.5em;text-align:right }
TD.pic, DIV.pic { border:1px solid #cc4;padding:10px;text-align:center;text-size:.8em;width:150px }
DIV.pic { float:left;margin:0px 10px 10px 0px }
DIV.cite { border:1px solid #666 }
DIV.cite P { color:#004;font-style:italic;margin:4px 25px 4px 25px;text-align:left;text-indent:0px } /* Цитата, взятая из какого-либо источника */

/* Оформление для таблиц назначений контактов в разъёмах */
TABLE.pinLayout { border:0px solid black;border-collapse:collapse }
TABLE.pinLayout TR { border:none }
TD.ld { border:none;font-size:6pt;padding:0px 6px 0px 2px;text-align:right } /* Описание слева */
TD.rd { border:none;font-size:6pt;padding:0px 2px 0px 6px;text-align:left } /* Описание справа */
TD.pin { border:1px solid darkblue;height:10px;width:10px;padding:0px } /* Сам контакт */
TD.sp { border:none } /* пустые места, обрамление разъёма */

/* Переназначение встроенных стилей TiddlyWiki */
.viewer { border-top:1px solid gray;padding-top:5px;text-align:justify }
.viewer TABLE { margin-left:4px;margin-right:4px }
.viewer TH { text-align:center }
.viewer UL,
.viewer OL { margin-left:0px;margin-bottom:.5em;margin-top:.5em;padding-left:0px }
.viewer .listTitle { margin-left:0px }
.headerForeground,
.headerShadow { padding:1em 0em 1em 1em }
.headerShadow { left:2px;top:2px } /* Отступ тени в заголовке */
.siteTitle { font-size:2em }
.siteSubtitle { font-size:1em;font-style:italic;margin-left:.5em;vertical-align:.25em }

#pageFrame,
#contentWrapper,
HTML, BODY { height:100%;min-height:100% }
#pageFrame { height: auto !important }
#pageFooterLimiter { height:2.3em }
#footerPanel { color:[[ColorPalette::FooterText]];background-color:[[ColorPalette::FooterTop]];border:1px solid [[ColorPalette::FooterBorder]];margin:-2.3em 1em 0px 15.8em;padding:0px }
#footerPanel DIV { margin:0px }
#footerPanel A { color:[[ColorPalette::FooterRef]];text-decoration:none }
#footerPanel A:hover { background-color:[[ColorPalette::FooterRef]];color:[[ColorPalette::FooterTop]];text-decoration:none }
#footer { float:left;font-size:.9em;padding:.6em 1em .5em }
#footerRight { float:right;font-size:.9em;padding:.6em 1em .5em }

#displayArea { margin:1em 1em 0 15.8em }
#displayArea A { white-space:nowrap }
#sidebar { float:left;left:0;right:auto;padding-left: 0.5em;padding-right: 0.5em;top:auto;width:16em }
#mainMenu { background-color:#fff;border:1px solid #ccc;margin-left:0px;margin-top:1em;padding:.5em;position:static;text-align:right;width:13.35em } /* 13.5 */
.tiddler { background-color:#fff;border:1px solid #ccc;margin:5px 0;padding:10px;position:auto }
#sidebarOptions .sliderPanel { background-color:#ddd;font-size:1em;margin-left:0px;margin-right:0px }
#sidebarOptions .sliderPanel .tabSelected,
#sidebarOptions .sliderPanel .tabUnselected { border-left:1px solid #aaa;border-right:1px solid #aaa;border-top:1px solid #aaa;font-weight:normal;margin:0px 1px;padding:2px 1px 0px 2px }
.tabUnselected { background-color:#c8c8c8 } /* Заголовок неактивной закладки в боковой панели истории */
#sidebarOptions .sliderPanel A.tiddlyLinkNonExisting { font-weight:normal }
#sidebarOptions .sliderPanel A.tiddlyLinkNonExisting.shadow { font-weight:bold }
#sidebar LI { padding-left:1em;text-align:left;text-indent:-1em }
#sidebar LI.listTitle { padding-left:0px;text-indent:0px }

.tabset { padding-top:.5em }
.tabContents { overflow:hidden }
.tabSetWrapper LI,
.tabContents LI { margin:0px } /* Элементы списка в боковых меню (история, прочее) */
.subtitle { margin-top:4px }
.editor { margin-bottom:2px;margin-top:2px }
.annotation { margin:4px -2px 4px 0px }
.tagging, .tagged { float:right;margin:5px 0px 0px;padding:0 }
.tagging UL,
.tagged UL { margin:0px }
.tagging LI,
.tagged LI { float:left;margin-left:0px;padding-left:.5em;padding-right:.5em }
/*}}}*/
chkAllowLinksFromShadowTiddlers: false
chkDisableNonExistingWikiLinks: true
chkDisableWikiLinks: true
chkInsertTabs: true
chkToggleLinks: false
txtDisableWikiLinksList: 
txtDisableWikiLinksTag: excludeWikiWords
/***
|''Name:''|TableHeadersPlugin|
|''Version:''|0.1|
|''Description:''|Plugin turn on supports TABLE TH cells with styles th2, th3, th4... for cells with "!!header text", "!!!header text", "!!!header text" and so on|
|''Описание:''|Модуль включает поддержку заголовков таблицы второго, третьего и прочих уровней добавлением стилей th2, th3, th4 и т.д.|
|''CoreVersion:''|2.6.x|
|''Version comment:''|Tested on v.2.6.2|
|''Date:''|2011|
|''Author:''|vmunt|
|''Source:''|http://vmunt.site/tw/plugins|
|''License:''|BSD open source license|
***/
//{{{
for(var n=0; n<config.formatters.length; n++) {
	if (config.formatters[n].name=='table') {
		config.formatters[n].oldRowHandler = config.formatters[n].rowHandler;
		config.formatters[n].rowHandler = function(w,e,prevColumns) {
			var col = 0;
			var colSpanCount = 1;
			var prevCell = null;
			this.cellRegExp.lastIndex = w.nextMatch;
			var cellMatch = this.cellRegExp.exec(w.source);
			while(cellMatch && cellMatch.index == w.nextMatch) {
				if(cellMatch[1] == "~") {
					// Rowspan
					var last = prevColumns[col];
					if(last) {
						last.rowSpanCount++;
						last.element.setAttribute("rowspan",last.rowSpanCount);
						last.element.setAttribute("rowSpan",last.rowSpanCount); // Needed for IE
						last.element.valign = "center";
						if(colSpanCount > 1) {
							last.element.setAttribute("colspan",colSpanCount);
							last.element.setAttribute("colSpan",colSpanCount); // Needed for IE
							colSpanCount = 1;
						}
					}
					w.nextMatch = this.cellRegExp.lastIndex-1;
				} else if(cellMatch[1] == ">") {
					// Colspan
					colSpanCount++;
					w.nextMatch = this.cellRegExp.lastIndex-1;
				} else if(cellMatch[2]) {
					// End of row
					if(prevCell && colSpanCount > 1) {
						prevCell.setAttribute("colspan",colSpanCount);
						prevCell.setAttribute("colSpan",colSpanCount); // Needed for IE
					}
					w.nextMatch = this.cellRegExp.lastIndex;
					break;
				} else {
					// Cell
					w.nextMatch++;
					var styles = config.formatterHelpers.inlineCssHelper(w);
					var spaceLeft = false;
					var chr = w.source.substr(w.nextMatch,1);
					while(chr == " ") {
						spaceLeft = true;
						w.nextMatch++;
						chr = w.source.substr(w.nextMatch,1);
					}
					var cell;
					if(chr == "!") {
						w.nextMatch++;
						// vmunt code: insert TH with thN for !!head, !!!head and so on
						var thLevel = 1;
						while((chr=w.source.substr(w.nextMatch,1))== "!") {
							thLevel++;
							w.nextMatch++;
						}
						if(thLevel==1)
							cell = createTiddlyElement(e,"th");
						else
							cell = createTiddlyElement(e,"th",null,'th'+thLevel);
						// vmunt code: end
					} else {
						cell = createTiddlyElement(e,"td");
					}
					prevCell = cell;
					prevColumns[col] = {rowSpanCount:1,element:cell};
					if(colSpanCount > 1) {
						cell.setAttribute("colspan",colSpanCount);
						cell.setAttribute("colSpan",colSpanCount); // Needed for IE
						colSpanCount = 1;
					}
					config.formatterHelpers.applyCssHelper(cell,styles);
					w.subWikifyTerm(cell,this.cellTermRegExp);
					if(w.matchText.substr(w.matchText.length-2,1) == " ") // spaceRight
						cell.align = spaceLeft ? "center" : "left";
					else if(spaceLeft)
						cell.align = "right";
					w.nextMatch--;
				}
				col++;
				this.cellRegExp.lastIndex = w.nextMatch;
				cellMatch = this.cellRegExp.exec(w.source);
			}
		}
	}
	break;
}
//}}}
/***
|''Name:''|TableSortingPlugin|
|''Description:''|Dynamically sort tables by clicking on column headers|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.02|
|''Date:''|25-01-2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* Make sure your table has a header row
** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row 
* Give the table a class of 'sortable'
** {{{
|sortable|k
|Name|Phone Number|Address|h
}}}<br>Note the /k/ that denotes a class name being assigned to the table.
* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header
* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column
** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}

!!Example:
|sortable|k
|Name |Salary |Extension |Performance |File Size |Start date |h
|ZBloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |
|Shakespeare, Bill |£122000.00|3211 |6 |33.22Gb |12/11/1961 |
|Shakespeare, Hamlet |£9000 |9005 |-8 |3Gb |01/01/2002 |
|Fitz, Marvin |€3300.30 |5554 |+5 |4Kb |05/22/1995 |

***/
// /%
//!BEGIN-PLUGIN-CODE
config.tableSorting = {
	
	darrow: "▼",
	
	uarrow: "▲",
	
	getText : function (o) {
		var p = o.cells[SORT_INDEX];
		return p.innerText || p.textContent || '';
	},
	
	sortTable : function (o,rev) {
		SORT_INDEX = o.getAttribute("index");
		var c = config.tableSorting;
		var T = findRelated(o.parentNode,"TABLE");
		if(T.tBodies[0].rows.length<=1) 
			return;
		var itm = "";
		var i = 0;
		while (itm == "" && i < T.tBodies[0].rows.length) {
			itm = c.getText(T.tBodies[0].rows[i]).trim();
			i++;
		}
		if (itm == "") 
			return; 	
		var r = [];
		var S = o.getElementsByTagName("span")[0];		
		c.fn = c.sortAlpha; 
		if(!isNaN(Date.parse(itm)))
			c.fn = c.sortDate; 
		else if(itm.match(/^[$|£|€|\+|\-]{0,1}\d*\.{0,1}\d+$/)) 
			c.fn = c.sortNumber; 
		else if(itm.match(/^\d*\.{0,1}\d+[K|M|G]{0,1}b$/)) 
			c.fn = c.sortFile; 
		for(i=0; i<T.tBodies[0].rows.length; i++) {
			 r[i]=T.tBodies[0].rows[i]; 
		} 
		r.sort(c.reSort);
		if(S.firstChild.nodeValue==c.darrow || rev) {
			r.reverse();
			S.firstChild.nodeValue=c.uarrow;
		} 
		else 
			S.firstChild.nodeValue=c.darrow;
		var thead = T.getElementsByTagName('thead')[0]; 
		var headers = thead.rows[thead.rows.length-1].cells;
		for(var k=0; k<headers.length; k++) {
			if(!hasClass(headers[k],"nosort"))
				addClass(headers[k].getElementsByTagName("span")[0],"hidden");
		}
		removeClass(S,"hidden");
		for(i=0; i<r.length; i++) { 
			T.tBodies[0].appendChild(r[i]);
			c.stripe(r[i],i);
			for(var j=0; j<r[i].cells.length;j++){
				removeClass(r[i].cells[j],"sortedCol");
			}
			addClass(r[i].cells[SORT_INDEX],"sortedCol");
		}
	},
	
	stripe : function (e,i){
		var cl = ["oddRow","evenRow"];
		i&1? cl.reverse() : cl;
		removeClass(e,cl[1]);
		addClass(e,cl[0]);
	},
	
	sortNumber : function(v) {
		var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));
		return isNaN(x)? 0: x;
	},
	
	sortDate : function(v) {
		return Date.parse(this.getText(v));
	},

	sortAlpha : function(v) {
		return this.getText(v).toLowerCase();
	},
	
	sortFile : function(v) { 		
		var j, q = config.messages.sizeTemplates, s = this.getText(v);
		for (var i=0; i<q.length; i++) {
			if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\u00a0","").toLowerCase())) != -1)
				return q[i].unit * s.substr(0,j);
		}
		return parseFloat(s);
	},
	
	reSort : function(a,b){
		var c = config.tableSorting;
		var aa = c.fn(a);
		var bb = c.fn(b);
		return ((aa==bb)? 0 : ((aa<bb)? -1:1));
	}
};

Story.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
	var elem = this.tSort_refreshTiddler.apply(this,arguments);
	if(elem){
		var tables = elem.getElementsByTagName("TABLE");
		var c = config.tableSorting;
		for(var i=0; i<tables.length; i++){
			if(hasClass(tables[i],"sortable")){
				var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;
				for (var j=0; j<headers.length; j++){
					var h = headers[j];
					if (hasClass(h,"nosort"))
						continue;
					h.setAttribute("index",j);
					h.onclick = function(){c.sortTable(this); return false;};
					h.ondblclick = stopEvent;
					if(h.getElementsByTagName("span").length == 0)
						createTiddlyElement(h,"span",null,"hidden",c.uarrow); 
					if(!x && hasClass(h,"autosort")) {
						x = j;
						rev = hasClass(h,"reverse");
					}
				}
				if(x)
					c.sortTable(headers[x],rev);		
			}
		}
	}
	return elem; 
};

setStylesheet("table.sortable span.hidden {visibility:hidden;}\n"+
	"table.sortable thead {cursor:pointer;}\n"+
	"table.sortable .nosort {cursor:default;}\n"+
	"table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");

function stopEvent(e){
	var ev = e? e : window.event;
	ev.cancelBubble = true;
	if (ev.stopPropagation) ev.stopPropagation();
	return false;	
}	

config.macros.nosort={
	handler : function(place){
		addClass(place,"nosort");
	}	
};

config.macros.autosort={
	handler : function(place,m,p,w,pS){
		addClass(place,"autosort"+" "+pS);		
	}	
};
//!END-PLUGIN-CODE
// %/
/***
|''Name:''|TiddlyWiki:rus|
|''Version:''|0.9.7|
|''Description:''|TiddlyWiki russian interface plugin. Supports core up to 2.6.2|
|''Описание:''|Русификация TiddlyWiki. Поддерживает ядро до 2.6.2 включительно|
|''CoreVersion:''|2.6.x|
|''Version comment:''|Tested on v.2.6.0 and 2.6.1|
|''Date:''|2010|
|''Author:''|vmunt|
|''Source:''|http://vmunt.site/tw/plugins|
|''License:''|BSD open source license|
|''Idea:''|Глеб Тржемецкий (Gleb Trzhemetski), http://www.glebsite.ru|
***/
//{{{
//-- Строки для перевода
// Строки в "двойных кавычках" должны быть переведены; строки в 'одиночных кавычках' должны быть оставлены как есть

merge(config.tasks,{
	save: {text: "сохранить", tooltip: "Сохранить Ваши изменения в эту TiddlyWiki", action: saveChanges},
	sync: {text: "синхронизация", tooltip: "Синхронизировать изменения с другим файлом или сервером TiddlyWiki", content: '<<sync>>'},
	importTask: {text: "импорт", tooltip: "Импортировать заметки и модули из другого файла или сервера TiddlyWiki", content: '<<importTiddlers>>'},
	tweak: {text: "настройка", tooltip: "Подстроить появление и поведение TiddlyWiki", content: '<<options>>'},
	upgrade: {text: "обновление", tooltip: "Обновить код ядра TiddlyWiki", content: '<<upgrade>>'},
	plugins: {text: "модули", tooltip: "Управление встроенными модулями", content: '<<plugins>>'} });

// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
	txtUserName: "Имя пользователя для подписывания Ваших правок",
	chkRegExpSearch: "Разрешить регулярные выражения при поиске",
	chkCaseSensitiveSearch: "Регистро-зависимый поиск",
	chkIncrementalSearch: "Последовательный поиск слово-за-словом",
	chkAnimate: "Разрешить анимацию",
	chkSaveBackups: "Сохранить старую копию при сохранении изменений",
	chkAutoSave: "Автоматическое сохранение изменений",
	chkGenerateAnRssFeed: "Генерировать RSS-ленту при сохранении изменений",
	chkSaveEmptyTemplate: "Генерировать пустой шаблон при сохранении изменений",
	chkOpenInNewWindow: "Открывать внешние ссылки в новом окне",
	chkToggleLinks: "Нажатие на ссылках для открытия заметок также и закрывает их",
	chkHttpReadOnly: "Скрывать возможности редактирования при обращении через протокол HTTP",
	chkForceMinorUpdate: "Не обновлять автора изменений и дату редактирования заметок",
	chkConfirmDelete: "Спрашивать подтверждение при удалении заметок",
	chkInsertTabs: "Использовать клавишу табуляции для вставления символа табуляции вместо перехода по полям",
	txtBackupFolder: "Имя папки для резервных копий",
	txtMaxEditRows: "Максимальное количество строк в окне редактирования",
	txtTheme: "Имя темы для использования",
	txtFileSystemCharSet: "Кодировка символов в файле TiddlyWiki для сохранения изменений (только для Firefox/Mozilla)" });

merge(config.messages,{
	customConfigError: "Не удалось загрузить модуль. Подробнее смотрите в PluginManager",
	pluginError: "Ошибка: %0",
	pluginDisabled: "Не выполнено в связи с запретом, установленным меткой 'systemConfigDisable'",
	pluginForced: "Executed because forced via 'systemConfigForce' tag",
	pluginVersionError: "Не выполнено, так как этот модуль сделан для более новой версии TiddlyWiki",
	nothingSelected: "Ничего не выбрано. Вы должны сначала выбрать один или несколько элементов",
	savedSnapshotError: "Похоже, что эта TiddlyWiki была сохранена с ошибкой. Обратитесь к http://www.tiddlywiki.com/#Download за более детальной информацией",
	subtitleUnknown: "(неизвестно)",
	undefinedTiddlerToolTip: "Заметка '%0' пока не создана",
	shadowedTiddlerToolTip: "Заметка '%0' пока не создана, но она имеет предопределённое служебное значение",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "Внешняя ссылка на %0",
	noTags: "Нет помеченных заметок",
	notFileUrlError: "Вам нужно сначала сохранить эту TiddlyWiki в файл, прежде чем Вы сможете сохранять изменения",
	cantSaveError: "Сохранить изменения невозможно. Возможные причины включают:\n- Ваша программа просмотра не поддерживает сохранение (Firefox, Internet Explorer, Safari и Opera все работают, но только тогда, когда правильно настроены)\n- путь к файлу TiddlyWiki содержит запрещённые символы\n- файл TiddlyWiki был перемещён, удалён или переименован",
	invalidFileError: "Исходный файл '%0' не похож на правильную TiddlyWiki",
	backupSaved: "Архивная копия сохранена",
	backupFailed: "Не удалось сохранить архивную копию",
	rssSaved: "RSS-лента сохранена",
	rssFailed: "Не удалось сохранить файл с RSS-лентой",
	emptySaved: "Пустой шаблон сохранён",
	emptyFailed: "Не удалось сохранить файл с пустым шаблоном",
	mainSaved: "Главный файл TiddlyWiki сохранён",
	mainFailed: "Не удалось сохранить главный файл TiddlyWiki. Ваши изменения не сохранены",
	macroError: "Ошибка в макросе <<\%0>>",
	macroErrorDetails: "Ошибка при выполнении макроса <<\%0>>:\n%1",
	missingMacro: "Нет такого макроса",
	overwriteWarning: "Заметка с именем '%0' уже существует. Нажмите OK для перезаписи её содержимого",
	unsavedChangesWarning: "ВНИМАНИЕ! В TiddlyWiki есть несохранённые изменения\n\nНажмите OK для сохранения\nНажмите CANCEL, если изменения не нужны",
	confirmExit: "--------------------------------\n\nВ TiddlyWiki есть несохранённые изменения. Если Вы продолжите, Вы потеряете эти изменения\n\n--------------------------------",
	saveInstructions: "SaveChanges",
	unsupportedTWFormat: "Неподдерживаемый формат TiddlyWiki '%0'",
	tiddlerSaveError: "Ошибка при сохранении заметки '%0'",
	tiddlerLoadError: "Ошибка при загрузке заметки '%0'",
	wrongSaveFormat: "Не могу сохранить с форматом хранения '%0'. Используйте стандартный формат для сохранения.",
	invalidFieldName: "Неверное имя поля %0",
	fieldCannotBeChanged: "Поле '%0' не может быть изменено",
	loadingMissingTiddler: "Пытаюсь восстановить заметку '%0' с сервера '%1' по адресу:\n\n'%2' в 'рабочем пространстве' '%3'",
	upgradeDone: "Обновление до версии %0 завершено\n\nНажмите 'OK' для перезагрузки новой обновлённой TiddlyWiki",
	invalidCookie: "Испорченная cookie-переменная '%0'"}); // v.2.6.1

merge(config.messages.messageClose,{text: "[X]", tooltip: "закрыть эту область сообщения"});

config.messages.backstage = {
	open: {text: "обслуживание", tooltip: "Откройте меню обслуживания для проведения сервисных задач"},
	close: {text: "закрыть", tooltip: "Закрытие меню обслуживания"},
	prompt: "Ослуживание: ",
	decal: {edit: {text: "правка", tooltip: "Правка заметки '%0'"}}};

config.messages.listView = {
	tiddlerTooltip: "Щёлкните тут для просмотра полного текста этой заметки",
	previewUnavailable: "(предварительный просмотр недоступен)"};

config.messages.dates.months = ["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"];
config.messages.dates.days = ["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"];
config.messages.dates.shortMonths = ["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"];
config.messages.dates.shortDays = ["Вс","Пн","Вт","Ср","Чт","Пт","Сб"];
// suffixes for dates, eg "1st","2nd","3rd"..."30th","31st"
config.messages.dates.daySuffixes = [
	"-е","-е","-е","-е","-е","-е","-е","-е","-е","-е",
	"-е","-е","-е","-е","-е","-е","-е","-е","-е","-е",
	"-е","-е","-е","-е","-е","-е","-е","-е","-е","-е",
	"-е"];
config.messages.dates.am = "утра";
config.messages.dates.pm = "дня";

merge(config.views.wikified.tag,{
	labelNoTags: "меток нет",
	labelTags: "метки: ",
	openTag: "Открыть метку '%0'",
	tooltip: "Показать заметки, помеченные как '%0'",
	openAllText: "Открыть всё",
	openAllTooltip: "Открыть все эти заметки",
	popupNone: "Нет других заметок, помеченных '%0'"});

merge(config.views.wikified,{
	defaultText: "Заметка '%0' пока не создана. Создайте её двойным щелчком мышки",
	defaultModifier: "(отсутствует)",
	shadowModifier: "(встроенная служебная заметка)",
	dateFormat: "DD.0MM.YYYY",
	createdPrompt: "создана"});

merge(config.views.editor,{
	tagPrompt: "Введите метки, разделённые пробелами, в случае необходимости [[используйте двойные квадратные скобки|use double square brackets]], или добавьте существующие метки",
	defaultText: "Введите текст для '%0'"});

merge(config.views.editor.tagChooser,{
	text: "метки",
	tooltip: "Выберите существующую метку для добавления к этой заметке",
	popupNone: "Нет ни одной метки",
	tagTooltip: "Добавьте метку для '%0'"});

merge(config.messages,{
	sizeTemplates: [
		{unit: 1024*1024*1024, template: "%0\u00a0 Gb"},
		{unit: 1024*1024, template: "%0\u00a0 Mb"},
		{unit: 1024, template: "%0\u00a0 Kb"},
		{unit: 1, template: "%0\u00a0 b"}]});

merge(config.macros.search,{
	label: "поиск",
	prompt: "Поиск в этой TiddlyWiki",
	accessKey: "F",
	successMsg: "Найдено %0 заметок с текстом %1",
	failureMsg: "Нет ни одной заметки с текстом %0"});

merge(config.macros.tagging,{
	label: "метки: ",
	labelNotTag: "(нет меток)",
	tooltip: "Список заметок, помеченных как '%0'"});

merge(config.macros.timeline,{
	dateFormat: "DD.0MM.YYYY"});

merge(config.macros.allTags,{
	tooltip: "Показать заметки, помеченные как '%0'",
	noTags: "Нет ни одной помеченной заметки"});

config.macros.list.all.prompt = "Все заметки в алфавитном порядке";
config.macros.list.missing.prompt = "Отсутствующие заметки, на которые при этом есть ссылки с других заметок";
config.macros.list.orphans.prompt = "Заметки, на которые нет ни одной ссылки из других заметок";
config.macros.list.shadowed.prompt = "Служебные заметки";
config.macros.list.touched.prompt = "Заметки, которые были изменены";

merge(config.macros.closeAll,{
	label: "закрыть всё",
	prompt: "Закрыть все отображённые заметки (за исключением заметок в состоянии правки)"});

merge(config.macros.permaview,{
	label: "прямая ссылка",
	prompt: "Создание адресной строки для открытия TiddlyWiki с текущими открытыми заметками"});

merge(config.macros.saveChanges,{
	label: "сохранить",
	prompt: "Сохранение TiddlyWiki со всеми заметками",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "новая заметка",
	prompt: "Создать новую заметку",
	title: "Новая заметка",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "новая запись",
	prompt: "Создать новую заметку с текущей датой и временем",
	accessKey: "J"});

merge(config.macros.options,{
	wizardTitle: "Расширенные пункты настройки",
	step1Title: "Эти настройки Ваша программа просмотра сохраняет с помощью cookies",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Показать настройки без описания</input>",
	unknownDescription: "//(unknown)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "Возможности", type: 'String'},
			{name: 'Description', field: 'description', title: "Описание", type: 'WikiText'},
			{name: 'Name', field: 'name', title: "Имя", type: 'String'}],
		rowClasses: [{className: 'lowlight', field: 'lowlight'} ]}
	});

merge(config.macros.plugins,{
	wizardTitle: "Управление модулями",
	step1Title: "Подключенные модули",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	skippedText: "(Этот модуль не выполняется, так как после его добавления ещё не было перезапуска TiddlyWiki)",
	noPluginText: "Нет установленных модулей",
	confirmDeleteText: "Вы уверены, что хотите удалить эти модули:\n\n%0",
	removeLabel: "удалить метку systemConfig",
	removePrompt: "Удалить метку systemConfig",
	deleteLabel: "удалить",
	deletePrompt: "Удалить эту заметку навсегда",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
			{name: 'Description', field: 'Description', title: "Описание", type: 'String'},
			{name: 'Version', field: 'Version', title: "Версия", type: 'String'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Размер", type: 'Size'},
			{name: 'Forced', field: 'forced', title: "Forced", tag: 'systemConfigForce', type: 'TagCheckbox'},
			{name: 'Disabled', field: 'disabled', title: "Запрещён", tag: 'systemConfigDisable', type: 'TagCheckbox'},
			{name: 'Executed', field: 'executed', title: "Загружен", type: 'Boolean', trueText: "Да", falseText: "Нет"},
			{name: 'Startup Time', field: 'startupTime', title: "Стартовый", type: 'String'},
			{name: 'Error', field: 'error', title: "Состояние", type: 'Boolean', trueText: "Ошибка", falseText: "Норма"},
			{name: 'Log', field: 'log', title: "Протокол", type: 'StringList'} ],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'} ]},
	listViewTemplateReadOnly: {
		columns: [
			{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
			{name: 'Description', field: 'Description', title: "Описание", type: 'String'},
			{name: 'Version', field: 'Version', title: "Версия", type: 'String'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Размер", type: 'Size'},
			{name: 'Executed', field: 'executed', title: "Загружен", type: 'Boolean', trueText: "Да", falseText: "Нет"},
			{name: 'Startup Time', field: 'startupTime', title: "Стартовый", type: 'String'},
			{name: 'Error', field: 'error', title: "Состояние", type: 'Boolean', trueText: "Ошибка", falseText: "Норма"},
			{name: 'Log', field: 'log', title: "Log", type: 'StringList'}
			],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}
			]}
	});

merge(config.macros.toolbar,{
	moreLabel: "ещё",
	morePrompt: "Показать дополнительные команды",
	lessLabel: "кратко",
	lessPrompt: "Скрыть дополнительные команды",
	separator: "|" });

merge(config.macros.refreshDisplay,{
	label: "обновить",
	prompt: "Обновить отображение TiddlyWiki" });

merge(config.macros.importTiddlers,{
	readOnlyWarning: "Вы не можете добавлять что-либо в открытую только для чтения TiddlyWiki. Попробуйте открыть её как файл (через обращение file://)",
	wizardTitle: "Импорт заметок из другого файла или сервера",
	step1Title: "Шаг 1: Найдите сервер или файл TiddlyWiki",
	step1Html: "Укажите тип сервера: <select name='selTypes'><option value=''>Выберите...</option></select><br>введите адрес или путь к файлу тут: <input type='text' size=50 name='txtPath'><br>...или найдите файл: <input type='file' size=50 name='txtBrowse'><br><hr>...или выберите заготовку: <select name='selFeeds'><option value=''>Выберите...</option></select>",
	openLabel: "открыть",
	openPrompt: "Подключиться к этому файлу или серверу",
	openError: "Возникли проблемы с получением файла TiddlyWiki", // v.2.6.0, removed in v.2.6.1
	statusOpenHost: "Открытие узла",
	statusGetWorkspaceList: "Получение списка доступных рабочих областей",
	step2Title: "Шаг 2: Выберите рабочую область",
	step2Html: "Введите имя рабочей области: <input type='text' size=50 name='txtWorkspace'><br>...или выберите рабочую область: <select name='selWorkspace'><option value=''>Выберите...</option></select>",
	cancelLabel: "отмена",
	cancelPrompt: "Отмена этого импорта",
	statusOpenWorkspace: "Открытие рабочего пространства",
	statusGetTiddlerList: "Получение списка разрешённых заметок",
	errorGettingTiddlerList: "Ошибка при получении списка заметок, нажмите Отмену и попробуйте снова",
	step3Title: "Шаг 3: Выберите импортируемые заметки",
	step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Оставить эти заметки связанными с этим сервером для облегчения последующих синхронизаций</input><br><input type='checkbox' name='chkSave'>Сохранить параметры этого сервера в заметке с названием 'systemServer':</input> <input type='text' size=25 name='txtSaveTiddler'>",
	importLabel: "импорт",
	importPrompt: "Импортировать эти заметки",
	confirmOverwriteText: "Вы действительно хотите заменить эти заметки:\n\n%0",
	step4Title: "Шаг 4: Импортируется заметок: %0",
	step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
	doneLabel: "завершить",
	donePrompt: "Закрыть этот мастер-диалог",
	statusDoingImport: "Импортирование заметок",
	statusDoneImport: "Все заметки импортированы",
	systemServerNamePattern: "%2 из %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "Заметка '%0' уже существует. Нажмите 'OK' для замены её на заметку с указанного сервера, или нажмите 'Cancel' для оставления её неизменной",
	serverSaveTemplate: "|''Введите:''|%0|\n|''Адрес:''|%1|\n|''Рабочее пространство:''|%2|\n\nЭта заметка будет автоматически создана для записи параметров этого сервера",
	serverSaveModifier: "(System)",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Размер", type: 'Size'},
			{name: 'Tags', field: 'tags', title: "Метки", type: 'Tags'} ],
		rowClasses: []
	} });

merge(config.macros.upgrade,{
	wizardTitle: "Обновление кода ядра TiddlyWiki",
	step1Title: "Обновление или восстановление этой TiddlyWiki до последней версии",
	step1Html: "Вы готовы обновить код ядра TiddlyWiki до последней версии (с адреса <a href='%0' class='externalLink' target='_blank'>%1</a>). Информационное наполнение этого файла будет сохранено.<br><br>Заметьте, что обновление кода ядра может вызвать конфликт с уже подключенными старыми модулями. Если у Вас появились проблемы с обновлённым файлом, почитайте здесь: <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
	errorCantUpgrade: "Не могу обновить эту TiddlyWiki. Вы можете производить обновление TiddlyWiki-файлов, сохранённых только локально",
	errorNotSaved: "Вы должны сохранить изменения, прежде чем производить обновление",
	step2Title: "Подтвердите параметры обновления",
	step2Html_downgrade: "У Вас получается ухудшение версии файла TiddlyWiki с версии %1 до версии %0.<br><br>Замена версии кода ядра на более раннюю не рекомендуется",
	step2Html_restore: "Похоже, что эта TiddlyWiki уже использует последнюю версию кода ядра (%0).<br><br>Вы можете продолжить замену кода ядра в любом случае для того, чтобы быть уверенными, что код ядра не повреждён и не испорчен",
	step2Html_upgrade: "Вы готовы обновить версию TiddlyWiki с %1 до %0?",
	upgradeLabel: "обновление",
	upgradePrompt: "Приготовьтесь к процессу обновления",
	statusPreparingBackup: "Делается резервная копия",
	statusSavingBackup: "Сохраняется резервная копия",
	errorSavingBackup: "Возникла проблема с сохранением файла резервной копии",
	statusLoadingCore: "Загрузка кода ядра",
	errorLoadingCore: "Ошибка при загрузке кода ядра",
	errorCoreFormat: "Ошибка в новом коде ядра",
	statusSavingCore: "Сохранение нового кода ядра",
	statusReloadingCore: "Повторная загрузка нового кода ядра",
	startLabel: "пуск",
	startPrompt: "Запуск процесса обновления",
	cancelLabel: "отмена",
	cancelPrompt: "Отмена процесса обновления",
	step3Title: "Процесс обновления прерван",
	step3Html: "Вы отменили процесс обновления TiddlyWiki"
	});

merge(config.macros.sync,{
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
			{name: 'Server Type', field: 'serverType', title: "Тип сервера", type: 'String'},
			{name: 'Server Host', field: 'serverHost', title: "Хранилище сервера (host)", type: 'String'},
			{name: 'Server Workspace', field: 'serverWorkspace', title: "Рабочее пространство сервера", type: 'String'},
			{name: 'Status', field: 'status', title: "Состояние синхронизации", type: 'String'},
			{name: 'Server URL', field: 'serverUrl', title: "Адресная строка", text: "View", type: 'Link'} ],
		rowClasses: [],
		buttons: [{caption: "Синхронизировать эти заметки", name: 'sync'}] },
	wizardTitle: "Синхронизировать с внешним сервером или файлом",
	step1Title: "Выберите заметки, которые Вы хотите синхронизировать",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	syncLabel: "синхронизация",
	syncPrompt: "Синхронизировать эти заметки",
	hasChanged: "Изменены с момента последней синхронизации",
	hasNotChanged: "Нет изменений с момента последней синхронизации",
	syncStatusList: {
		none: {text: "...", display:'none', className:'notChanged'},
		changedServer: {text: "Изменены на сервере", display:null, className:'changedServer'},
		changedLocally: {text: "Изменены локально", display:null, className:'changedLocally'},
		changedBoth: {text: "Изменены в обоих местах сразу", display:null, className:'changedBoth'},
		notFound: {text: "Отсутствует на сервере", display:null, className:'notFound'},
		putToServer: {text: "Обновление сохранено на сервер", display:null, className:'putToServer'},
		gotFromServer: {text: "Обновления получены с сервера", display:null, className:'gotFromServer'} } });

merge(config.macros.annotations,{});

merge(config.commands.closeTiddler,{
	text: "закрыть",
	tooltip: "Закрыть эту заметку"});

merge(config.commands.closeOthers,{
	text: "закрыть другие",
	tooltip: "Закрыть все другие заметки"});

merge(config.commands.editTiddler,{
	text: "правка",
	tooltip: "Исправить эту заметку",
	readOnlyText: "просмотр",
	readOnlyTooltip: "Просмотр исходного текста этой заметки"});

merge(config.commands.saveTiddler,{
	text: "сохранить",
	tooltip: "Сохранить изменения этой заметки"});

merge(config.commands.cancelTiddler,{
	text: "отмена",
	tooltip: "Отменить изменение этой заметки",
	warning: "Вы действительно уверены, что Вы хотите потерять все Ваши изменения заметки '%0'?",
	readOnlyText: "возврат",
	readOnlyTooltip: "Просмотр этой заметки в нормальном режиме"});

merge(config.commands.deleteTiddler,{
	text: "удалить",
	tooltip: "Удалить эту заметку",
	warning: "Вы уверены, что хотите удалить '%0'?"});

merge(config.commands.permalink,{
	text: "прямая ссылка",
	tooltip: "Адресная строка для этой заметки"});

merge(config.commands.references,{
	text: "ссылки",
	tooltip: "Показать все заметки, которые ссылаются на эту заметку",
	popupNone: "Нет ссылок"});

merge(config.commands.jump,{
	text: "переход",
	tooltip: "Переход на другую открытую заметку"});

merge(config.commands.syncing,{
	text: "синхронизация",
	tooltip: "Управление синхронизацией этой заметки с сервером или внешним файлом",
	currentlySyncing: "<div>Синхронизирую с помощью <span class='popupHighlight'>'%0'</span> с:</"+"div><div>хранилищем: <span class='popupHighlight'>%1</span></"+"div><div>рабочее пространство: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
	notCurrentlySyncing: "Пока не синхронизировано",
	captionUnSync: "Остановить синхронизацию этой заметки",
	chooseServer: "Привести в соответствие эту заметку с другим сервером:",
	currServerMarker: "\u25cf ",
	notCurrServerMarker: "  "});

merge(config.commands.fields,{
	text: "поля",
	tooltip: "Отображение расширенных параметров этой заметки",
	emptyText: "У этой заметки нет расширенных параметров",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "Поле", type: 'String'},
			{name: 'Value', field: 'value', title: "Значение", type: 'String'} ],
		rowClasses: [],
		buttons: [] } });

merge(config.shadowTiddlers,{
	DefaultTiddlers: "[[GettingStarted]]",
	MainMenu: "[[GettingStarted]]",
	SiteTitle: "Моя TiddlyWiki",
	SiteSubtitle: "гипертекстовая записная книжка",
	SiteUrl: "",
	SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD.0MM.YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "настройки \u00bb" "Изменение настроек TiddlyWiki">>',
	SideBarTabs: '<<tabs txtMainTab "история" "История" TabTimeline "все" "Все заметки" TabAll "метки" "Все метки" TabTags "ещё" "Другие списки" TabMore>>',
	TabMore: '<<tabs txtMoreTab "нет" "Отсутствующие заметки" TabMoreMissing "потери" "Потерянные заметки" TabMoreOrphans "служебные" "Служебные заметки" TabMoreShadowed>>' });

merge(config.annotations,{
	AdvancedOptions: "Эта служебная заметка обеспечивает доступ к некоторым дополнительным настройкам",
	ColorPalette: "Значения из этой служебной заметки определяют цветовую схему пользовательского интерфейса TiddlyWiki",
	DefaultTiddlers: "Заметки, перечисленные в этой служебной заметке, будут автоматически открываться при каждом запуске TiddlyWiki",
	EditTemplate: "Шаблон HTML в этой служебной заметке определяет, как заметки будут выглядеть, пока они редактируются",
	GettingStarted: "Эта служебная заметка содержит инструкции по начальному использованию",
	ImportTiddlers: "Эта служебная заметка обеспечивает доступ к импортированным заметкам",
	MainMenu: "Эта служебная заметка используется для хранения содержимого главного меню (//обычно отображается в левой колонке экрана//)",
	MarkupPreHead: "Эта заметка вставляется в начало раздела <head> этого HTML-файла c TiddlyWiki",
	MarkupPostHead: "Эта заметка вставляется в конец раздела <head> этого HTML-файла c TiddlyWiki",
	MarkupPreBody: "Эта заметка вставляется в начало раздела <body> этого HTML-файла c TiddlyWiki",
	MarkupPostBody: "Эта заметка вставляется в конец раздела <body> этого HTML-файла с TiddlyWiki сразу же после блока кода",
	OptionsPanel: "Эта служебная заметка используется для хранения скрываемой панели Настроек, расположенной на боковой панели",
	PageTemplate: "HTML-шаблон в этой служебной заметке определяет общий вид TiddlyWiki",
	PluginManager: "Эта служебная заметка обеспечивает доступ к управлению модулями",
	SideBarOptions: "Эта служебная заметка используется для хранения панели поиска и настроек на боковой панели",
	SideBarTabs: "Эта служебная заметка содержит начинку панели со списком служебных заметок на боковой панели",
	SiteSubtitle: "Эта служебная  заметка содержит вторую часть заголовка страницы",
	SiteTitle: "Эта служебная заметка содержит первую часть заголовка страницы",
	SiteUrl: "В эту служебную заметку должен быть занесён полный URL публикации этой TiddlyWiki",
	StyleSheetColors: "Эта служебная заметка содержит CSS-описания, относящиеся к цветам элементов страницы. ''НЕ ИЗМЕНЯЙТЕ ЭТУ ЗАМЕТКУ''. Все изменения делайте в служебной заметке StyleSheet",
	StyleSheet: "Эта заметка может содержать Ваши определения и изменения стилей CSS",
	StyleSheetLayout: "Эта служебная заметка содержит СSS-описания, относящиеся к расположению элементов страниц.''НЕ ИЗМЕНЯЙТЕ ЭТУ ЗАМЕТКУ''. Все изменения делайте в служебной заметке StyleSheet",
	StyleSheetLocale: "Эта служебная заметка содержит CSS-описания, относящиеся к переводу на местный язык",
	StyleSheetPrint: "Эта служебная заметка содержит CSS-описания для печати",
	SystemSettings: "Эта заметка используется для хранения параметров настройки этой TiddlyWiki",
	TabAll: "Эта служебная заметка содержит начинку закладки 'Все' на боковой панели",
	TabMore: "Эта служебная заметка содержит начинку закладки 'Ещё' на боковой панели",
	TabMoreMissing: "Эта служебная заметка содержит начинку закладки 'Нет' на боковой панели",
	TabMoreOrphans: "Эта служебная заметка содержит начинку закладки 'Потери' на боковой панели",
	TabMoreShadowed: "Эта служебная заметка содержит начинку закладки 'Служебные' на боковой панели",
	TabTags: "Эта служебная заметка содержит начинку закладки 'Метки' на боковой панели",
	TabTimeline: "Эта служебная заметка содержит начинку закладки 'История' на боковой панели",
	ToolbarCommands: "Эта служебная заметка определяет, какие команды будут показываться в меню заметки",
	ViewTemplate: "HTML-шаблон в этой сервисной заметке определяет, как будет выглядеть заметка",
	WindowTitle: "Эта служебная заметка содержит полный вид заголовка страницы" });

//}}}
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump <|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
/***
|Name|UnsavedChangesPlugin|
|Source|http://www.TiddlyTools.com/#UnsavedChangesPlugin|
|Version|3.3.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show droplist of tiddlers that have changed since the last time the document was saved|
|>|!!Minor corrections|
|Description|Rewrites code for supporting localisation and inserts new command parameter ''inline''|
|Author|vmunt|
|Source version|3.3.5|
|Change version|0.0.1|
Display a list of tiddlers that have been changed since the last time the document was saved.  The list includes all new/modified tiddlers as well as those changed with "minor edits" enabled and any tiddlers that you import during the session, regardless of their modification date.
!!!!!Usage
<<<
{{{
<<unsavedChanges panel>> or <<unsavedChanges>>
}}}
{{indent{
the ''panel'' keyword displays a 'control panel' interface containing a droplist of unsaved tiddlers and a 'goto' button, along with a command link to 'save changes'.  Depending upon what other plugins are installed, several additional elements will also be displayed: When [[NestedSlidersPlugin]] is installed, the entire control panel is contained within a ''SLIDER''.  When [[LoadTiddlersPlugin]] is installed, a ''REVERT'' button is added.  When [[SaveAsPlugin]] is installed, a ''SAVE AS'' link is added.  When [[UploadPlugin]] is installed, an ''UPLOAD'' (or ''save to web'') link is added.  When [[TrashPlugin]] is installed and there are tiddlers tagged with<<tag Trash>>, an ''EMPTY TRASH'' link is added.
}}}
{{{
<<unsavedChanges list [separator]>>
}}}
{{indent{
the ''list'' keyword displays a simple space-separated list of unsaved tiddlers without any other command links.  You can specify an optional ''separator'' value that can be used in place of the default space character.  For example, you can specify {{{"<br>"}}} as the separator in order to display each link, one per line.
}}}
{{{
<<unsavedChanges inline [separator [label [tip]]]>>
}}}
{{indent{
the ''inline'' keyword displays a header preceeded {{remark{(and expanded, if [[NestedSlidersPlugin]] is installed)}}} space-separated list of unsaved tiddlers without any other command links. You can specify an optional ''separator'' value that can be used in place of the default space character {{remark{(same as described in ''list'' keyword above)}}} and ''label'' and ''tip'' parameters to customize the header preceeded command link text and tooltip {{remark{(syntax of ''label'' string same as described in ''command'' keyword description below)}}}.
}}}
{{{
<<unsavedChanges command [label [tip]]>>
}}}
{{indent{
the ''command'' keyword displays a single 'command link' that, when clicked, displays a ~TiddlyWiki popup containing the list of unsaved tiddlers, the 'save changes' command and, depending upon what other plugins are installed, additional commands for 'save as', 'upload', and 'empty trash' (similar to the panel display described above).

You can specify optional ''label'' and ''tip'' parameters in the macro to customize the command link text and tooltip.  The default label for the command link is: "There %1 %0 unsaved tiddler%2...", where:
* %0 is automatically replaced with the number of unsaved changes
* %1 is either "is" (if changes=1) or "are" (if changes>1)
* %2 is either blank (if changes=1) or "s" (if changes>1)
resulting in the text: //"There is 1 unsaved tiddler...", "There are 2 unsaved tiddlers...", etc.//
}}}
<<<
!!!!!Examples
<<<
^^//note: the following examples will not display any output unless you have already created/modified tiddlers in the current document.//^^
{{{<<unsavedChanges>>}}}
<<unsavedChanges>>
----
{{{<<unsavedChanges command>>}}}
<<unsavedChanges command>>
----
{{{<<unsavedChanges list>>}}}
<<unsavedChanges list>>
----
{{{<<unsavedChanges list "<br>">>}}}
<<unsavedChanges list "<br>">>
----
{{{<<unsavedChanges inline>>}}}
<<unsavedChanges inline>>
----
{{{<<unsavedChanges inline "<br>">>}}}
<<unsavedChanges inline "<br>">>
<<<
!!!!!Revisions
<<<
2011.04.29 3.3.5 in panel(), use custom label (if provided).  Also, removed "small" style from panel commands so surrounding CSS font size will be used.
2010.12.05 3.3.4 display 'save as...' command even if readOnly
2009.03.02 3.3.3 fix handling for titles that contain HTML special chars (lt,gt,quot,amp)
2008.09.02 3.3.2 cleanup popup list output generation and added timestamps/sizes to popup display
2008.08.23 3.3.1 added optional custom 'label' and 'tip' params to 'command' mode and defined default values for mode, label, tip, and separator as object properties for I18N/L10N-readiness.
2008.08.21 3.3.0 complete re-write of rendering and refresh processing to support multiple instances and automatic self-refresh (no longer depends upon core refresh notifications)
2008.08.21 3.2.0 added 'command' option for link+popup as alternative to 'control panel' interface
2008.04.22 3.1.2 use SaveAsPlugin instead of obsolete NewDocumentPlugin to add "save as" link
2007.12.22 3.1.1 hijack removeTiddler() instead of low-level deleteTiddler() to correct tracking and refresh handling issues.  in saveTiddler(), check for 'tiddler rename' (title!=newtitle) and adjust list accordingly.
2007.12.21 3.1.0 added support for {{{<<unsavedChanges list separator>>}}} usage to unsaved tiddlers as a simple list of links, embedded in tiddler content (e.g., [[MainMenu]])
2007.12.20 3.0.0 rewrite to track ALL changed tiddlers, including imports and minor edits, regardless of saved modification dates.  Also, rewrote display logic to directly refresh macro output instead of triggering a page refresh.  The entire process is MUCH more efficient now.
2007.08.02 2.0.0 converted from inline script
2007.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.UnsavedChangesPlugin= {major: 3, minor: 3, revision: 5, date: new Date(2011,4,29)};

config.macros.unsavedChanges = {
	changed: [], // list of currently unsaved tiddler titles
	defMode: "panel",
	defSep: " ",
	defLabel: "There %1 %0 unsaved tiddler%2",
	defTip: "view a list of unsaved tiddler changes",
	gotoLabel: "goto", // vmunt
	cmdFormat: " &nbsp;[[%1 - %0 (%2 bytes)|%0]]&nbsp; ", // %0 -- tiddler label, %1 -- modification date, %2 -- tiddler size
	cmdTime: 'YYYY.0MM.0DD 0hh:0mm:0ss',
	panelFormat: '<option value="%0">%1 - %0 (%2 bytes)</option>',
	panelTime: 'YYYY.0MM.0DD 0hh:0mm:0ss',
	inlineFormat: "[[%0 (%1)|%0]]",
	inlineTime: "0hh:0mm",
	ending1: function(c) { return (c==1?'is':'are'); },
	ending2: function(c) { return (c==1?'':'s'); },
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var wrapper=createTiddlyElement(place,"span",null,"unsavedChanges");
		wrapper.setAttribute("mode",params[0]||this.defMode);
		switch (wrapper.getAttribute("mode")) { // vmunt
		case "command":
			wrapper.setAttribute("label",params[1]||this.defLabel);
			wrapper.setAttribute("tip",params[2]||this.defTip);
			break;
		case "list":
			wrapper.setAttribute("sep",params[1]||this.defSep);
			break;
		case "inline":
			wrapper.setAttribute("sep",params[1]||this.defSep);
			wrapper.setAttribute("label",params[2]||this.defLabel);
			wrapper.setAttribute("tip",params[3]||this.defTip);
			break;
		}
		this.render(wrapper);
	},
	render: function(wrapper) {
		removeChildren(wrapper); // make sure its empty
		if (!this.changed.length) return; // no changes = no output
		switch (wrapper.getAttribute("mode")) {
			case "command": this.command(wrapper); break;
			case "list": this.list(wrapper); break;
			case "inline": this.inline(wrapper); break; // vmunt: inserts new command word
			case "panel": default: this.panel(wrapper); break;
		}
	},
	refresh: function() {
		var wrappers=document.getElementsByTagName("span");
		for (var w=0; w<wrappers.length; w++)
			if (hasClass(wrappers[w],"unsavedChanges"))
				this.render(wrappers[w]);
	},
	list: function(place) { // show simple list of unsaved tiddlers
		wikify("[["+this.changed.join("]]"+place.getAttribute("sep")+"[[")+"]]",place);
	},
	inline: function(place) { // vmunt: show inline list of unsaved tiddlers with times
		var c=this.changed.length;
		var list=[];
		for (var i=c-1; i>=0; i--) {
			var tid=store.getTiddler(this.changed[i]);
			if (!tid) continue;
			var when=tid.modified.formatString(this.inlineTime);
			list.push(this.inlineFormat.format([tid.title,when,tid.text.length]));
		}
		var NSP=config.formatters.findByField("name","nestedSliders");
		var e1=this.ending1(c); var e2=this.ending2(c);
		var out=place.getAttribute("label").format([c,e1,e2]);
		out=NSP?'+++(_Unsaved)['+out+'|'+this.defTip+']...':(out+"\n");
		out+=list.join(place.getAttribute('sep'));
		out+=NSP?'===':'';
		wikify(out,place);
	},
	command: function(place) { // show command link with popup list
		var c=this.changed.length;
		var e1=this.ending1(c); var e2=this.ending2(c);
		var txt=place.getAttribute("label").format([c,e1,e2]);
		var tip=place.getAttribute("tip");
		var action=function(ev) { if (!ev) var ev=window.event;
			var p=Popup.create(this); if (!p) return false;
			var d=createTiddlyElement(p,"div");
			d.style.whiteSpace="normal"; d.style.width="auto"; d.style.padding="2px";
			// gather pretty links for changed tiddlers
			var list=[];
			for (var i=config.macros.unsavedChanges.changed.length-1; i>=0; i--) {
				var tid=store.getTiddler(config.macros.unsavedChanges.changed[i]);
				if (!tid) continue;
				var when=tid.modified.formatString(this.cmdTime);
				list.push(this.cmdFormat.format([tid.title,when,tid.text.length])); // vmunt
			}
			wikify("@@white-space:nowrap;"+list.join("<br>")+"@@",d);
			var t="\n----\n";
			t+="@@white-space:nowrap;display:block;text-align:center; &nbsp;";
			if (!readOnly) {
				t+="<<saveChanges>>";
				t+=config.macros.saveAs?" | <<saveAs>>":"";
				t+=config.macros.upload?" | <<upload>>":"";
				t+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
			} else {
				t+=config.macros.saveAs?"<<saveAs>>":"";
			}
			t+="&nbsp; @@";
			wikify(t,d);
			Popup.show();
			ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();
			return(false);
		}
		createTiddlyButton(place,txt,tip,action,"button");
	},
	panel: function(place) { // show composite droplist+buttons+commands
		// gather changed tiddlers (in reverse order by date - most recent first)
		var tids=[]; for (var i=this.changed.length-1; i>=0; i--)
			{ var t=store.getTiddler(this.changed[i]); if (t) tids.push(t); }
		tids.sort(function(a,b){return a.modified<b.modified?-1:(a.modified==b.modified?0:1);});
		// generate droplist items
 		var list=[];
		for (var i=tids.length-1; i>=0; i--) {
			var when=tids[i].modified.formatString(this.panelTime);
			list.push(this.panelFormat.format([tids[i].title.htmlEncode(),when,tids[i].text.length]));
		}
		// display droplist, buttons, and command links
		var out=''; var c=this.changed.length;
		var NSP=config.formatters.findByField("name","nestedSliders");
		var e1=this.ending1(c); var e2=this.ending2(c); // vmunt
		var summary=place.getAttribute("label").format([c,e1,e2]);
		out+=NSP?'+++(_Unsaved)['+summary+'|'+this.defTip+']...':(summary+"\n"); // vmunt: It seems "_Unsaved" (instead "unsaved") simplifies review of cookie list
		out+='<html><form style="display:inline"><!--\
			--><select size="1" name="list" \
				title="select a tiddler to view" \
				onchange="var v=this.value; if (v.length) story.displayTiddler(null,v);"><!--\
			-->'+list.join('')+'<!--\
			--></select><!--\
			--><input type="button" value="'+this.gotoLabel+'" onclick="this.form.list.onchange();">';
		if (config.macros.loadTiddlers)  {
			out+='<input type="button" value="revert" \
				title="import the last saved version of this tiddler" \
				onclick="var v=this.form.list.value; if (!v.length) return; \
					var t=\'<\'+\'<loadTiddlers [[tiddler:\'+v+\']] \'; \
					t+=document.location.href; \
					t+=\' confirm force noreport>\'+\'>\'; \
					var e=document.getElementById(\'executeRevert\'); \
					if (e) e.parentNode.removeChild(e); \
					e=document.createElement(\'span\'); \
					e.id=\'executeRevert\'; \
					wikify(t,e);">';
		}
		out+='</form></html>';
		out+='\n{{nowrap{';
		if (!readOnly) {
			out+="<<saveChanges>>";
			out+=config.macros.saveAs?" | <<saveAs>>":"";
			out+=config.macros.upload?" | <<upload>>":"";
			out+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
		} else {
			out+=config.macros.saveAs?"<<saveAs>>":"";
		}
		out+='}}}';
		out+=NSP?'===':'';
		wikify(out,place);
	}
};

// hijack store.saveTiddler() to track changes to tiddlers
if (store.showUnsaved_saveTiddler==undefined) {
	store.showUnsaved_saveTiddler=store.saveTiddler;
	store.saveTiddler=function(title,newtitle) {
		if (title!=newtitle) {
			var i=config.macros.unsavedChanges.changed.indexOf(title);
			if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove old from list
		} 
		var i=config.macros.unsavedChanges.changed.indexOf(newtitle);
		if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove new title from list
		config.macros.unsavedChanges.changed.push(newtitle); // add new title to END of list
		var t=this.showUnsaved_saveTiddler.apply(this,arguments);
		if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
		return t;
	}
}

// hijack store.removeTiddler() to track changes to tiddlers
if (store.showUnsaved_removeTiddler==undefined) {
	store.showUnsaved_removeTiddler=store.removeTiddler;
	store.removeTiddler=function(title) {
		var i=config.macros.unsavedChanges.changed.indexOf(title);
		if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove from list
		this.showUnsaved_removeTiddler.apply(this,arguments);
		if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
	}
}

// hijack store.setDirty() function to reset change list after file save
// note: do NOT hijack the prototype function.  This hijack should only be applied to
// the main 'store' instance only (i.e., don't refresh when loading temporary store
// as part of ImportTiddlers processing)
if (store.showUnsaved_setDirty==undefined) {
	store.showUnsaved_setDirty=store.setDirty;
	store.setDirty = function(flag) {
		var refresh=this.isDirty() && !flag; // 'dirty' to 'clean', force a refresh...
		this.showUnsaved_setDirty.apply(this,arguments); // but change the flag first.
		if (refresh) {
			config.macros.unsavedChanges.changed=[]; // clear changed list
			config.macros.unsavedChanges.refresh();
		}
	}
}
//}}}
/***
!Описание
/%
|Name|UnsavedChangesPlugin:rus|
|Description|Both translation to russian for plugin [[UnsavedChangesPlugin]] by Eric Shulman, source from [[TiddlyTools.com|http://www.TiddlyTools.com/#UnsavedChangesPlugin]] and russian documentation for this plugin|
|Описание|Модуль русифицирует работу модуля [[UnsavedChangesPlugin]] Эрика Шульмана и без этого модуля бесполезен|
|Source|http://vmunt.site/tw/plugins/unsavedChangesPluginRus.html|
|Version|0.0.1|
|Author|vmunt|
|License|Use it free|
|~CoreVersion|2.1 {{remark{(as Eric's plugin)}}}|
|Type|plugin|
%/Модуль [[UnsavedChangesPlugin]] отображает выпадывающий список заметок, которые были изменены или созданы после последнего сохранения документа. Этот список отображает также те заметки, которые были сохранены с помощью функции «мелких изменений» {{remark{(то есть без изменения даты модификации заметки)}}}, и те, которые были импортированы во время этой сессии вне зависимости от их даты последнего изменения
!Использование
{{remark{Примечание: Примеры в этом документе не будут отображаться до тех пор, пока в этой TiddlyWiki не будут присутствовать какие-либо изменённые заметки}}}
!!Встраиваемый диалог
{{{
<<unsavedChanges>>
}}}
отображает:
<<<
<<unsavedChanges>>
<<<
Вариант с параметром {{{panel}}}
{{{
<<unsavedChanges panel>>
}}}
работает так:
<<<
<<unsavedChanges panel>>
<<<
Ключевое слово {{{panel}}} отображает интерфейс, предназдаченный для панели управления, который содержит выпадывающий список несохранённых заметок и кнопочки ''Перейти'' и ''Сохранить''. Также при наличии других установленных модулей могут появляться дополнительные кнопочки:
* Когда в документе присутствует модуль [[NestedSlidersPlugin]], список заметок помещается в скрываемый контейнер {{remark{(слайдер)}}}
* Если установлен модуль [[LoadTiddlersPlugin]], добавляется кнопочка ''Восстановить'' {{remark{(Откат изменений)}}}
* Если установлен модуль [[SaveAsPlugin]], появляется кнопочка ''Сохранить как''
* При модуле [[UploadPlugin]] появляется кнопка ''Выгрузить'' {{remark{(или ''Сохранить в сеть'')}}}
* Когда присутствует модуль [[TrashPlugin]] и в списке присутствуют заметки, помеченные тегом {{{Trash}}}, появляется кнопка ''Очистить корзину''
!!Всплывающий диалог
Синтаксис
{{{
<<unsavedChanges command [уведомление [подсказка]]>>
}}}
отображает
<<<
<<unsavedChanges command>>
<<<
Использование ключевого слова ''command'' позволяет отображать одну ''уведомительную ссылку'', которая при нажатии на неё показывает всплывающее окно ~TiddlyWiki со списком несохранённых заметок, а также с кнопкой ''Сохранить изменения'' и другими кнопками, зависящими от наличия в документе установленных дополнительных плагинов {{remark{(''Сохранить как'', ''Выгрузить в сеть'' и ''Очистить корзину'', то есть теми же кнопками, которые уже были описаны выше в описании параметра ''panel'')}}}.

Вы можете указать дополнительные параметры ''текст'' и ''подсказка'' для настройки текста ''уведомительной ссылки'' и ''всплывающей подсказки''. Строка по умолчанию для ''уведомительной ссылки'' такая: "There %1 %0 unsaved tiddler%2...", где:
* %0 автоматически заменяется на цифру количества несохранённых заметок
* %1 будет или "is" (если количество =1), или "are" (если количество >1)
* %2 будет или пустой строкой (если количество =1), или "s" (если количество >1).
В результате получится текст: //"There is 1 unsaved tiddler...", "There are 2 unsaved tiddlers...", и так далее.//
!!Простой список
{{{
<<unsavedChanges list [разделитель]>>
}}}
работает так:
<<<
<<unsavedChanges list>>
<<<
Ключевое слово ''list'' отображает простой список разделённых пробелами изменённых заметок без дополнительных командных кнопок. Вы можете указать дополнительный ''разделитель'', который будет использован для вставки вместо пробела. Например, если использовать в качестве разделителя строку {{{"<br>"}}}, то каждая ссылка на изменённую заметку будет располагаться на отдельной строке:
{{{
<<unsavedChanges list "<br>">>
}}}
<<<
<<unsavedChanges list "<br>">>
<<<
!!Встраиваемый список
Синтаксис
{{{
<<unsavedChanges inline [разделитель [уведомление [подсказка]]]>>
}}}
вместо всплывающего окна делает список заметок {{remark{(аналогично команде ''list'')}}} со временем последней корректировки, но при наличии модуля [[NestedSlidersPlugin]] дополнительно заключает этот список в рамки скрываемого текста {{remark{(слайдера)}}}, например:
{{{<<unsavedChanges inline>>}}}
<<<
<<unsavedChanges inline>>
<<<
или
{{{<<unsavedChanges inline "<br>">>}}}
<<<
<<unsavedChanges inline "<br>">>
<<<
***/
///%
//{{{
merge(config.macros.unsavedChanges,{
//	defMode: "panel",
//	defSep: " ",
	defLabel: "Изменен%2 %0 замет%1 »", 
	ending1: function(c) { return (c==1?'ка':(c<5?'ки':'ок')); }, // Замет:ка (1), ки (2-4), ок (5+)
	ending2: function(c) { return (c==1?'а':(c<5?'ы':'о')); }, // Изменен:а (1), ы (2-4), о (5+)
	defTip: "Показать/скрыть все несохранённые заметки",
	gotoLabel: "&#9658;", // ►&#9658;
	cmdFormat: " &nbsp;[[%1 -- %0 (%2 байта)|%0]]&nbsp; ", // %0 -- tiddler label, %1 -- modification date, %2 -- tiddler size
	cmdTime: '0hh:0mm',
	panelFormat: '<option value="%0">%1 -- %0 (%2 bytes)</option>',
	panelTime: '0hh:0mm',
	inlineFormat: "[[%0 (%1)|%0]]",
	inlineTime: '0hh:0mm'
});
//}}}
//%/
<!--{{{-->
<table width=100%>
<tr><td valign=top>
	<div class='title' macro='view title'></div>
	<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span>&nbsp;(<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
</td>
<td valign=top>
	<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
	<div class='tagging' macro='tagging'></div>
	<div class='tagged' macro='tags'></div>
	<div class='tagClear'></div>
</td></tr>
</table>
<div class='viewer' macro='view text wikified'></div>
<!--}}}-->
<!--{{{-->
<span class='yourSearchNumber' macro='foundTiddler number'></span>
<span class='yourSearchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;
<span macro='foundTiddler field includeURL'/></span>&nbsp;-&nbsp;
<span class='yourSearchTags' macro='foundTiddler field tags 50'/></span>

<span macro="yourSearch if previewText"><div class='yourSearchText' macro='foundTiddler field text 250'/></div></span>
<!--}}}-->
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.5 (2010-02-16)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2010 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!

For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1. 
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.5.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:5,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2010 (www.abego-software.de)"};if(!window.abego){window.abego={};}if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,_4=_1.length;i<_4;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,_7=this.length;i<_7;i++){_5.call(_6,this[i],i,this);}};}abego.toInt=function(s,_8){if(!s){return _8;}var n=parseInt(s);return (n==NaN)?_8:n;};abego.createEllipsis=function(_9){var e=createTiddlyElement(_9,"span");e.innerHTML="&hellip;";};abego.shallowCopy=function(_a){if(!_a){return _a;}var _b={};for(var n in _a){_b[n]=_a[n];}return _b;};abego.copyOptions=function(_c){return !_c?{}:abego.shallowCopy(_c);};abego.countStrings=function(_d,s){if(!s){return 0;}var _e=s.length;var n=0;var _f=0;while(1){var i=_d.indexOf(s,_f);if(i<0){return n;}n++;_f=i+_e;}return n;};abego.getBracedText=function(_10,_11,_12){if(!_11){_11=0;}var re=/\{([^\}]*)\}/gm;re.lastIndex=_11;var m=re.exec(_10);if(m){var s=m[1];var _13=abego.countStrings(s,"{");if(!_13){if(_12){_12.lastIndex=re.lastIndex;}return s;}var len=_10.length;for(var i=re.lastIndex;i<len&&_13;i++){var c=_10.charAt(i);if(c=="{"){_13++;}else{if(c=="}"){_13--;}}}if(!_13){if(_12){_12.lastIndex=i-1;}return _10.substring(m.index+1,i-1);}}};abego.select=function(_14,_15,_16,_17){if(!_17){_17=[];}_14.forEach(function(t){if(_15.call(_16,t)){_17.push(t);}});return _17;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}if(e.preventDefault){e.preventDefault();}e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_18,_19){if(!_19){_19={};}var _1a=_18;if(!_19.textIsRegExp){_1a=_18.escapeRegExp();if(_19.fullWordMatch){_1a="\\b"+_1a+"\\b";}}var _1b=new RegExp(_1a,"m"+(_19.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_1b,_19.fields,_19.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_1c){return this.tester.test(_1c);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}var _1d=m[2]?m[2].trim():"";r.push({name:"text",value:_1d});r[0].text=[_1d];return {title:m[1].trim(),params:r};}else{return {title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_1e,_1f,_20){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _21={"!":"title","%":"text","#":"tags"};var _22={};var _23;re.lastIndex=_1f;while(1){var i=re.lastIndex;var m=re.exec(_1e);if(!m||m.index!=i){throw "Word or String literal expected";}if(m[1]){var _24={};var _25=abego.getBracedText(_1e,0,_24);if(!_25){throw "Invalid {...} syntax";}var f=Function("tiddler","return ("+_25+");");return {func:f,lastIndex:_24.lastIndex,markRE:null};}if(m[2]){_23=true;}else{if(m[3]){_22[_21[m[3]]]=1;}else{if(m[4]){_22[m[4]]=1;}else{var _26=m[6];var _27=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _20=abego.copyOptions(_20);_20.fullWordMatch=_23;_20.textIsRegExp=_26;var _28=[];for(var n in _22){_28.push(n);}if(_28.length==0){_20.fields=_20.defaultFields;}else{_20.fields=_28;_20.withExtendedFields=false;}var _29=new abego.TiddlerFilterTerm(_27,_20);var _2a=_26?_27:_27.escapeRegExp();if(_2a&&_23){_2a="\\b"+_2a+"\\b";}return {func:function(_2b){return _29.test(_2b);},lastIndex:re.lastIndex,markRE:_2a?"(?:"+_2a+")":null};}}}}};abego.BoolExp=function(s,_2c,_2d){this.s=s;var _2e=_2d&&_2d.defaultOperationIs_OR;var _2f=/\s*(?:(\-|not)|(\())/gi;var _30=/\s*\)/g;var _31=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _32=/\s*[^\)\s]/g;var _33=/\s*(\-|not)?(\s*\()?/gi;var _34;var _35=function(_36){_33.lastIndex=_36;var m=_33.exec(s);var _37;var _38;if(m&&m.index==_36){_36+=m[0].length;_37=m[1];if(m[2]){var e=_34(_36);_30.lastIndex=e.lastIndex;if(!_30.exec(s)){throw "Missing ')'";}_38={func:e.func,lastIndex:_30.lastIndex,markRE:e.markRE};}}if(!_38){_38=_2c(s,_36,_2d);}if(_37){_38.func=(function(f){return function(_39){return !f(_39);};})(_38.func);_38.markRE=null;}return _38;};_34=function(_3a){var _3b=_35(_3a);while(1){var l=_3b.lastIndex;_31.lastIndex=l;var m=_31.exec(s);var _3c;var _3d;if(m&&m.index==l){_3c=!m[1];_3d=_35(_31.lastIndex);}else{try{_3d=_35(l);}catch(e){return _3b;}_3c=_2e;}_3b.func=(function(_3e,_3f,_40){return _40?function(_41){return _3e(_41)||_3f(_41);}:function(_42){return _3e(_42)&&_3f(_42);};})(_3b.func,_3d.func,_3c);_3b.lastIndex=_3d.lastIndex;if(!_3b.markRE){_3b.markRE=_3d.markRE;}else{if(_3d.markRE){_3b.markRE=_3b.markRE+"|"+_3d.markRE;}}}};var _43=_34(0);this.evalFunc=_43.func;if(_43.markRE){this.markRegExp=new RegExp(_43.markRE,_2d.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_44,_45){this.re=re;this.fields=_44?_44:["title","text","tags"];this.withExtendedFields=_45;};abego.MultiFieldRegExpTester.prototype.test=function(_46){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_46,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}if(this.withExtendedFields){return store.forEachField(_46,function(_47,_48,_49){return typeof _49=="string"&&re.test(_49)?_48:null;},true);}return null;};abego.TiddlerQuery=function(_4a,_4b,_4c,_4d,_4e){if(_4c){this.regExp=new RegExp(_4a,_4b?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_4d,_4e);}else{this.expr=new abego.BoolExp(_4a,abego.parseTiddlerFilterTerm,{defaultFields:_4d,caseSensitive:_4b,withExtendedFields:_4e});}this.getQueryText=function(){return _4a;};this.getUseRegExp=function(){return _4c;};this.getCaseSensitive=function(){return _4b;};this.getDefaultFields=function(){return _4d;};this.getWithExtendedFields=function(){return _4e;};};abego.TiddlerQuery.prototype.test=function(_4f){if(!_4f){return false;}if(this.regExp){return this.tester.test(_4f);}return this.expr.exec(_4f);};abego.TiddlerQuery.prototype.filter=function(_50){return abego.select(_50,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return "".search(this.regExp)>=0?null:this.regExp;}return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return (this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_51){this.items=_51;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_52){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_53){this.firstIndexOnPage=Math.min(Math.max(0,_53),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_54,_55){},renderPage:function(_56){if(_56.beginRendering){_56.beginRendering(this);}try{if(this.getItemsCount()){var _57=this.getLastIndexOnPage();var _58=-1;for(var i=this.getFirstIndexOnPage();i<=_57;i++){_58++;_56.render(this,this.items[i],i,_58);}}}finally{if(_56.endRendering){_56.endRendering(this);}}},addPageNavigation:function(_59){if(!this.getItemsCount()){return;}var _5a=this;var _5b=function(e){if(!e){var e=window.event;}abego.consumeEvent(e);var _5c=abego.toInt(this.getAttribute("page"),0);var _5d=_5a.getCurrentPageIndex();if(_5c==_5d){return;}var _5e=_5c*_5a.getItemsPerPage();_5a.setFirstIndexOnPage(_5e);_5a.onPageChanged(_5c,_5d);};var _5f;var _60=this.getCurrentPageIndex();var _61=this.getLastPageIndex();if(_60>0){_5f=createTiddlyButton(_59,"Previous","Go to previous page (Shortcut: Alt-'<')",_5b,"prev");_5f.setAttribute("page",(_60-1).toString());_5f.setAttribute("accessKey","<");}for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _62=_60+i;if(_62<0){continue;}if(_62>_61){break;}var _63=(i+_60+1).toString();var _64=_62==_60?"currentPage":"otherPage";_5f=createTiddlyButton(_59,_63,"Go to page %0".format([_63]),_5b,_64);_5f.setAttribute("page",(_62).toString());}if(_60<_61){_5f=createTiddlyButton(_59,"Next","Go to next page (Shortcut: Alt-'>')",_5b,"next");_5f.setAttribute("page",(_60+1).toString());_5f.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _65=40;var _66=4;var _67=function(_68,_69,_6a){var n=_68.length;if(n==0){_68.push({start:_69,end:_6a});return;}var i=0;for(;i<n;i++){var _6b=_68[i];if(_6b.start<=_6a&&_69<=_6b.end){var r;var _6c=i+1;for(;_6c<n;_6c++){r=_68[_6c];if(r.start>_6a||_69>_6b.end){break;}}var _6d=_69;var _6e=_6a;for(var j=i;j<_6c;j++){r=_68[j];_6d=Math.min(_6d,r.start);_6e=Math.max(_6e,r.end);}_68.splice(i,_6c-i,{start:_6d,end:_6e});return;}if(_6b.start>_6a){break;}}_68.splice(i,0,{start:_69,end:_6a});};var _6f=function(_70){var _71=0;for(var i=0;i<_70.length;i++){var _72=_70[i];_71+=_72.end-_72.start;}return _71;};var _73=function(c){return (c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _74=function(s,_75){if(!_73(s[_75])){return null;}for(var i=_75-1;i>=0&&_73(s[i]);i--){}var _76=i+1;var n=s.length;for(i=_75+1;i<n&&_73(s[i]);i++){}return {start:_76,end:i};};var _77=function(s,_78,_79){var _7a;if(_79){_7a=_74(s,_78);}else{if(_78<=0){return _78;}_7a=_74(s,_78-1);}if(!_7a){return _78;}if(_79){if(_7a.start>=_78-_66){return _7a.start;}if(_7a.end<=_78+_66){return _7a.end;}}else{if(_7a.end<=_78+_66){return _7a.end;}if(_7a.start>=_78-_66){return _7a.start;}}return _78;};var _7b=function(s,_7c){var _7d=[];if(_7c){var _7e=0;var n=s.length;var _7f=0;do{_7c.lastIndex=_7e;var _80=_7c.exec(s);if(_80){if(_7e<_80.index){var t=s.substring(_7e,_80.index);_7d.push({text:t});}_7d.push({text:_80[0],isMatch:true});_7e=_80.index+_80[0].length;}else{_7d.push({text:s.substr(_7e)});break;}}while(true);}else{_7d.push({text:s});}return _7d;};var _81=function(_82){var _83=0;for(var i=0;i<_82.length;i++){if(_82[i].isMatch){_83++;}}return _83;};var _84=function(s,_85,_86,_87,_88){var _89=Math.max(Math.floor(_88/(_87+1)),_65);var _8a=Math.max(_89-(_86-_85),0);var _8b=Math.min(Math.floor(_86+_8a/3),s.length);var _8c=Math.max(_8b-_89,0);_8c=_77(s,_8c,true);_8b=_77(s,_8b,false);return {start:_8c,end:_8b};};var _8d=function(_8e,s,_8f){var _90=[];var _91=_81(_8e);var pos=0;for(var i=0;i<_8e.length;i++){var t=_8e[i];var _92=t.text;if(t.isMatch){var _93=_84(s,pos,pos+_92.length,_91,_8f);_67(_90,_93.start,_93.end);}pos+=_92.length;}return _90;};var _94=function(s,_95,_96){var _97=_96-_6f(_95);while(_97>0){if(_95.length==0){_67(_95,0,_77(s,_96,false));return;}else{var _98=_95[0];var _99;var _9a;if(_98.start==0){_99=_98.end;if(_95.length>1){_9a=_95[1].start;}else{_67(_95,_99,_77(s,_99+_97,false));return;}}else{_99=0;_9a=_98.start;}var _9b=Math.min(_9a,_99+_97);_67(_95,_99,_9b);_97-=(_9b-_99);}}};var _9c=function(_9d,s,_9e,_9f,_a0){if(_9f.length==0){return;}var _a1=function(_a2,s,_a3,_a4,_a5){var t;var _a6;var pos=0;var i=0;var _a7=0;for(;i<_a3.length;i++){t=_a3[i];_a6=t.text;if(_a4<pos+_a6.length){_a7=_a4-pos;break;}pos+=_a6.length;}var _a8=_a5-_a4;for(;i<_a3.length&&_a8>0;i++){t=_a3[i];_a6=t.text.substr(_a7);_a7=0;if(_a6.length>_a8){_a6=_a6.substr(0,_a8);}if(t.isMatch){createTiddlyElement(_a2,"span",null,"marked",_a6);}else{createTiddlyText(_a2,_a6);}_a8-=_a6.length;}if(_a5<s.length){abego.createEllipsis(_a2);}};if(_9f[0].start>0){abego.createEllipsis(_9d);}var _a9=_a0;for(var i=0;i<_9f.length&&_a9>0;i++){var _aa=_9f[i];var len=Math.min(_aa.end-_aa.start,_a9);_a1(_9d,s,_9e,_aa.start,_aa.start+len);_a9-=len;}};this.render=function(_ab,s,_ac,_ad){if(s.length<_ac){_ac=s.length;}var _ae=_7b(s,_ad);var _af=_8d(_ae,s,_ac);_94(s,_af,_ac);_9c(_ab,s,_ae,_af,_ac);};};(function(){function _b0(msg){alert(msg);throw msg;};if(version.major<2||(version.major==2&&version.minor<1)){_b0("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}abego.YourSearch={};var _b1;var _b2;var _b3=function(_b4){_b1=_b4;};var _b5=function(){return _b1?_b1:[];};var _b6=function(){return _b1?_b1.length:0;};var _b7=4;var _b8=10;var _b9=2;var _ba=function(s,re){var m=s.match(re);return m?m.length:0;};var _bb=function(_bc,_bd){var _be=_bd.getMarkRegExp();if(!_be){return 1;}var _bf=_bc.title.match(_be);var _c0=_bf?_bf.length:0;var _c1=_ba(_bc.getTags(),_be);var _c2=_bf?_bf.join("").length:0;var _c3=_bc.title.length>0?_c2/_bc.title.length:0;var _c4=_c0*_b7+_c1*_b9+_c3*_b8+1;return _c4;};var _c5=function(_c6,_c7,_c8,_c9,_ca,_cb){_b2=null;var _cc=_c6.reverseLookup("tags",_cb,false);try{var _cd=[];if(config.options.chkSearchInTitle){_cd.push("title");}if(config.options.chkSearchInText){_cd.push("text");}if(config.options.chkSearchInTags){_cd.push("tags");}_b2=new abego.TiddlerQuery(_c7,_c8,_c9,_cd,config.options.chkSearchExtendedFields);}catch(e){return [];}var _ce=_b2.filter(_cc);var _cf=abego.YourSearch.getRankFunction();for(var i=0;i<_ce.length;i++){var _d0=_ce[i];var _d1=_cf(_d0,_b2);_d0.searchRank=_d1;}if(!_ca){_ca="title";}var _d2=function(a,b){var _d3=a.searchRank-b.searchRank;if(_d3==0){if(a[_ca]==b[_ca]){return (0);}else{return (a[_ca]<b[_ca])?-1:+1;}}else{return (_d3>0)?-1:+1;}};_ce.sort(_d2);return _ce;};var _d4=80;var _d5=50;var _d6=250;var _d7=50;var _d8=25;var _d9=10;var _da="yourSearchResult";var _db="yourSearchResultItems";var _dc;var _dd;var _de;var _df;var _e0;var _e1=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _e2=function(){return _dd!=null&&_dd.parentNode==document.body;};var _e3=function(){if(_e2()){document.body.removeChild(_dd);}};var _e4=function(e){_e3();var _e5=this.getAttribute("tiddlyLink");if(_e5){var _e6=this.getAttribute("withHilite");var _e7=highlightHack;if(_e6&&_e6=="true"&&_b2){highlightHack=_b2.getMarkRegExp();}story.displayTiddler(this,_e5);highlightHack=_e7;}return (false);};var _e8=function(){if(!_de){return;}var _e9=_de;var _ea=findPosX(_e9);var _eb=findPosY(_e9);var _ec=_e9.offsetHeight;var _ed=_ea;var _ee=_eb+_ec;var _ef=findWindowWidth();if(_ef<_dd.offsetWidth){_dd.style.width=(_ef-100)+"px";_ef=findWindowWidth();}var _f0=_dd.offsetWidth;if(_ed+_f0>_ef){_ed=_ef-_f0-30;}if(_ed<0){_ed=0;}_dd.style.left=_ed+"px";_dd.style.top=_ee+"px";_dd.style.display="block";};var _f1=function(){if(_dd){window.scrollTo(0,ensureVisible(_dd));}if(_de){window.scrollTo(0,ensureVisible(_de));}};var _f2=function(){_e8();_f1();};var _f3;var _f4;var _f5=new abego.PageWiseRenderer();var _f6=function(_f7){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){_b0("YourSearchItemTemplate not found");}this.place=document.getElementById(_db);if(!this.place){this.place=createTiddlyElement(_f7,"div",_db);}};merge(_f6.prototype,{render:function(_f8,_f9,_fa,_fb){_f3=_fb;_f4=_f9;var _fc=createTiddlyElement(this.place,"div",null,"yourSearchItem");_fc.innerHTML=this.itemHtml;applyHtmlMacros(_fc,null);refreshElements(_fc,null);},endRendering:function(_fd){_f4=null;}});var _fe=function(){if(!_dd||!_de){return;}var _ff=store.getTiddlerText("YourSearchResultTemplate");if(!_ff){_ff="<b>Tiddler YourSearchResultTemplate not found</b>";}_dd.innerHTML=_ff;applyHtmlMacros(_dd,null);refreshElements(_dd,null);var _100=new _f6(_dd);_f5.renderPage(_100);_f2();};_f5.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_d9):abego.toInt(config.options.txtItemsPerPage,_d8);return (n>0)?n:1;};_f5.onPageChanged=function(){_fe();};var _101=function(){if(_de==null||!config.options.chkUseYourSearch){return;}if((_de.value==_dc)&&_dc&&!_e2()){if(_dd&&(_dd.parentNode!=document.body)){document.body.appendChild(_dd);_f2();}else{abego.YourSearch.onShowResult(true);}}};var _102=function(){_e3();_dd=null;_dc=null;};var _103=function(self,e){while(e!=null){if(self==e){return true;}e=e.parentNode;}return false;};var _104=function(e){if(e.target==_de){return;}if(e.target==_df){return;}if(_dd&&_103(_dd,e.target)){return;}_e3();};var _105=function(e){if(e.keyCode==27){_e3();}};addEvent(document,"click",_104);addEvent(document,"keyup",_105);var _106=function(text,_107,_108){_dc=text;_b3(_c5(store,text,_107,_108,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_e1();_dc="";var _110=null;var _111=function(txt){if(config.options.chkUseYourSearch){_106(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}_dc=txt.value;};var _112=function(e){_111(_de);return false;};var _113=function(e){if(!e){var e=window.event;}_de=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_e0&&_e2()){_e0.onclick.apply(_e0,[e]);}else{_111(this);}break;case 27:if(_e2()){_e3();}else{this.value="";clearMessage();}break;}if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_101();}if(this.value.length<3&&_110){clearTimeout(_110);}if(this.value.length>2){if(this.value!=_dc){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_110){clearTimeout(_110);}var txt=this;_110=setTimeout(function(){_111(txt);},500);}}else{if(_110){clearTimeout(_110);}}}if(this.value.length==0){_e3();}};var _114=function(e){this.select();clearMessage();_101();};var args=_10e.parseParams("list",null,true);var _115=getFlag(args,"buttonAtRight");var _116=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}var txt=createTiddlyElement(null,"input",null,"txtOptionInput searchField",null);if(_10c[0]){txt.value=_10c[0];}txt.onkeyup=_113;txt.onfocus=_114;txt.setAttribute("size",_116);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}if(_10a){_10a.appendChild(txt);}if(_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}_de=txt;_df=btn;};var _117=function(){_e3();var _118=_b5();var n=_118.length;if(n){var _119=[];for(var i=0;i<n;i++){_119.push(_118[i].title);}story.displayTiddlers(null,_119);}};var _11a=function(_11b,_11c,_11d,_11e){invokeMacro(_11b,"option",_11c,_11d,_11e);var elem=_11b.lastChild;var _11f=elem.onclick;elem.onclick=function(e){var _120=_11f.apply(this,arguments);_fe();return _120;};return elem;};var _121=function(s){var _122=["''","{{{","}}}","//","<<<","/***","***/"];var _123="";for(var i=0;i<_122.length;i++){if(i!=0){_123+="|";}_123+="("+_122[i].escapeRegExp()+")";}return s.replace(new RegExp(_123,"mg"),"").trim();};var _124=function(){var i=_f3;return (i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _125=new abego.LimitedTextRenderer();var _126=function(_127,s,_128){_125.render(_127,s,_128,_b2.getMarkRegExp());};var _129=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_12a,_12b,_12c,_12d,_12e,tags,_12f){_129.apply(this,arguments);_102();};var _130=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_131){_130.apply(this,arguments);_102();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_132,_133,_134,_135,_136,_137){if(_134.length==0){return;}var name=_134[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_132,_133,_134,_135,_136,_137);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _b6()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_138){if(_b6()){var _139=_f5.getLastIndexOnPage();var s="%0 - %1".format([_f5.getFirstIndexOnPage()+1,_139+1]);createTiddlyText(_138,s);}},count:function(_13a){createTiddlyText(_13a,_b6().toString());},query:function(_13b){if(_b2){createTiddlyText(_13b,_b2.toString());}},version:function(_13c){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_13c,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_13d){var e=createTiddlyElement(_13d,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">&copy; 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_13e){if(_b2){var r=abego.parseNewTiddlerCommandLine(_b2.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_13e,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _13f=btn.onclick;btn.onclick=function(){_e3();_13f.apply(this,arguments);};_e0=btn;}},linkButton:function(_140,_141,_142,_143,_144,_145){if(_142<2){return;}var _146=_142[1];var text=_142<3?_146:_142[2];var _147=_142<4?text:_142[3];var _148=_142<5?null:_142[4];var btn=createTiddlyButton(_140,text,_147,_e4,null,null,_148);btn.setAttribute("tiddlyLink",_146);},closeButton:function(_149,_14a,_14b,_14c,_14d,_14e){var _14f=createTiddlyButton(_149,"close","Close the Search Results (Shortcut: ESC)",_e3);},openAllButton:function(_150,_151,_152,_153,_154,_155){var n=_b6();if(n==0){return;}var _156=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _157=createTiddlyButton(_150,_156,"Open all found tiddlers (Shortcut: Alt-O)",_117);_157.setAttribute("accessKey","O");},naviBar:function(_158,_159,_15a,_15b,_15c,_15d){_f5.addPageNavigation(_158);},"if":function(_15e,_15f,_160,_161,_162,_163){if(_160.length<2){return;}var _164=_160[1];var _165=(_164=="not");if(_165){if(_160.length<3){return;}_164=_160[2];}var test=config.macros.yourSearch.tests[_164];var _166=false;try{if(test){_166=test(_15e,_15f,_160,_161,_162,_163)!=_165;}else{_166=(!eval(_164))==_165;}}catch(ex){}if(!_166){_15e.style.display="none";}},chkPreviewText:function(_167,_168,_169,_16a,_16b,_16c){var _16d=_169.slice(1).join(" ");var elem=_11a(_167,"chkPreviewText",_16a,_16c);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_16e,_16f,_170,_171,_172,_173){var name=_170[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_16e,_16f,_170,_171,_172,_173);}},funcs:{title:function(_174,_175,_176,_177,_178,_179){if(!_f4){return;}var _17a=_124();var _17b=_17a>=0?"Open tiddler (Shortcut: Alt-%0)".format([_17a.toString()]):"Open tiddler";var btn=createTiddlyButton(_174,null,_17b,_e4,null);btn.setAttribute("tiddlyLink",_f4.title);btn.setAttribute("withHilite","true");_126(btn,_f4.title,_d4);if(_17a>=0){btn.setAttribute("accessKey",_17a.toString());}},tags:function(_17c,_17d,_17e,_17f,_180,_181){if(!_f4){return;}_126(_17c,_f4.getTags(),_d5);},text:function(_182,_183,_184,_185,_186,_187){if(!_f4){return;}_126(_182,_121(_f4.text),_d6);},field:function(_188,_189,_18a,_18b,_18c,_18d){if(!_f4){return;}var name=_18a[1];var len=_18a.length>2?abego.toInt(_18a[2],_d7):_d7;var v=store.getValue(_f4,name);if(v){_126(_188,_121(v),len);}},number:function(_18e,_18f,_190,_191,_192,_193){var _194=_124();if(_194>=0){var text="%0)".format([_194.toString()]);createTiddlyElement(_18e,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_d8,txtItemsPerPageWithPreview:_d9};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+"eady \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!')     <<option chk"+"SearchInText>>Text ('%')     <<option chkSearchInTags>>Tags ('#')    <<option chkSearchExtendedFiel"+"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+"view text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+"rchRange, .yourSearchCount, .yourSearchQuery   {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+";\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+"<tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+"h itemRange\"></span>\n\t\t&nbsp;of&nbsp;<span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor&nbsp;<span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+"seButton\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+">\n  <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+"h copyright\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n  <"+"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+"rchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;\n<span class='yourSearchTags' macro='found"+"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=_109;var _195=function(){if(config.macros.search.handler!=_109){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+"lers)\nto enable the 'Your Search' features.");}};setTimeout(_195,5000);abego.YourSearch.getStandardRankFunction=function(){return _bb;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return _f4;};abego.YourSearch.closeResult=function(){_e3();};abego.YourSearch.getFoundTiddlers=function(){return _b1;};abego.YourSearch.getQuery=function(){return _b2;};abego.YourSearch.onShowResult=function(_196){highlightHack=_b2?_b2.getMarkRegExp():null;if(!_196){_f5.setItems(_b5());}if(!_dd){_dd=createTiddlyElement(document.body,"div",_da,"yourSearchResult");}else{if(_dd.parentNode!=document.body){document.body.appendChild(_dd);}}_fe();highlightHack=null;};})();}
//%/
<html><table>
	<tr><th>Тип связи</th><th>Значение</th><th>Примечание</th></tr>
	<tr class="odd"><td rowspan=2 class="evn mid">Тел.<br>(phones):</td><td class="mid">+7(342)298-56-08</td><td class="remark">моб. (mobile)</td></tr>
	<tr class="evn"><td class="mid">+7(342)261-91-53</td><td class="remark">дом. (home)</td></tr>
	<tr class="odd"><td class="mid">Аська (ICQ):</td><td class="mid">470-208-921</td><td class="remark">запросы авторизации отключены (для уменьшения количества спама), поэтому сначала просто сообщение пишите, чтобы я вас увидел<br>(authorisation query off, so send me a simple message first)</td></tr>
	<tr class="evn"><td class="mid">Скайп (Skype):</td><td class="mid">vmunt.in.skype</td><td /></tr>
	<tr class="odd"><td class="mid">Jabber/XMPP:</td><td class="mid">vmunt <span class="remark">(большая собачка)</span> jabber <span class="remark">(маленькая точка)</span> ru</td><td /></tr>
	<tr class="evn"><td class="mid">Почта (mail):</td><td class="mid">vmunt <span class="remark">(большая собачка)</span> мэйл <span class="remark">(маленькая точка)</span> ру</td><td /></tr>
	<tr class="odd"><td class="mid">Сайт (www):</td><td class="mid">vmunt.site</td><td /></tr>
</table></html>
{{{sudo netstat -anp | grep '^tcp.*LISTEN'}}} выдаёт
{{{
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 1071/perl
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1010/cupsd
tcp 0 0 0.0.0.0:44154 0.0.0.0:* LISTEN 1810/skype
tcp 0 0 127.0.0.1:10010 0.0.0.0:* LISTEN 1071/perl
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2117/mysqld
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 949/memcached
tcp6 0 0 ::1:631 :::* LISTEN 1010/cupsd
tcp6 0 0 :::445 :::* LISTEN 690/smbd
tcp6 0 0 :::139 :::* LISTEN 690/smbd
}}}
Команда {{{ps aux | grep 1071}}} выдает:
{{{
nobody 1041 0.0 0.3 9532 7420 ? S 16:34 0:00 /usr/bin/perl /opt/dklab_realplexor/dklab_realplexor.pl
}}}
|!Задача|!Команда|
|Отключение процесса| {{{(sudo) kill -9 1071}}} |
|Информация о процессе| {{{ps aux | grep 1071}}} |
{{remark{где 1071 -- PID процесса }}}
{{remark{Все эти заметки написаны человеком, который поставил себе цель перейти с использования в своей работе Microsoft Windows (которую он знает очень хорошо) на Linux-ы (которые он изначально вообще не знал). Поэтому многие понятия будут объясняться не абстрактно, не «с нуля», а опираясь на сравнение с аналогичными понятиями в Microsoft-овских продуктах. Ситуация также была обострена ещё и тем, что переход на «новую» идеологию операционной системы осуществлялся в возрасте далеко за 40, поэтому для лучшего вспоминания вчера запомненного появился этот файл (мой протез памяти), который благодаря небольшим заметкам с хорошей системой поиска позволяет быстро найти ту команду или методику, которая как раз именно в данный момент закатилась в какой-то тёмный угол гиппокампа, и по-другому её оттуда быстро не выковырять никак.}}}
Идеология Linux и сообщества свободного ПО в корне отличается от идеологии разработчиков коммерческих продуктов:
# Разработчики коммерческих продуктов:
## всегда стараются сделать свой продукт таким, чтобы он решал __все__ потребности пользователя в той нише, на которую изначально был рассчитан данный продукт. В результате появляются монстры вида Microsoft Office, Nero Toolkit, Corel Office Suite или Adobe Master Collection, из которых пользователь будет пользоваться от силы 30-40% возможностей, но оплачены будут все 100%.
## новые возможности требуется вносить в каждый пакет {{remark{(в пакет Nero, изначально предназначенный для записи дисков, теперь требуется вносить поддержку проигрывания MKV-файлов и создания графических меню лазерных дисков, ибо там уже встроен и проигрыватель, и программа видеоредактирования и создания дисков, и ещё куча всяких довесков, которые рядовому пользователю не нужны, а нерядовой всё равно уже использует другие, профессиональные пакеты для этой цели)}}}. В результате сложность и время внесения растут экспоненциально, соответственно, чтобы выпускать продукт в разумные сроки, производители вынуждены резко сокращать время тестирования {{remark{(что приводит к выпуску «сырых» версий)}}} и постоянно выпускать всякие «заплатки» {{remark{(устраняющие ошибки программы)}}}. В результате мы имеем непонятно как работающий продукт, в уверенности в работоспособности которого нет никакой.
## Купив однажды коммерческий продукт, Вы автоматически будете __вынуждены__ покупать всё более свежие {{remark{(и всё более «тормозные»)}}} программы, выкидывая предыдущие потраченные на эту программу деньги. Свободные программы часто, конечно, тоже распухают и начинают подтормаживать, но за это хотя бы не надо платить…
# В свободном ПО идеология другая:
## Программы делаются для того, чтобы решить какую-нибудь проблему. Для решения проблемы и выпускается программа, которая не умеет открывать консервные банки, например, но зато свою задачу делает как минимум на четыре с плюсом {{remark{(ибо делалось, как говорится,  «для себя»)}}}. В результате мы имеем не один пакет–«швейцарский нож», а много-много программ {{remark{(названия которых приходится запоминать)}}}. Некоторые это могут посчитать не совсем удобным.
## Большинство программ для решения типовых задач под Linux {{remark{(за исключением игрушек, конечно, что вполне логично)}}} превосходят коммерческие аналоги по функциональности в разы. Для примера можно просто назвать ситуацию с браузерами, что когда Microsoft выпустил наконец-то Internet Explorer 7 с поддержкой закладок {{remark{(причём даже реализацию этой поддержки ребята из M$ нормально сделать не смогли (или не захотели, что тоже объяснимо))}}}, в свободных программах {{remark{(Opera и FireFox)}}} эта поддержка была нормой уже года два, насколько я помню…
Ну и при современных выкрутасах с написанием лицензий к коммерческому ПО не нарушить её обычно практически невозможно {{remark{(то есть программу, конечно, возможно использовать, не нарушая EULA, но обычно все ограничения EULA бывает достаточно проблематично объяснить директору компании, который, собственно, и заплатил за эту программу свои деньги)}}}. А нарушение лицензии чем грозит, все в курсе?
Ну и напоследок очень симпатичная статья, более подробно расписывающее нюансы свободного ПО для тех, кто сталкивается с этой областью впервые:
{{author{Linux — это не Windows ©}}}
Для более понятного освоения Linux-а желательно иметь представление ещё о следующих понятиях:
[[Идеология дерева ресурсов UNIX-подобных ОС]]
[[Идеология безопасности UNIX-подобных ОС]]
[[Использование нескольких рабочих столов]]
VirtualBox
Clonezilla {{remark{(есть в лазере edubuntu как вариант LiveCD, внутри Expert есть галочка "Менять SID", в Beginner-е она взведена по умолчанию)}}}
drbl - генерирование образа по сети
Бездисковые рабочие станции

uuid fstab
!Проверяем расположение флэшек
{{{
sudo mount /dev/sdb1 /mnt/flash -r
}}}
и в папке /mnt/flash {{remark{(заранее созданной, например, командой {{{sudo mkdir /mnt/flash}}})}}} смотрим, какая именно это флэшка. Проверяем как исходную флэшку {{remark{(ключ {{{-r}}} монтирует диск только для чтения)}}}
!Делаем дубликат флэшки
!!Копирование с sdb (повреждённая флэшка) на sdc (копия для операций по восстановлению)
{{{
sudo dd if=/dev/sdb of=/dev/sdc
}}}
или с размером блока 1 мегабайт
{{{
sudo dd if=/dev/sdb of=/dev/sdc bs=1M
}}}
|!Размер блока|!Считано записей|!Записано записей|!Скопировано, байт|!Время, сек.|!Скорость, Мб/с|
| 512 байт | 3'911'680+0| 3'911'680+0| 2'002'780'160| 572,243| 3,5 |
| 1 мегабайт | 1'910+0| 1'910+0| 2'002'780'160| 233,479| 8,6 |
!!Копирование с и на sdb через промежуточный файл на диске
{{{
sudo dd if=/dev/sdb of=~/flash.dmp bs=1M
sudo dd if=~/flash.dmp of=/dev/sdb bs=1M
}}}
!Программы восстановления
[[scalpel|Пакет scalpel]] / [[foremost|Пакет foremost]]
[[recoverjpeg|Пакет recoverjpeg]]
!!Не попробовал ещё
[[magicrescue|Пакет magicrescue]]
[[testdisk|Пакет testdisk]]
[[friendy-recovery|Пакет friendly-recovery]]
|sortable|k
|!Раздел|!Клавиша|!Назначение|h
|| Alt-F1 |Вызов меню «Пуск»|
|Быстрый запуск| Alt-F2 |Вызов команды «Выполнить»|
|Быстрый запуск| Ctrl-T<br>Ctrl-Alt-T |Вызов окна терминала|
|Окна| Alt-F4 |Закрыть окно|
|Окна| Alt-F7 |Перемещение окна приложения|
|Окна| Alt-F8 |Изменение размера окна приложения|
|Окна| Alt-F9 |Свернуть окно приложения|
|Окна| Alt-F10 |Развернуть окно приложения на полный экран / обычный размер|
|Рабочие столы|Ctrl-Alt-стрелки|Переход на другой рабочий стол в заданном направлении|
|Рабочие столы|Ctrl-Alt-Shift-стрелки|Перенос текущего активного окна на другой рабочий стол в заданном направлении|
{{remark{Примечание: горячие клавиши приведены для оболочки GNOME}}}
<html>
<ol>

<li>Настроить хранитель экрана и параметры электропитания</li>

<li>Обновить систему, <u>перезагрузиться</u></li>

<li>Отключить TouchPad <span class="remark">(<code>gksu gconf-editor</code>, открываем веточку <code>/desktop/gnome/peripherals/touchpad/</code>, убираем галочку с пункта Использовать TouchPad)</span></li>

<li>Установить пакеты <a class="tiddlyLink tiddlyLinkExisting" href="javascript:;" onclick="onClickTiddlerLink(event)" tiddlyLink="Пакет GNOME Commander">GNOME Commander</a> / Meld / <a class="tiddlyLink tiddlyLinkNonExisting" href="javascript:;" onclick="onClickTiddlerLink(event)" tiddlyLink="Пакет TUX Commander">Tux Commander</a> / <a class="tiddlyLink tiddlyLinkExisting" href="javascript:;" onclick="onClickTiddlerLink(event)" tiddlyLink="Пакет Samba">Samba</a> / <a class="tiddlyLink tiddlyLinkNonExisting" href="javascript:;" onclick="onClickTiddlerLink(event)" tiddlyLink="Пакет system-config-samba">system-config-samba</a>. Устанавливать GADMIN-SAMBA пока не надо. Эта программа так перегибает палку в управлении пользователями, что потом соединиться не удаётся. Как минимум утилита удаляет <code>vmunt</code>-а из <code>/etc/samba/smbusers</code></li>

<li>Запустить GNOME Commander, в настройках включить быстрый поиск через Alt и на закладке расположение включить Современную цветовую схему. По желанию поставить галочку на LS_COLORS. Сделать это как в gksu-шной версии, так и в пользовательской</li>

<li>Создать в <code>/mnt</code> папки <code>WINDOWS</code> и <code>STORAGE</code>, отредактировать <code>/etc/fstab</code>, внеся туда:
<pre>
/dev/sda2	/mnt/WINDOWS	vfat	users,iocharset=utf8,umask=0000	0	0
/dev/sda3	/mnt/STORAGE	ntfs	users,umask=0000	0	0
</pre>Смонтировать тома</li>

<li>В <code>/etc/samba/smb.conf</code> для безопасности строчку <code>usershare allow guests</code> можно поменять с <code>yes</code> на <code>no</code>)</span>. Запустить <code>Параметры / Администрирование / Samba</code>, сделать <code>/var/lib/samba/printers</code> невидимым и только для чтения, и занести строчку <code>/mnt/STORAGE</code> с правами на запись и доступом только нужным пользователям</li>

<li>Импортировать из резервной копии в <code>~</code> папочки Изображения, .gimp-2.6 и .mozilla</li>

<li>Установить пакеты:
<ul>
	<li>CompizConfig-settings-manager</li>
	<li>GIMP, gimp-help-ru, InkScape</li>
</ul></li>

<li>Сделать меню Commanders в меню GNOME, скопировать туда все оболочки, сделать ярлыки на GIMP/InkScape/Commanders в панели быстрого запуска, сменить иконки gksu-шных запусков программ на gksu-шные</li>

<li>В CompizConfig включить <code>Эффекты / Вязкие окна</code> и <code>Управлении окнами / [Общие] / Изменение размеров окна</code> переключить метод Прямоугольник на метод Растянуть</li>

<li>Настроить панели GNOME:
<ul>
	<li>Вверху слева: Строка меню</li>
	<li>Вверху справа: Касса символов / Разделитель / Сводка погоды / Разделитель / Системный монитор / Апплет уведомлений+Часы+Апплет уведомлений сеанса</li>
	<li>Внизу слева: Корзина / Переключатель рабочих мест / Кнопка расчистки рабочего стола <span class="remark">(<code>Show desktop</code>)</span> / Разделитель / FireFox / Inkscape / GIMP / Калькулятор / Все коммандеры ([su] и не [su]) / Список окон</li>
	<li>Внизу справа: Область уведомлений / Блокировка экрана</li>
</ul>После добавления на панели нужных апплетов из папочки <code>.gconf/apps/panel/applets</code> в папке сохранений перенести файлы настройки в соответствующие текущие папочки. Перезагрузиться</li>

<li>Установить VirtualBox и virtualbox-guest-additions</li>

</ol>
</html>{{remark{Что не работает в Ubuntu}}}
* Апплеты window-picker-applet {{remark{(показывает приложения иконками, без подписей)}}}, {{remark{lock-keys-applet (показывает состояние индикаторов NumLock, ScrollLock, CapsLock)}}}
[[Настройки BIOS для Linux]]
[[Структура каталогов Linux]]
[[Имена устройств в Linux]]
[[Модули ядра Linux]]
[[Утилиты Linux]]
[[Типовые операции в Linux]]
K3b, Brasero {{remark{(по умолчанию лежит в папочке Аудио и Видео)}}
<html>
<p>UNIX <span class="remark">(и его идеологический наследник Linux)</span> изначально был спроектирован как многозадачная многопользовательская операционная система. Это <span class="remark">(как мы увидим дальше)</span> позволяет организовывать безопасность использования системы совершенно естественным и непринуждённым образом.</p>

<p>Во всех UNIX-овских файловых системах <span class="remark">(например, все варианты extN)</span> изначально была заложена простая система прав доступа на файлы и папки. Записывается эта аббревиатура как RWX.</p>

<p>R <span class="remark">(Read)</span> — разрешение на чтение.</p>
<p>W <span class="remark">(Write)</span> — разрешение на запись.</p>
<p>X <span class="remark">(eXecution)</span> — разрешение на запуск и выполнение программ.</p>

<p>Плюс этих групп прав три. Первая — возможности хозяина папки, вторая — возможности авторизованных пользователей, третья — возможности кого попало <span class="remark">(типа, гостей (или хакеров))</span>.</p>

<p>Поэтому возможности операций с той или иной папкой определяются маской прав.</p>

<p>Например, папки с программами <span class="remark">(/bin)</span> для авторизованных пользователей имеют маску <code>r-x</code>. Это значит, что пользователь может прочитать папку <span class="remark">(найти и увидеть нужную программу)</span>, и выполнить её. Но вот записать в эту папку что-нибудь нужное <span class="remark">(или вирус)</span> он хоть уМолись <span class="remark">(цензурный вариант многочисленных повторяющихся действий)</span> не сможет! Потому что хозяин этой папки — root <span class="remark">(то есть Администратор)</span>. И полная маска прав выглядит так: <code>rwxr-xr--</code> <span class="remark">(или вообще <code>rwxr-x---</code>)</span>. Это значит, что хозяин <span class="remark">(root)</span> может делать с папкой и файлами в ней всё, авторизованные пользователи могут запускать из неё программы, но записать в неё ничего не могут, неавторизованные пользователи могут только видеть содержимое папки <span class="remark">(или даже вообще не иметь к ней доступа)</span>.</p>

<p>Сразу посмотрим на аналогичные права на папках пользователей. Папка пользователя с логином <code>vasya</code> <span class="remark">(/home/vasya с хозяином <code>vasya</code> по умолчанию)</span> обычно имеет маску прав <code>rw-r-----</code> <span class="remark">(или даже <code>rw-------</code>)</span>. Это означает, что <code>vasya</code> может сохранять у себя в личной папке любые файлы <span class="remark">(но не может запустить ни одну программу)</span>, другие пользователи могут видеть файлы <code>vasya</code>, могут их просмотреть или скопировать, но не могут их изменить <span class="remark">(или вообще даже видеть не могут)</span>.<p>

<p>Таким образом, пользователь <code>vasya</code> без проблем работает со всеми установленными на компьютере программами <span class="remark">(или с теми, с которыми он умеет работать)</span>. А в случае необходимости установить <span class="remark">(или провести настройку. Папки с общими и системными настройками программ тоже не имеют для авторизованных пользователей атрибута W)</span> новую программу он просто запускает установщика этой программы под <code>root</code>-ом <span class="remark">(в командной строке за запуск программы от пользователя <code>root</code> отвечает программа <code>sudo</code>, а в графической среде программы просто запрашивают пароль для установки (имя <code>root</code>-а запрашивать никакого смысла нет, ибо оно всё равно заранее известно))</span>. Если пользователь <code>vasya</code> не знает пароля администратора, то поспешивший на помощь сисадмин прямо под сеансом пользователя с Очень Ограниченными правами и установит программу, и настроит, и проверит её работоспособность. И это всё не прерывая работы пользователя <span class="remark">(не завершая его сеанс и не перезагружаясь, ибо тоже не надо. Не об обновлении же ядра речь идёт, правда?)<span>.</p>

<p>А вот когда пользователь <code>vasya</code> запускает FireFox и залазит этим FireFox-ом на красивый сайт, который фоном под интересную музычку на компьютер пользователя <code>vasya</code> втайне записывает от души червей и троянов, то сайт сможет записать любое количество троянов в любое место домашнего каталога пользователя <code>vasya</code>, но вот запустить <span class="remark">(активировать)</span> этого зловреда операционная система просто не даст. Нет на папке <code>/home/vasya</code> флага X! Нету! Приплыли!</p>

<p>Конечно, гадкий сайт и рад был бы записать зловреда туда, откуда его можно исполнить, и поиметь-таки по полной программе компьютер пользователя <code>vasya</code>, но вот в те папки программам, запущенным от имени любого авторизованного пользователя, нет никакого доступа на запись. Облом-с! <span class="remark">(облом, естественно, только в том случае, если гениальный пользователь <code>vasya</code> не догадался запустить FireFox под sudo)</span>.</p>

<p>Таким образом, такая простенькая система управления правами <span class="remark">(разработанная ещё в незапамятном 1970-м году, когда ещё не было никакого вредоносного интернета, никаких говнистых сайтов, и даже великий Билл Гейтс ещё в детский садик ходил)</span> до сих пор спасает предусмотрительных пользователей UNIX-подобных Linux-ов практически от всех современных опасностей. Поэтому-то, собственно, под Linux и нет вирусов <span class="remark">(ну, практически нет, ибо всё равно существует класс программ, рассылаемых по почте, или как бесплатные клёвые программы-игрушки под Linux, с заманухами класса: "Запусти — и ты кончишь!", которые счастливые получатели-таки запускают под sudo. Но это уже классифицируется не как вирус (саморазмножающаяся программа), а как вечная человеческая дурь (или лоховская доверчивость, что суть то же самое))</span>.</p>

<p>Так что вся безопасность в Linux-ах встроена по умолчанию, при начальной установке, и испортить всю эту конструкцию можно только специально. Ручками. Ну или с помощью доверенных специальных программ-оптимизаторов <span class="remark">(«твикеров», если по-русски), распространяемых совершенно бесплатно!</p>

<blockquote>
<table style="float:right;margin:0px -20px 0px 10px;padding:2px">
	<tr><th>Маска</th><th>Двоичная</th><th>Десятичная</th><th>Маска</th><th>Двоичная</th><th>Десятичная</th></tr>
	<tr><td class="mid"><code>---</code></td><td class="mid">000</td><td class="mid">0</td><td class="mid"><code>r--</code></td><td class="mid">100</td><td class="mid">4</td></tr>
	<tr><td class="mid"><code>--x</code></td><td class="mid">001</td><td class="mid">1</td><td class="mid"><code>r-x</code></td><td class="mid">101</td><td class="mid">5</td></tr>
	<tr><td class="mid"><code>-w-</code></td><td class="mid">010</td><td class="mid">2</td><td class="mid"><code>rw-</code></td><td class="mid">110</td><td class="mid">6</td></tr>
	<tr><td class="mid"><code>-wx</code></td><td class="mid">011</td><td class="mid">3</td><td class="mid"><code>rwx</code></td><td class="mid">111</td><td class="mid">7</td></tr>
</table>
<p>Для полноты картины следует отметить, что маска прав в некоторых программах может указываться не в виде символьного сочетания вида <code>rwxrw-r--</code>, а в виде соответствующего данной комбинации числа <span class="remark">(например, <code>764</code>, как в данном случае)</span>. Для справки справа в табличке приведено соответствие маски и числа в разных системах счисления. Соответственно, маска <code>rwxrwxrwx</code> будет в данном представлении выглядеть как <code>777</code>, а маска <code>rwxrw-rw-</code> — как <code>766</code>.</p>
</blockquote>

<p>Для полной феерии вспомним <span class="remark">(как страшный сон)</span>, как это происходит под Microsoft Windows.</p>

<p>Для начала следует отметить, что в файловых системах Microsoft встроенных в файловую систему разграничений прав пользователей изначально нет <span class="remark">(в файловую систему NTFS прикручено некоторое, в принципе, достаточно функциональное и продвинутое (если не вспоминать предшественника этой идеологии — системы прав в файловой системе Novell Netware Bindery, в которой аналогичная система прав была сделана намного логичнее, разумнее и элегантнее))</span> управление правами, которое вследствие весьма низкоуровневой системы управления по умолчанию не отображается, все права для всех пользователей по умолчанию опять же включены <span class="remark">(тут ничего не поделаешь, ибо бизнес-политика по другому не позволит сделать)</span>, и управлять всем этим хозяйством можно только под учётной записью с параметрами локального админа.</p>

<blockquote>
<p>Вообще очень хочется сделать некоторое отступление для более ясного понимания.</p>

<p>Дело в том, что собственных технологий у Microsoft нет вообще <span class="remark">(ну или практически нет. Возможно, что-то гениальное ими и было разработано в какой-то области, но лично мне в голову из моего 25-летнего опыта работы с разными продуктами этой фирмы ничего в голову не приходит)</span>. А поступает она достаточно просто: берёт какую-то гениальную <span class="remark">(удобную, продуманную, сделанную для людей, нужное подчеркнуть)</span> технологию <span class="remark">(оконный интерфейс, экранные удобства, контекстные меню, C++, браузеры, полноэкранные текстовые редакторы, электронные таблицы, распределённый запуск и управление, веб-серверы, сетевые интерфейсы, антивирусы, в конце концов)</span>, и <span class="remark">(чтобы не платить никому никаких лицензионных отчислений (разумный подход, конечно, кто спорит. Китай точно также поступает))</span> это переделывает <span class="remark">(делая по пути ЭТО уже не таким гениальным, удобным, продуманным, сделанным для людей)</span>, выпуская НОВОЕ под своей торговой маркой.</p>

<p>И тут ведь практически не подкопаешься. Это действительно уже ИХ продукт <span class="remark">(с невнятными конструкциями, библиотеками классов, с какими-то дополнительными монструозными довесками, с отсутствующей ключевой функциональностью (ибо это то, что может быть запатентовано))</span>, но все эти недостатки уже не важны, ибо технологические параметры в постмодернистскую эпоху на коммерческий успех практически не влияют. Поэтому нельзя обвинять Microsoft в том, что что-то у них не доделано или что-то работает не совсем так, как, Вам кажется, должно было бы работать. Ибо это точный маркетинг. И сделано так специально и нарочно. Именно на этом в современном мире и зарабатываются деньги. Объективная реальность. Ничего не попишешь.</p>
</blockquote>

<p>Чтобы начать работать под учётной записью админа <span class="remark">(если пользователь работает под учётной записью с ограниченными правами)</span>, в «многопользовательском» Windows-е нужно завершить сеанс текущего пользователя, перезагрузиться в сеанс администратора, <span class="remark">(или временно дать пользователю права локального админа, затем снова перезагрузиться в сеанс пользователя)</span>, установить нужную программу, снова перезагрузить «многопользовательский» Windows в нужного пользователя, <u>проверить</u>, работает ли программа в полном объёме <span class="remark">(ибо маленькая галочка, например, вроде «Запускать программу при старте Windows-а», может инициировать запись не в HKCU/Software/M$/Windows/CurrentVersion/Run, а в такую же секцию в HKLM, в результате чего поведение программы непредсказуемо, и надо давать этому пользователю доступ в конкретную ветку HKLM, при этом разрешая и все побочные «спецэффекты» (например, разрешив писать пользователю в системную ветку Run, мы автоматически разрешим и вирусам, запущенным от имени пользователя, засовывать себя туда же))</span>. И это ещё подарок, если проблемную ветку реестра можно интуитивно вычислить. А вот если непонятно, куда программе хочется, и куда её операционка с ограниченными правами не пускает?! Долгие часы экспериментов с перезагрузками, анализами дампов реестра и распечаток изменений файлов на диске; а также перелистыванием Интернета обеспечены!</p>

</p>И это всё потому, что «некоторым разработчикам суперско-полезного софта» неведомо, что некоторые пользователи для защиты своих компьютеров иногда ограничивают либеральную вседозволенность прав пользователей, установленную по умолчанию. Ну всё они знают, кроме этого раздела, ибо никогда туда не залазили за ненадобностью и отключенностью по умолчанию.</p>

<p>И на фоне этого какова элегантность UNIX-ов?! Нужны права админа?!</p>
<p><code><del>sudo</del></code> Раз — и всё!</p>
</html>
{{remark{рыба}}}
В Linux-е все ресурсы компьютера сведены в одно дерево ресурсов {{remark{(что Microsoft в дальнейшем скотчем приклеила к своим продуктам. Правда, в отличие от M$, деревьев в Linux-е не двадцать пять (блочные (дисковые) устройства в проводнике, Диспетчер устройств, Политики), а всего одно)}}}. Все ресурсы компьютера располагаются в ветвях этого дерева.
[[Файловая система Linux]]
|!Адрес|!Устройство|
| {{{/dev/fd0}}}, {{{/dev/floppy/0}}} |Первый дисковод гибких дисков|
| {{{/dev/fd1}}} |Второй дисковод гибких дисков|
| {{{/dev/sda}}} |Первый SCSI-диск|
| {{{/dev/sdb}}} |Второй SCSI-диск|
| {{{/dev/scd0}}}, {{{/dev/sr0}}} |Первый SCSI CD-ROM|
| {{{/dev/hda}}} |IDE HDD или CD-ROM на интерфейсе Primary Master|
| {{{/dev/hdb}}} |IDE HDD или CD-ROM на интерфейсе Primary Slave|
| {{{/dev/hdc}}} |IDE HDD или CD-ROM на интерфейсе Secondary Master|
| {{{/dev/hdd}}} |IDE HDD или CD-ROM на интерфейсе Secondary Slave|
| {{{/dev/cdrom}}} |Первый CD-ROM ?|
| {{{/dev/cdroms/cdrom0}}} |Первый CD-ROM|
| {{{/dev/ttyS1}}} |COM1|
| {{{/dev/zero}}} |nul ?|
|>|!Тома на дисках|
| {{{/dev/sda1}}}, {{{/dev/sda2}}}, {{{/dev/sda3}}} |Первый/второй/третий разделы на первом SCSI-диске|
| {{{/dev/hda1}}}, {{{/dev/hda2}}} |Первый/второй разделы на IDE-диске, подключенном к Primary Master|
| {{{/dev/hda5—/dev/hda22}}} ? |Первый и дальше разделы в Extended Partition на IDE-диске|
# DHCP
# Шлюз из локальной сети в интернет
# Доступ к GUI по какому-либо аналогу RDP
# Проброс портов RDP и входящего uTorrent
# Настроить BitTorrent или Deluge
+++![…изменить пароль »»][…изменить пароль ««]
{{{
passwd [user_login]
}}}
{{{
passwd root
}}}
===
+++![…посмотреть историю командной строки »»][…посмотреть историю командной строки ««]
История командной строки хранится в файле {{{~/.bash_history}}}
===
+++![…узнать версию Linux »»][…узнать версию Linux ««]
!!Из GUI
Меню Gnome: {{{Система}}} -> {{{Администрирование}}} > {{{Системный монитор}}}, закладка {{{Система}}}.
Меню на панели Gnome: {{{Система}}} -> {{{О системе Ubuntu}}}
----
{{{
> cat /etc/issue
}}}
!!Версия ядра Linux
{{{
> uname -r
}}}
{{{
3.11.4-201.fc19.x86_64
}}}
или:
{{{
> uname -mrs
}}}
{{{
Linux 3.11.4-201.fc19.x86_64 x86_64
}}}
или:
{{{
> uname -a
}}}
{{{
Linux howtoitru 3.11.4-201.fc19.x86_64 #1 SMP Thu Oct 10 14:11:18 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
}}}
или:
{{{
> cat /proc/version
}}}
или:
{{{
> dmesg | grep "Linux version"
}}}
{{{
Linux version 3.11.4-201.fc19.x86_64 почта (gcc version 4.8.1 20130603 (Red Hat 4.8.1-1) (GCC) ) #1 SMP Thu Oct 10 14:11:18 UTC 2013
}}}
!!Версия дистрибутива
{{{
> lsb_release -a
}}}
{{{
LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID:    Fedora
Description:    Fedora release 19 (Schrödinger’s Cat)
Release:    19
Codename:    Schrödinger’sCat
}}}
или:
{{{
> cat /etc/lsb-release
}}}
или:
{{{
> cat /etc/*-release
}}}
{{{
Fedora release 19 (Schrödinger’s Cat)
NAME=Fedora
VERSION="19 (Schrödinger’s Cat)"
ID=fedora
VERSION_ID=19
PRETTY_NAME="Fedora 19 (Schrödinger’s Cat)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:fedoraproject:fedora:19"
Fedora release 19 (Schrödinger’s Cat)
Fedora release 19 (Schrödinger’s Cat)
}}}
===
+++![…обновить систему »»][…обновить систему ««]
!!Обновить список пакетов
{{{
apt-get -u update
}}}
!!Обновить дистрибутив
{{{
apt-get -u dist-upgrade
}}}
или {{remark{(для Debian)}}}:
{{{
apt-get uptime
}}}
!!Обновить установленные пакеты
{{{
apt-get -u upgrade
}}}
===
+++![…удалить записи старых ядер в GRUB »»][…удалить записи старых ядер в GRUB ««]
# Запустить {{{Synaptic}}}
# Отфильтровать пакеты по фильтру {{{linux-image}}}
# Отсортировать список по установленным пакетам {{remark{(первая колонка в {{{Synaptic}}})}}}
# Пометить для полного удаления старые ядра, удалить их
# Далее можно или отфильтровать пакеты с именем {{{linux-header}}} и так же удалить их, или поискать пакеты с тем же удалённым номером версии старого ядра. В обоих случаях найдутся требующие удаления пакеты вида {{{linux-header-3.0.0.14}}}.
{{remark{Примечание: GRUB обновится автоматически}}}
===
+++![…провести дефрагментацию ext4 »»][…провести дефрагментацию ext4 ««]
<html>
<ul>
<li>устанавливаем пакет <code>e2fsprogs</code>:<pre>apt-get install e2fsprogs</pre></li>
<li>проверяем необходимость проведения дефрагментации:<pre>sudo e4defrag -c /dev/sd&lt;xN&gt;</pre></li>
<li>выполняем дефрагментацию:<pre>sudo e4defrag /dev/sd&lt;xN&gt;</pre></li>
<li>проверяем результат дефрагментации <span class="remark">(в последней строке вывода должно быть ⩽0.3% non-contiguous)</span>:<pre>sudo fsck -n /dev/sd&lt;xN&gt;</pre></li>
</ul>
</html>===
+++![…отключение резервного места на томах /tmp и /var »»][…отключение резервного места на томах /tmp и /var ««]
!!Изменение процента зарезервированных блоков для нужд суперпользователя
{{{
sudo tune2fs -m 0 /dev/sd<xN>
}}}
!!Изменение числа зарезервированных под служебные нужды блоков
{{{
sudo tune2fs -r 0 /dev/sd<xN>
}}}
===
+++![…установить сервер SSH »»][…установить сервер SSH ««]
Устанавливаем пакет {{{openssh-server}}}
===
+++![Удалённый X-интерфейс »»][Удалённый X-интерфейс ««]
http://system-administrators.info/?p=1857
===
+++![PPPoE »»][PPPoE ««]
!!Устанавливаем пакет PPPoE
{{{
apt-get -u install pppoe
}}}
!!Редактируем /etc/ppp/peers/dsl-provides
{{{
# Section 1
user v41753132
pty "/usr/sbin/pppoe -I eth1 -T 80 -m1452"
noipdefault
usepeerdns
defaultroute
holdoff 15
maxfail 0

# Section 3
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap
}}}
{{remark{Примечание: также какие-то настройки лежат в {{{/etc/ppp/options}}}.}}}
!!Редактируем /etc/ppp/chap-secrets
{{{
"v41753132" * "пароль_подключения"
}}}
!!Запуск
{{{
pon /etc/ppp/peers/dsl-providers
}}}
Для автоматического запуска эту команду надо прописать в {{{rc.local}}}.
===
+++![Настройка сетевых плат »»][Настройка сетевых плат ««]
Останавливаем сеть 
{{{
/etc/init.d/networking stop
}}}
Редактируем файл {{{/etc/network/interfaces}}}:
{{{
# Настройка localhost
auto lo
iface lo inet loopback

# Проверка получения IP локальной сети от имеющегося сервера DHCP
auto eth0
iface eth0 inet dhcp

# Настройка локальной сети (eth0) (Проверить, что работает, а что -- нет)
auto eth0
iface eth0 inet static
address 192.168.0.8
netmask 255.255.255.0
# gateway 192.168.0.24
network 192.168.0.0
broadcast 192.168.0.255

# Настройка подключения к интернету (eth1)
auto eth1
iface eth1 inet manual
auto dsl-provider
iface dsl-provider inet ppp
pre-up ifconfig eth1 up
provider dsl-provider
}}}
Запускаем
{{{
/etc/init.d/networking start
}}}
или перезапускаем сеть:
Останавливаем сеть 
{{{
/etc/init.d/networking restart
}}}
===
+++![Настройка DHCP »»][Настройка DHCP ««]
Устанавливаем пакет {{{isc-dhcp-server}}}
Исправляем файлы {{{/etc/dhcp/isc-dhcp-server}}} и {{{/etc/dhcp/dhcpd.conf}}}
{{{
/etc/init.d/isc-dhcp-server stop|start|restart
}}}
===
Делаем маршрутизацию:
/etc/firewall.sh

Пакет ics-dhcp-server
Файл статического адреса: /etc/network/interfaces
/etc/init.d/networking restart
===
+++![ »»][ ««]
===
Запустите Ubuntu {{remark{(с LiveCD, с флэшки, с другого компьютера, подключив к нему проблемный жёсткий диск)}}}
Нажмите Alt + F2 и введите команду {{{gnome-terminal}}}. Далее:
{{{
$sudo fdisk -l
}}}
Эта команда покажет вашу таблицу разделов. Здесь приведена моя таблица для лучшего понимания:
<html>
<pre>
<table><thead>
	<tr><th>Device</th><th>Boot</th><th>Start</th><th>End</th><th>Blocks</th><th>Id</th><th>System</th></tr>
</thead><tbody>
	<tr class="odd"><td>/dev/sda1</td><td /><td class="right">29</td><td class="right">8'369</td><td class="right">66'999'082</td><td class="right">83</td><td>Linux</td></tr>
	<tr class="evn"><td>/dev/sda2</td><td class="mid">*</td><td class="right">8'370</td><td class="right">13'995</td><td class="right">45'190'845</td><td class="right">7</td><td>HPFS/NTFS</td></tr>
	<tr class="odd"><td>/dev/sda3</td><td /><td class="right">13'996</td><td class="right">14'593</td><td class="right">4'803'435</td><td class="right">5</td><td>Extended</td></tr>
	<tr class="evn"><td>/dev/sda5</td><td /><td class="right">13'996</td><td class="right">14'593</td><td class="right">4'803'403</td><td class="right">82</td><td>Linux swap / Solaris</td></tr>
</tbody></table>
</pre>
<p class="remark">(а здесь типовая моя):</p>
<pre>
<table><thead>
	<tr><th>Device</th><th>Boot</th><th>Start</th><th>End</th><th>Blocks</th><th>Id</th><th>System</th></tr>
</thead><tbody>
	<tr class="odd"><td>/dev/sda1</td><td class="mid">*</td><td class="right">2'048</td><td class="right">206'847</td><td class="right">102'400</td><td class="right">83</td><td>Linux <span class="remark">(boot)</span></td></tr>
	<tr class="evn"><td>/dev/sda2</td><td /><td class="right">206'848</td><td class="right">102'627'327</td><td class="right">51'210'240</td><td class="right">7</td><td>HPFS/NTFS/exFAT <span class="remark">(Windows 7)</span></td></tr>
	<tr class="odd"><td>/dev/sda3</td><td /><td class="right">102'629'374</td><td class="right">488'396'799</td><td class="right">192'883'713</td><td class="right">5</td><td>Extended</td></tr>
	<tr class="evn"><td>/dev/sda5</td><td /><td class="right">102'629'376</td><td class="right">182'628'351</td><td class="right">39'999'488</td><td class="right">83</td><td>Linux <span class="remark">(root)</span></td></tr>
	<tr class="odd"><td>/dev/sda6</td><td /><td class="right">480'008'192</td><td class="right">488'396'799</td><td class="right">4'194'304</td><td class="right">82</td><td>Linux swap / Solaris</td></tr>
</tbody></table
</pre>
</html>Теперь примонтируйте Linux-раздел {{remark{(здесь sda1)}}}, у меня нет отдельного {{{/boot}}}-раздела, как вы можете сами видеть {{remark{(если он у вас есть, не забудьте примонтировать его: {{{mount /dev/sda1 /mnt/boot}}})}}}
{{{
$sudo mount /dev/sda1 /mnt
$sudo mount --bind /dev /mnt/dev
$sudo mount --bind /proc /mnt/proc
}}}
Следующая команда необязательна {{remark{(она копирует resolv.conf на проблемный жёсткий диск)}}}:
{{{
$sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
}}}
Теперь перейдём в окружающую среду {{{chroot}}}:
{{{
sudo chroot /mnt
}}}
После перехода вам не придётся использовать sudo, так как теперь вы будете запускать команды от имени суперпользователя.
Вы можете при желании отредактировать файл /etc/default/grub в соответствии с вашей системой {{remark{(опции задержки, запуск новых операционных систем, и т.д.)}}}
{{{
#nano -w /etc/default/grub
}}}
Поиграйтесь с этими настройками, если захотите {{remark{(но не забудьте отдать команду grub-update если захотите сохранить их)}}}
Теперь установка/восстановление grub2 через команду
{{{
#grub-install /dev/sda
}}}
Вы могли получить сообщение об ошибке, как это было у меня. Если получили, то используйте команду:
{{{
#grub-install --recheck /dev/sda
}}}
Теперь вы можете выйти из chroota, отмонтировать разделы и перезагрузить ваш компьютер:
{{{
#exit
$sudo umount /mnt/dev
$sudo umount /mnt/proc
$sudo umount /mnt
$sudo reboot
}}}
{{source{Источник: http://ubuntu-repository.blogspot.com/2010/09/grub2-windows.html
http://www.ubuntu-inside.me/2009/06/howto-recover-grub2-after-windows.html}}}
Все параметры загрузчика grub прописываются в конфигурационном файле {{{/boot/grub/grub.conf}}}, в том числе и параметр timeout.
Пример файла {{{/boot/grub/grub.conf}}}:
{{{
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s /boot/grub/grubenv ]; then
	have_grubenv=true
	load_env
fi
set default="0"
if [ ${prev_saved_entry} ]; then
	saved_entry=${prev_saved_entry}
	save_env saved_entry
	prev_saved_entry=
	save_env prev_saved_entry
fi
insmod ext2
set root=(hd0,5)
search --no-floppy --fs-uuid --set b82eda96-9c48-4698-9312-eb8fd0bd64eb
if loadfont /usr/share/grub/unicode.pf2 ; then
	set gfxmode=640x480
	insmod gfxterm
	insmod vbe
	if terminal_output gfxterm ; then true ; else
		# For backward compatibility with versions of terminal.mod that don't
		# understand terminal_output
		terminal gfxterm
	fi
fi
if [ ${recordfail} = 1 ]; then
	set timeout=-1
else
	set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/white
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows NT/2000/XP (on /dev/sda1)" {
	insmod ntfs
	set root=(hd0,1)
	search --no-floppy --fs-uuid --set b0f02cbff02c8e22
	drivemap -s (hd0) ${root}
	chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/10_linux ###
menuentry "Ubuntu, Linux 2.6.31-14-generic" {
	recordfail=1
	if [ -n ${have_grubenv} ]; then save_env recordfail; fi
	set quiet=1
	insmod ext2
	set root=(hd0,5)
	search --no-floppy --fs-uuid --set b82eda96-9c48-4698-9312-eb8fd0bd64eb
	linux /boot/vmlinuz-2.6.31-14-generic root=UUID=b82eda96-9c48-4698-9312-eb8fd0bd64eb ro   quiet splash
	initrd /boot/initrd.img-2.6.31-14-generic
}
menuentry "Ubuntu, Linux 2.6.31-14-generic (recovery mode)" {
	recordfail=1
	if [ -n ${have_grubenv} ]; then save_env recordfail; fi
	insmod ext2
	set root=(hd0,5)
	search --no-floppy --fs-uuid --set b82eda96-9c48-4698-9312-eb8fd0bd64eb
	linux /boot/vmlinuz-2.6.31-14-generic root=UUID=b82eda96-9c48-4698-9312-eb8fd0bd64eb ro single
	initrd /boot/initrd.img-2.6.31-14-generic
}
### END /etc/grub.d/10_linux ###
}}}
Запускаем {{{gconf-editor}}}, открываем веточку {{{/desktop/gnome/peripherals/touchpad/}}}, и снимаем галочку напротив пункта ''Использовать TouchPad''.

Также можно создать файлик со скриптом:
{{{
#!/bin/bash

TOUCHPAD_ENABLED=$(gconftool-2 --get "/desktop/gnome/peripherals/touchpad/touchpad_enabled")

if [ "$TOUCHPAD_ENABLED" = "true" ]
then
  gconftool-2 --set "/desktop/gnome/peripherals/touchpad/touchpad_enabled" --type boolean false
else
  gconftool-2 --set "/desktop/gnome/peripherals/touchpad/touchpad_enabled" --type boolean true
fi
}}}
Скрипт можно назначить на горячую клавишу:
нажимаешь <Alt>F2 -> проходишь по пути: apps/metacity/keybinding_commands -> в "command_1" (или любой другой свободной) пишешь путь до своего скрипта, который написан выше в этой теме -> переходишь на вкладку global_keybindings(она выше вкладки keybinding_commands) -> в "run_command_1"(или ту, которую выбрал в keybinding_commands) пишешь сочетание клавиш, например <Fn>F4(или любая другая).
{{source{Источник: http://forum.ubuntu.ru/index.php?topic=121585.0}}}
# Запустить Gnome Commander от суперпользователя {{remark{(Файл / Запуск от суперпользователя)}}}
# Войти в папку {{{/etc/grub.d}}}, переименовать файл {{{30_os-prober}}} в {{{09_os-prober}}}
# Выполнить в командной строке команду <html><pre>grub-mkconfig</pre> или <span class="remark">(в Linux Mint)</span> <pre>grub-mkconfig -o /boot/grub/grub.cfg</pre></html>
!Введение
Проблема с zip-архивами состоит в том, что:
# имена файлов сохраняются в архиве, сделанном в Windows-е, в ОЕМ-кодировке {{remark{(для русского языка это 866-я кодировка)}}}. При этом кодировка имён файлов в самом архиве не сохраняется.
# при разархивировании архива под Linux разархиватору, по идее, требуется сообщить, в какой кодировке закодированы имена файлов.
# ребята, которые сделали модули разархивации для Linux-ов {{remark{(видимо, это были сами разработчики ZIP-архиватора из PKWare)}}} сделали разархивацию по простому: они решили, что все имена файлов заархивированы в 850-й {{remark{(западноевропейской)}}} кодовой странице, и при разархивировании любого архива извлечённые имена файлов перекодируют из 850-й OEM кодировки в 1252-ю кодировку {{remark{(даже не в UTF-8, являющуюся родной кодировкой для Linux-а)}}}
# в связи с этим все программы работы с архивами, которые используют этот модуль разархивирования, все незападноевропейские имена файлов корёжат до неузнаваемости.
!Решения
Решений этой проблемы несколько:
<html>
<ol>
<li><p>В Ubuntu включен переписанный разархиватор командной строки, которому можно сообщить параметрами командной строки, в какой кодировке в архиве закодированы имена файлов, и в какую кодировку их перекодировать при разархивировании:</p>
<pre>
unzip -x -I cp866 [-O utf-8] имя_архива
</pre>
<p>При разархивировании архива с тем же языком, который по умолчанию установлен в системе, можно даже не указывать кодовую страницу архива, ибо разархиватор <code>unzip</code> подставляет правильную кодировку.</p></li>
<li>Разархивировать архив под wine с помощью Windows-овских утилит работы с архивами</li>
<li>Если разархиватор старый <span class="remark">(не умеющий работать с кодовыми страницами)</span>, то можно пропатчить имеющийся unzip с помощью процедуры, описанной [[здесь|]]</li>
</ol>

<h1>Архивирование в формат zip</h1>
</html>Архиваторы, встроенные в Ubuntu, сохраняют имена файлов в zip-архиве в кодировке UTF-8. Все современные разархиваторы {{remark{(что под Windows, что под Linux)}}} правильно распознают имена файлов в UTF-8, и при разархивации zip-архивов, заархивированных в Linux, в большинстве случаев у Windows-пользователя проблем не вызовет.
!Вариант Тимофея
|!Размер|!Формат|!Смысл|
| 8 МБ| пусто | |
| 20 ГБ| NTFS |Допустим, я ставил бы Windows - монтирую как /dos|
| 200 МБ| ext2 |Монтирую как /boot|
|>|>|!!extended|
| 12 ГБ| ext4 |Монтирую как /|
|  | |БОЛЬШОЙ раздел для хранения данных, а может быть и два {{remark{(NTFS  и ext4)}}}|
| RAM+SWAP=4Gb<br>или просто 4Gb| SWAP ||
!Размеры папок на рабочих Linux-ах, Мб
|!Компьютер|!/opt|!/usr|!/var|!/home|!(остальное)|!Примечание|
|Шипицын Пётр, sda1 {{remark{(рабочий)}}} | 187 | 4'075 | 5'347 | 58'682 | 1'802 |В размер "(остальное)" входит клон флэшки в {{{/media}}} 1,7Gb с дистрибутивом {{{linux-at91}}}, без неё получается 95Mb.|
|Шипицын Пётр, sda2| 187 | 3'286 | 1'242 | 1'404 | 214 | |
|Даниил| - - - | 8'797 | 7'564 | 234'637 | 4'917 |В размер "(остальное)" входит папка {{{/root}}} 4,11Gb с установленным {{{wine}}} и {{{DWGView}}}, без неё получается 807Mb.|
|[[Как разбить жёсткий диск]]|Использование объёма диска|
|[[Как изменить начальный таймаут загрузчика GRUB]]|По умолчанию таймаут выбора режимов загрузки 10 секунд|
|[[Как сделать локальный репозитарий|Создание и работа с локальным репозитарием]]|Программное обеспечение Linux-а достаточно часто обновляется. Если в локальной сети несколько компьютеров, то иногда бывает удобнее для экономии трафика и для скорости выполнения обновлений развернуть локальный репозитарий в сети.|
|[[Как отключить TouchPad]]|Отключение TouchPad-а может быть полезным при наличии в разы более удобного TouchPoint-а, а также при подключении внешней мышки<br>В статье описываются варианты отключения с помощью графической утилиты {{{gconf-editor}}}, с помощью скрипта {{remark{назначенного, например, на экранную кнопку)}}}, а также в будущем, с ростом квалификации, статья будет дополнена инструкцией по автоматическому включению/выключению TouchPad-а в случае отключения/подключения мышки|
|Как посмотреть логи|<html><pre>gksu gnome-system-log</pre></html>, сами логи лежат практически наверняка в /var/log|
|Как проверить диск|{{{fsck}}}|
|[[Как разархивировать и заархивировать zip-архив]]|<html><pre>unzip -x [-P пароль] имя_архива<br>zip -9 [-P пароль] -r имя_архива *</pre></html>|
|[[Как восстановить GRUB2 после установки Windows]]||
|[[Как поменять в GRUB порядок строк в стартовом меню]]||
|[[Как установить GLMatrix]]||
|Как восстановить быстрый фильтр в Synaptic|<html><pre>sudo apt-get install apt-xapian-index<br />sudo update-apt-xapian-index -vf</pre>Если не поможет, то сделать ещё и это:<pre>sudo apt-get install --reinstall synaptic</br />sudo dpkg-reconfigure synaptic</pre></html>|
+++![Запуск через xscreensaver »»][Запуск через xscreensaver ««]
# В Synaptic-е установить:
** {{{xscreensaver}}} {{remark{(сам скринсейвер, без него ничего не будет)}}} и {{{xscreensaver-data}}} {{remark{(обязателен для {{{xscreensaver}}})}}}
** {{{xscreensaver-gl}}} {{remark{(содержит 3D-шные модули, в том числе и {{{GLMatrix}}})}}} и {{{xscreensaver-gl-extra}}} {{remark{(содержит {{{Flurry}}})}}}.
** {{remark{Что-то ещё надо установить наверняка, иначе иногда не показываются буковки}}}
# Запустить {{{xscreensaver}}} {{remark{(меню Система&nbsp;/&nbsp;Параметры&nbsp;/&nbsp;Хранитель&nbsp;экрана)}}}, отказаться от запуска {{{gnome-screensaver}}}, выбрать запуск одного скринсейвера, выбрать {{{GLMatrix}}} или {{{Flurry}}}.
===
+++![Запуск через mate-screensaver »»][Запуск через mate-screensaver ««]
# В Synaptic-е установить:
** xscreensaver-gl {{remark{(содержит 3D-шные модули, в том числе и {{{GLMatrix}}})}}} и xscreensaver-gl-extra {{remark{(содержит {{{Flurry}}})}}}.
# В папке {{{/usr/share/applications/screensavers}}} найти все файлы ярлыков нужных хранителей экрана {{remark{(в первую очередь {{{glmatrix.desktop}}} и {{{flurry.desktop}}})}}} и в каждом из них закомментировать последнюю строку <html><pre># OnlyShowIn=GNOME;</pre></html>После этого выбор этих хранителей будет доступен в настройке хранителя экрана интерфейса MATE {{remark{(Система&nbsp;/&nbsp;Параметры&nbsp;/&nbsp;Хранитель&nbsp;экрана)}}}.
# Так как в {{{mate-screensaver}}} у интерфейса управления хранителями экранов нет кнопки {{{Параметры}}}, то для настройки желаемого вида каждого конкретного хранителя можно в файле ярлыка запуска отредактировать командную строку. Например, для хранителей экрана {{{GLMatrix}}} и {{{Flurry}}} можно использовать следующие параметры запуска:<html><table><thead>
<tr><th>Командная строк</th><th>Примечания</th></tr>
</thead><tbody>
<tr><td><code>Exec=/usr/lib/xscreensaver/glmatrix -root -delay 40000 -speed 0.3 -density 20 -fps</code></td><td>Достаточно плавное, медитативное действо с малым количеством колоночек.<tr><td><code>Exec=/usr/lib/xscreensaver/flurry -root -preset </code>режим<code> -fps</code></td><td>
Симпатичные режимы: <code>classic</code> <span class="remark">(одиночный светлячок с пятью щупальцами)</span>, <code>water</code> <span class="remark">(шесть хвостатых светлячков в голубоватых тонах)</span>, <code>psychedelic</code> <span class="remark">(слабо видимый колеблющийся в виде маятника светлячок)</span>, <code>rgb</code> <span class="remark">(три светлячка трёх основных цветов)</span>, <code>insane</code> <span class="remark">(солнечный ветер)</span>.<br />
Неприятные режимы: <code>fire</code> и <code>binary</code> <span class="remark">(два паука, один из которых постоянно колеблется с раздражающей амплитудой)</span>.<br />
<span class="remark">Примечание: есть ещё режим <code>random</code>.</span></p></td></tr>
</tbody></table></html>
===
|!№|!Набор|!Примечание|
| 1.| «»„“”–—… |Пунктуация|
| 2.| ´́·•◦×÷±√°§¶ |Ударения и математика|
| 3.| ©®™¤£¥¢$€ |Торговые обозначения|
| 4.| µΩ∆∑αβμ |Греческие символы|
| 5.| ←↑↓→ |Тонкие стрелочки|
| 6.| ◅◁△▽▷▻ |Светлые треугольнички|
| 7.| ◄◀▲▼▶► |Тёмные треугольнички|
| 8.| ☺¬­¯¨"""|"""¹²³½¼¾ |Прочее|
|>|>|!!Иностранные спецбуковки|
| 9.| áàâãäåæª ||
| 10.| ÀÁÂÃÄÅƪ ||
| 11.| çÇ¢© ||
| 12.| èéêëæ ||
| 13.| ÈÉÊËÆ ||
| 14.| ìíîïÌÍÎÏñÑ ||
| 15.| òóôõöø° ||
| 16.| ÒÓÔÕÖØ° ||
| 17.| ߧ$ðÐþÞ ||
| 18.| ùúûüÙÚÛÜ ||
| 19.| ýÝÿ¥ ||
| 20.| ḓḽṋṱḒḼṊṰṅṄšŠ ||
{{remark{Примечание 1: Надо бы расширить набор тонких стрелочек
Примечание 2: Конфигурационный файл для Кассы символов лежит в пользовательской папке где-то в .gnome/}}}
Born Again Shell - BASH (удобен для написания системных скриптов)
TCShell - их можно использовать даже для создания маленьких баз данных (типа, пользовательский шелл, можно посчитать, табличку сделать)

Порождение процессов из Shell-а:
cmd & - процесс уходит в background

Или запустить процесс, нажать Ctrl-Z для его переустановки, и потом дать команду командой {{{bg}}}
Вернуться к запущенным в background-е процессам можно вернуться командой {{{fg}}}

Список процессов в фоне можно посмотреть командой {{{jobs}}}

Вернуться к конкретной программе {{{fg %номер_задачи}}}

Способы переназначения вывода:
| (черта, pipe)
cmd1 | cmd2

есть устройства stdout, stdin

grep aaafdsfq /etc/* > /dev/null
grep aaafdsfq /etc/* > /dev/null 2>&1

Второй вывод перенаправляем в первый, а первый перенаправляем в null

Вывод хранится в терминале, у разных терминалов разные выводы

> и >> тоже работают

{{{echo ura > /tmp/test}}}
{{{echo ura2 >> /tmp/test}}}
{{{cat /tmp/test}}} - распечатать файл

grep - поиск
есть ещё egrep {{remark{(расширенный grep)}}}

{{{egrep "abc|sdf|..." /dev/...}}}
Ищем или abc, или sdf
urandom

{{{ps}}} - список процессов или с командами, или просто список процессов данной оболочки
{{{ps -ww}}} - двойной расширенный листинг
{{{ps -www}}} -тройной расширенный листинг
{{{ps -xaw}}} - перенос строчек в листинге {{remark{(иначе обрезаются)}}}
{{{
cat /dev/urandom |ggzip --best | zgrep Podarok
cat /dev/urandom |ggzip --best | zgrep zhopa
}}}
{{{top}}} или {{{htop}}} - внешние пакеты, которые в отдельном окне потом покажут, как загружен процессор предыдущими командами {{remark{(типа диспетчера задач)}}}

gzip -dc $archeve | grep xxx
zgrep xxx $archeve
Эти команды одинаковы

!Условия и процедуры
amba()
{ls / }

Потом ввести amba - выведется скрипт

Определение {{{amba() { ls $1; } }}}
Запуск {{{amba /}}}

$0 - текущая команда
echo $0 - выдаёт bash

ls -l .bin/echo

find / -name usb -print 2> /dev/null
Поиск файлов (хороша для чистки логов и tmp-файлов. Удалить файлы, которые созданы (или запрошены) более 1 месяца назад)

find / -name ucb -exec rm -f {} \; 2> /dev/null
find / -name ucb -exec ls -l {} \; 2> 
Поиск всех файлов начиная с корня и или удаление их, или вывод списокм

кроме файла есть locate и wich, но они есть не везде

Экранирование точки с запятой для того, чтобы передать точку запятой команде ls, а не find-у...

!Самая главная команда
man man
Поиск /строка
Повторение поиска / <Enter> или кнопка <End>

{{{man -k disk}}} или {{{apropos disk}}}

man smb.conf

К большинству команд применима опция {{{-help}}} или {{{--help}}} {{remark{(аналог -? в MS Windows-е)}}}

man-ы должны быть установлены. На сервере некоторые могут быть отключены man-ы...
Например, Linux на кассовых аппаратах обычно man-ов не установлено

!Другие программы
top - Список процессов
htop
powertop - 

bash_history - история командных строк

Ctrl-S - поиск в MC (как поиск через Alt в FAR)

mocp - Music on Console player (help - H, громкость внизу, есть конфиг-файл, B - назад, N - следующая песенка)

F10 - в X-ах не работает, Можно отключить перехват F10 графическим интерфейсом с помощью какой-то Ctrl-C (что-ли)

vlc - имеет как графический, так и консольный интерфейс, а также WEB-интерфейс. Можно запустить его на сервере, и управлять его работой через браузер

В gimp-е сделать непересекающиеся окна - Правка, параметры, поведение окон, оба окна 0 обычные

Система / Парметры / Внешний вид, желейное окно
 или compiz config

gconf-editor (Редактор конфигураций)

Перемещение окошка с зажатым Alt-ом работает везде

Кубик - смена рабочих столов

Параметры (conpiz)  Рабочий стол / Кубик (можно прозрачный, и кучу всяких эффектов, спросить потом ,или посмотреть)
[[План конференции|Конференция Linux Install Fest 4-5.09.2010. План]]
[[День первый|Конференция Linux Install Fest 4-5.09.2010. День 1]]
[[День второй|Конференция Linux Install Fest 4-5.09.2010. День 2]]
[[Установленные на конференции пакеты|Конференция Linux Install Fest 4-5.09.2010. Установленные пакеты]]
----
!Отдельные темы (конспект)
[[Файловая система Linux]]
[[Сервис Samba]]
[[Консольные команды]]
[[Создание symlink]]
[[Просмотр разбиения жёсткого диска]]
[[Монтирование и размонтирование томов]]
[[Терминальное подключение]]
[[Словари]]
[[Запись лазерных дисков]]
[[Виртуализация]]
[[Сравнение файлов]]
[[Шифрование дисков]]
!Посчитать размер папки
du -sh "Мои документы"
du -sh Мои\ документы
fc - тоже текстовый редактор 
Дистрибутив gentoo очень любят разработчики

Игра tremulous.net - 250'000 строк кода
xcfe {{remark{(XUbuntu, произносится зубунту)}}} - более ресурсоёмкая среда рабочего стола, нежели Gnome {{remark{(Ubuntu)}}} и KDE {{remark{(KUbuntu)}}}
krusader - подобие Total Commander-а {{remark{(под KDE)}}}
Иконки закрытия окна в гноме можно переместить на правый край экрана {{remark{(либо gconf-editor-ом, либо поправить /apps/metacit, или я мы с Андреем вообще через темы сделали в диалоговом окне каком-то)}}}
Загрузку процессора можно вывести прямо на панель меню {{remark{(апплет Системный монитор, правой кнопочкой на заголовок, добавить апплет, Системный монитор в самом конце списка)}}}
xkeywin - пакет дублирвоания клавиш переключения раскладки
Вышел OO 3.2.1
Koncrete - настройка PPPoE

virtualbox - Приложение. Кладётся в системные утилиты

/home/abp/.VirtualBox/HardDisks/

Ctrl-S MC быстрый поиск

midnight-commander.org

smb.conf - права, имена, доступ к текущей машине от Windows-а

RPM - RedHat-пакеты. Система управления пакетами RedHat — RedHat packet manager
DBM - Debian-пакеты. Система управления пакетами Debian — dpkg

swapon

Настройка рабочего стола.
Один из виджетов рабочего стола, показывает расход оперативной памяти в Linux

В Linux-е 12 консолей
Переключение на консоль в текстовом режиме: Alt-F1-Alt-F12, в графическом — Ctrl-AltF1-F12
По умолчанию графическая оболочка первого вошедшего пользователя на 7-й консоли, второго — на 8-й и так далее...

exit или logout из консолей

Компиляция make

alt+1-alt+2 (переключение между двумя закладками в окне терминала)
Ctrl-Shift-T - создать новую закладку

Переназначил кнопки терминала на Ctrl-T создать вкладку, Ctrl-W - закрыть вкладку
Ctrl- - и Ctrl-0  в терминале работают на уменьшение, начальное восстановление масштаба

header-ы поставить, настроить репозиторий

Mc - переключение раскладок - Alt-E (encoding)

Центр приложений Ubuntu

Традиционно обновления ставятся не через менеджер пакетов Ubuntu
А обычно ставится всё через менеджер пакетов Synaptics
pingin - мультипротокольный клиент мгновенных сообщений (ICQ, MSN, XMPP). Для mail.агента есть плагин к pingin (декодирует html-теги)

jigu - та же ерунда для Debian, которая синхронизирует старый CD с уникальным дистрибутивом и новый ненастроенный дистрибутив Debian

opera.com - JavaScript определения операционки

Brazero - запись дисков

Для Windows-а есть драйверы для чтения ext2/ext3, насчёт ext4 — появятся?

Права доступа (чтение/запись)
Выбор при установке - требвать пароль для входа в систему и доступа к зашифрованному домашнему каталогу

squid 
Эвольвента (символ дебиана, частный случай улитки Паскаля)

Опера встаёт в Ubuntu  в приложения Internet

gstreamer mplayer (консольный плейер, запустить через BASH)
smplayer - GUI для mplayer

grub - безопасный режим. На него надо будет поставить отдельный пароль

Copying is not theft
Jabber == xmpp
jabber.ru jabber.org jabberworld.info
conference.jabber.org

myooo.ru - макросы для OpenOffice (программа Pager)
AbbyyWord, MS Office 2007 SP2. GoogleDocs (преобразует форматы документов) понимают ODT, ODF (Sun / Oracle)
FB2 поддерживается макросом дополнительным к OO

Графика
=======
f-spot (позволяет тегирование файлов), Eye of GNOME, Geeqie, Ristretto
Blender - Редактор 3D-графики (с прекрасной книжки)

radio.perm.ru

audiacity - аналог SoundForge

xrander """--auto // Включение дополнительного монитора"""
eeeControl - асусовское приложение для нетбуков Asus для поддержки горячих клавиш
Cheese - поддержка веб-камеры и всяких эффектов (умеет фотографировать, записывать видео, накладывать разные илиотские эффекты прямо во время записи).

Ctrl-Alt-Backspace - перезапуск X-Window

Ctrl-L - в "проводнике" (Nautilus) включить адресную строку

Sharing is carrying (?)

Установка Ubuntu
================
sudo apt-get install tree {{remark{Установка DIR с цветами}}}
aptitude show tree {{remark{Консольный Synaptic}}}

ls / (аналог DIR)
ls /dev (список всех устройств в данном компьютере ram1-ram8, loop0-loop6)

synaptics (конфигуратор)

Nautilus (аналог проводника в Gnome)
Dolphin (аналог проводника в KDE)

man samba

smbmount - подключение ресурсов

В система/Клавиатура добавили раскладку и установили переключение клавиш с Alt-Alt на Ctl-Shift

insert shift-insert
cc - Creative Commons - creativecommons.com
{{remark{Вариант свободного копирайта. Есть симпатичный ролик по этому праву}}}
GParted - разбиение разделов диска {{remark{(Gnome Partition Editor)}}}
xfce - графическая оболочка
drbl - лазер для работы с образами дисков и операционок {{remark{(доступен на Debian.org в виде пакета или в виде ISO-образа LiveCD)}}}. На самом деле является сервером, позволяющим загружать машины по локальной сети.

PartedMagic - Свободный лазер на Linux-е для работы с разделами partedmagic.com
Unetbootin - запись ISO-образов на флэшки

Conky - Клёвая вещица для показывания на рабочем столе загрузки процессора. Полезно для серверов.

Редактирование меню GRUB-а...

Как настроить автомонтирование флэшек и дисков

Кнопка Windows+колёсико мышки — масштабирование
Win+E — Expo
Win+W — показать все окна {{remark{(и выбрать нужное)}}}

Ctrl+Alt+T - shell
Ctrl+Alt+D — свернуть/развернуть все окна
<html>
<h2>Linux Install Fest [themes]</h2>

<span class="submitted"><a href="/user/5844" title="Информация о пользователе.">MTiVi</a>, 24.08.2010 — 10:36</span>
  
    <p><span style="font-weight:bold">План мероприятия.</span><br />
<span style="font-style:italic">План мероприятия всё ещё может менятся.<br />

Если у Вас есть знания, которыми Вы можете поделиться, предложите помощь!</span><br />
<span style="font-weight:bold">04.09.10</span><br />
<ol class="bb-list" style="list-style-type:decimal;">
 <li> Сбор организаторов в 9:00(?). Прогон программы, тест всего. Расклейка указателей, вывесок.</li>
 <li> <span style="color:red">(Анна aka ecoprotest)</span> Общий сбор в 12:00. Начало в 10.04 MSK. Рассказ про то, для чего все собрались. Об Ubuntu(+значение слова, +в Google сидят на *ubuntu), о 10.04.</li>
 <li> <span style="color:red">(Черныш aka chernysh)</span> Введение.
О компьютерах, о ПО, об ОС.<br />

О GNU<span style="font-style:italic">(Ричард Столлман)</span>, об СПО, о Linux<span style="font-style:italic">(Линус Торвальдс)</span>, о конкуренции с MicroSoft <span style="font-style:italic">(в частности Canonical vs MS)</span><br />
Идеология, история. <span style="font-style:italic">(Показываем и раздаём схему UNIX-&gt;Linux, BSD, Mac OS X)</span><br />
Преимущества: бесплатность, простота, безопасность.<br /></li>
 <li> <span style="color:red">(Тимофей aka MTiVi)</span> Показ особенностей. Понтуемся:<ul class="bb-list" style="list-style-type:circle;">

    <li> COMPIZ <span style="font-style:italic">(3D куб с панорамой, рисование огнём, дождь, увеличение любой части экрана...)</span></li>
    <li> Games <span style="font-style:italic">(игры на компах, показ скриншотов/роликов на проекторе)</span>:</li>
       <li> Tremulous (ролик, игра)</li>
       <li> xmoto (скриншоты, игра)</li>

       <li> Armagetron Advanced (ролик, скриншоты, игра)</li>
       <li><s><span style="font-weight:bold">(?)</span>CS (ролик<span style="font-style:italic">(какой именно?)</span>, игра)</s></li>
       <li> Тетрис (Quadrapassel), сапёр, Пасьянс Айслериот, Маджонг.</li> </ul></li>
 <li> <span style="color:red">(??__??)</span> Знакомство с разными дистрибутивами. (Показываем и раздаём схему развитие дистрибутивов Linux)
(Новички выбирают дистрибутив *Ubuntu для установки себе.)<br /></li>

 <li> <span style="color:red">(все)</span> Установка всех версий: Ubuntu (+NetBook Remix), Kubuntu (+NetBook Remix), Xubuntu, Edubuntu, Ubuntu Studio
(Установить что-то с помощью wubi)<br /></li>
 <li> <span style="color:red">(Черныш aka chernysh)</span> Рассказ о <a href="http://www.youtube.com/watch?v=eEHnGM5-Pho&amp;feature=related" class="bb-url">процессе установки</a>.</li>
 <li> <span style="color:red">(?)</span> Настройка сети беспроводной и проводной; установка софта в Linux, о *.deb вместо *.msi/*.exe; репозитории, Synaptics, обновления.<ol class="bb-list" style="list-style-type:decimal;">

    <li> <span style="color:red">(Тимофей aka MTiVi)</span> Работа в сети. FireFox, Opera. (Рассказ о пользе XMPP/Jabber/GTalk, по которому можно звонить, и плохой ICQ.) IM(Empathy и Pidgin). Torrent(Transmission и Ktorrent).</li>
    <li> <span style="color:red">(Константин aka Icosaeder)</span> OpenOffice.org (Теперь поддержка в MS Office), PDF/DJVU Readers.</li>
    <li> <span style="color:red">(Константин aka Icosaeder)</span> Графика: F-Spot, GIMP, InkScape, Blender.</li>

    <li> <span style="color:red">(???Артур aka kaliy?)</span> Видео: видеопроигрыватель Totem, mplayer и что там в KDE по дефолту?</li>
    <li> <span style="color:red">(Константин aka konstolk)</span> Музыка: Rhytmbox и Amarok. Audacity.</li>
    <li> <span style="color:red">(Тимофей aka MTiVi)</span> Веб-камера Cheese.</li>

    <li> <span style="color:red">(?)</span> StarDict + словари!</li>
    <li> <span style="color:red">(Константин aka konstolk)</span> Запись дисокв с помощью Brasero и K3b.</li>
    <li> <span style="color:red">(???Максим aka cyjimmy264?)</span> WINE</li>

    <li> <span style="color:red">(Тимофей aka MTiVi)</span> Compiz. Настройка эффектов.</li></ol></li>
 <li> <span style="color:red">(все)</span> Вопросы и ответы.</li>
 <li> <span style="color:red">(?)</span>Фильмы и <span style="color:red">(Тимофей aka MTiVi)</span> игры.</li>

</ol></p>

<p><span style="font-weight:bold">05.09.10</span><br />
<ol class="bb-list" style="list-style-type:decimal;">
 <li> <span style="color:red">(все)</span> Встреча организаторов. Прогон. Тетс всего что есть. В <span style="font-weight:bold">(?)</span>10:00.</li>
 <li> Общая встреча в 12:00.</li>

 <li> <span style="color:red">(Анна aka ecoprotest)</span> Открытие второго дня мероприятия.</li>
 <li> <span style="color:red">(все)</span> Вопрос-ответ.</li>
 <li> <span style="color:red">(специально приглашённый гость из Тюмени, тов. Кендер)</span> Более подробная история развития Linux. Упоминание о других дистрибутивах.</li>

 <li> <span style="color:red">(???Алексей aka FRADE?)</span> История PermLUG.org</li>
 <li> <span style="color:red">(???Максим aka cyjimmy264?)</span> ОС Linux: ядро, X-сервер, графическая оболочка, ФС, разделы диска.</li>
 <li> <span style="color:red">(?)</span> Работа в консоли: ваши предложения?
Я бы рассказал по этим тегам: Alt+Ctrl+F*, программы: top, htop, finch(упоминание), mc, moc, gpm, cmatrix, rtorrent.<br /></li>

 <li> <span style="color:red">(???Александр aka Raven?)</span> Сеть: NFS и SAMBA.</li>
 <li> <span style="color:red">(Тимофей aka MTiVi)</span> <s>Сборка ядра!! (ОЛОЛО!)</s> Clonezilla. Работа с образами разделов диска.</li>
</ol></p>

</html>
virtualbox
wine
pingin {{remark{(есть и под Windows)}}}
jabberworld.info - все клиенты для Jabber, в том числе и Windows-овские
ubuntu-restricted-extraz — часто используемые проприетарные пакеты для Ubuntu

clean - очистка экрана

drbl-пакет если поставить на Ubuntu, то там можно конструировать меню загрузки по сети по PXE.
Сама Clonezilla - это скрипт на BASH... И можно попробовать сделать учебные станции с загрузкой по сети разных операционок для работы с разными предметами
|!Команда|!Описание|
|{{{dpkg-reconfigure popularity-contest}}} |Настройка сценария автоматической анонимной отсылки в Debian используемых мною пакетов {{remark{(чтобы Debian лучше комплектовала первый CD/DVD на будущее)}}}. Согласиться/отказаться|
!Пакеты, установленные сразу при установке
* Графическое окружение рабочего стола
* Веб-сервер
* Файловый сервер
* База данных SQL
* Для ноутбука
* Стандартные системные утилиты
!!Не выбраны
* Сервер печати
* Сервер DNS
* Почтовый сервер
* Сервер SSH
+++![В Gnome/Mate kswapd0 и kworker грузят проц на 100% по каналу IOwait »»][В Gnome/Mate kswapd0 и kworker грузят проц на 100% по каналу IOwait ««]
{{remark{''Примечание:'' просмотр ввода-вывода удобно делать утилитой {{{iotop}}}.}}}
# Устанавливаем dconf-tools {{remark{(sudo apt-get install dconf-tools)}}}
# Запускаем dconf-editor {{remark{(Приложения -> Системные -> Редактор dconf)}}}
# В редакторе открываем ветку {{remark{(в зависимости от версии среды)}}}:<html><pre>
org > gnome > settings > daemon > peripherals > keyboard
org > mate > desktop > peripherals > keyboard</pre></html>и снимаем галочку с поля {{{remember-numlock-state}}}
# перезапускаем компьютер или перезапускаем {{{mate-settings-daemon}}} командой {{{pkill -9 -f mate-settings-daemon}}}.
===
{{source{Источник: [[AltLinux wiki|https://wiki.archlinux.org/index.php/Color_Bash_Prompt_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29]], man&nbsp;bash}}}
\a		an ASCII bell character (07)
\d		the date in "Weekday Month Date" format (e.g., "Tue May 26")
\D{format}	the format is passed to strftime(3) and the result is inserted into the prompt string an empty format results in a locale-specific time representation. The braces are required
\e		an ASCII escape character (033)
\033		an ASCII 033 character (13h, escape)
\h		the hostname up to the first `.'
\H		the hostname
\j		the number of jobs currently managed by the shell
\l		the basename of the shell's terminal device name
\n		newline
\r		carriage return
\s		the name of the shell, the basename of $0 (the portion following the final slash)
\t		the current time in 24-hour HH:MM:SS format
\T		the current time in 12-hour HH:MM:SS format
\@		the current time in 12-hour am/pm format
\A		the current time in 24-hour HH:MM format
\u		the username of the current user
\v		the version of bash (e.g., 2.00)
\V		the release of bash, version + patch level (e.g., 2.00.0)
\w		the current working directory, with $HOME abbreviated with a tilde
\W		the basename of the current working directory, with $HOME abbreviated with a tilde
\!		the history number of this command
\#		the command number of this command
\$		if the effective UID is 0, a #, otherwise a $
\nnn		the character corresponding to the octal number nnn
\\		a backslash
\[		begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
\]		end a sequence of non-printing characters
<html>
<table>
	<tr><th>Название</th><th>За что отвечает</th></tr>
	<tr><td>usb-storage</td><td>Монтирование и автомонтирование съёмных USB-дисков и флэшек на <code>/dev/sdX</code></td></tr>
</table>
</html>
Цвета закладок в Classic Theme Restorer записать в вики
В about:config browser.newtab.url можно установить в about:blank, about:newtab и about:home. Home при этом становится не google.ru, а какой-то DuckDuckGo.
В папке /usr/share/application/screensavers в файлах flurry.desktop и glmatrix.desktop поправить OnlyShowIn=MATE; или закомментировать эту строку решёткой (#).
В http://compizomania.blogspot.ru/2012/11/ubuntu_29.html расписано, как поправить цвета терминала в /etc/bash.bashrc
Настройки цветов man расписаны тут http://www.tuxarena.com/2012/04/tutorial-colored-man-pages-how-it-works/ (но не работает)
{{remark{Монтирование томов производится от root-а}}}
{{{
mkdir /media/disk_c
mkdir /media/disk_d
mount /dev/sda1 /media/disk_c
mount /dev/sda2 /media/disk_d
}}}
{{remark{Монтирование дисков FAT32 надо делать с поддержкой 866-й кодировки. NTFS-диски монтируются с нормальной поддержкой русского языка}}}
{{{umount /media/MOBILE_C}}}
или правой кнопочкой на значок диска на рабочем столе (на несколько дисков на рабочем столе), и выбрать безопасное извлечение устройства
|!Папка|!Назначение|!Рекомендации|
|{{{/etc/xdq/autostart}}}|Комплект .desktop-файлов {{remark{(часть комплекта)}}} для автоматически запускаемых в сеансе программ|Список также доступен через {{{Параметры системы / Автоматически запускаемые приложения}}}|
|{{{~/.config/autostart}}}|Пользовательская папка автозапуска||
|{{{/usr/bin}}}|Похоже, тут лежат исполняемые файлы всех установленных приложений||
|{{{/usr/bin/X11}}}|Дурной simlink, указывающий на текущую папку. В результате получается невероятной длины вложенность папок {{{/usr/bin/X11/X11/X11/X11/X11/…}}}|Смысл пока малопонятен|
|{{{/usr/share/applications}}}|Видимо, общее хранилище .desktop-файлов|В каждом файле можно посмотреть реальное имя и путь запуска нужного приложения. В папке {{{./screensavers}}} лежат ярлыки для запуска экранных заставок {{remark{(в том числе и GLMatrix)}}}.|
|{{{/usr/share/app-install}}}|Тоже комплект .desktop-файлов. Другой|Если программа установлена, но в меню GNOME не появилась, то чтобы её найти, видимо, лучше сначала пошукать здесь|
|{{{/usr/share/doc}}}|Видимо, тут лежат всякие Copyright-ы и EULA для установленных программ|Если забыли текст какой-то лицензии, то её можно посмотреть и здесь, видимо|
|{{{/usr/share/man}}}|Видимо, тут лежат все man-ы||
|{{{/usr/share/stardict/dic}}}|Папка для словарей StarDict-а|{{remark{(что-то у меня пока StarDict не подхватывает из неё словари)}}}|
|{{{/var/cache/apt/archives}}}|Дистрибутивы установленного ПО|Занимают много, но удалять вряд ли можно просто так. Полезны тем, что какие-то установленные из репозитария пакеты можно отсюда взять и поковырять на предмет узнавания «как сделано» {{remark{(для всякого питоновского ПО)}}} и «что в состав входит» {{remark{(на предмет разжиться симпатичными иконками)}}}|
Понаделать скриншотов на английском языке
+++![Установка и настройка Apache »»]
В файле {{{/etc/apache2/apache2.conf}}} изменяем следующие строчки:
{{{
# При большой загрузке это поможет убрать мёртвые подключеничя
KeepAlive Off

# Этот формат логов нужен для Webalizer-а
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
}}}
В конфиге /usr/local/apache/conf/httpd.conf вам нужно исправить всего два параметра:
1. ServerAdmin - здесь нужно написать свой email
2. Заменить все yourhost.com на ваш домен.

А вот что было изменено в конфиге в отличии от того, который пишет Apache по дефолту:
ResourceConfig /usr/local/apache/conf/srm/ - Apache будет читать все конфиги в этой директории.
BindAddress * - Слушать все IP адреса.
User apache - Пользователь
Group apache - Группа
ServerAdmin admin@yourhost.com - Почта администратора.
ServerName default.yourhost.com - Просто название вашего сервера.
AllowOverride All - .htaccess файлы будут работать рекурсивно.
CustomLog /usr/local/apache/logs/access_log combined - Включаем наш формат логов.
AddHandler cgi-script .cgi - Включаем .cgi (совсем не обязательно, чтобы это был Perl)
AddHandler cgi-script .pl - Включаем .pl
AddType text/html .shtml - Включаем SSI
AddHandler server-parsed .shtml
DirectoryIndex index.html index.htm index.php index.php3 index.phtml index.cgi index.pl index.shtml default.htm default.html - Индексные файлы в порядке приоритета.
NameVirtualHost *:80 - Этим мы говорим, что Apache наш будет name-based
< VirtualHost *:80> - Сампый первый виртуальный хост. В нем будет редирект.
   DocumentRoot /usr/local/apache/htdocs
   ServerName default.yourhost.com
< /VirtualHost>
===
+++![Установка и настройка PHP »»]
!!Подключение PHP к Apache
В файл {{{/etc/apache2/httpd.conf}}} {{remark{(этот файл включается по include в файле ...)}}} прописываем:
{{{
LoadModule php4_module modules/libphp5.so
}}}
{{remark{(ибо файл libphp5.so найден поиском в папке {{{/usr/lib/apache2/modules/libphp5.so}}})}}}
!!Подключение библиотеки GD2
{{remark{(требуется для манипуляций с картинками и капчами)}}}
===
Рестарт Apache после проведения настроек:
{{{
apachectl restart
}}}
+++![Устанавливаемые программы »»][Устанавливаемые программы ««]
mate-sensor-applet
gnome-commander
gedit
gedit-dev  Поддержка синтаксиса для Питона и CSS
gparted
xscreensaver-xxxx {{remark{(при использовании GLMatrix внутри gnome-screensaver или mate-screensaver в папке {{{/usr/share/applications/screensavers}}} следует закомментировать строку ShowsIn=GNOME во всех желаемых файлах)}}}
===
+++![Настройка панели GNOME »»][Настройка панели GNOME ««]
Запуск GTK-программы с правами суперпользователя — {{{gksu <команда>}}}. Можно вывесить на панель кнопочку «GNOME Commander [su]», которая отвечает за команду {{{gksu gnome-commander}}}.
Подключение дисков из домашней локальной сети начал делать с помощью пакетного файла {{{/usr/bin/mount_home_vmunt}}}, но пока не разобрался с наполнением этого пакетника {{remark{(с правильными командами внутри)}}}.
===
+++![Файловые оболочки »»][Файловые оболочки ««]
|!Название|!Плюсы|
|GNOME Commander|Есть динамическое обновление панелей при изменениях в отображаемом каталоге<br>@@color:red;Странные раскраски файлов {{remark{(если их включить в настройке)}}}@@|
|Tux Commander|Рядом с командной строкой есть кнопка Терминал, быстрый поиск по диску {{remark{(не заходит в примонтированные сетевые папки)}}}, найденная строка ищется в любом месте имени файла {{remark{(как будто набрано {{{*строка*}}})}}}, но не ищется в названиях каталогов<br>@@color:red;Нет динамического обновления содержимого каталога. На Alt-F7 включает не поиск файлов, а перемещение окна по экрану@@|
===
+++![Настройка экрана »»][Настройка экрана ««]
Всеми темами, цветами и оформлением окон в Ubuntu заведует модуль {{{Compiz}}}. Для получения некоторых приятных оконных эффектов неплохой мыслью явилось бы доустановить несколько пакетов: {{{compiz-fusion-plugins-main}}} {{remark{(в CompizConfig не добавляет ничего)}}}, {{{compiz-fusion-plugins-extra}}} {{remark{(сам никаких пунктов в CompizConfig не добавляет, но добавляет автоматически {{{compiz-plugins-extra}}})}}} и {{{compizconfig-settings-manager}}} {{remark{(автоматически добавляет {{{python-compizconfig}}})}}}.
После установки пакетов в меню Система / Параметры появится строчка Менеджер настройки CompizConfig. В этом окне из тучи настроек для начала можно выбрать это:
|sortable|k
|!Пакет|!Раздел|!Пункт меню|!Настраиваемые опции|!Изменения в поведении системы|h
||Общие|Composite|||
||Общие|Copy to texture|||
||Общие|KDE Compatibility|||
||Общие|KDE/Qt Event Loop|||
||Общие|OpenGL|||
||Общие|Команды|||
||Общие|Общие настройки|||
||Общие|Совместимость с GNOME|||
||Специальные возможности|Color Filter|||
|compiz-plugins-extra|Специальные возможности|Dim Inactive|||
||Специальные возможности|Enhanced Zoom Desktop|||
||Специальные возможности|Magnifier|||
||Специальные возможности|Negative|||
||Специальные возможности|Opacity|||
|compiz-plugins-extra|Специальные возможности|Show mouse||Включает вращение около курсора мышки огненных шариков|
||Специальные возможности|Zoom Desktop|||
||Специальные возможности|Прозрачность, яркость и насыщенность|||
||Рабочий стол|Desktop Wall||При перемещениях между рабочими столами показывает на экране мини-изображения всех рабочих столов и отображает стрелочки текущего перехода|
||Рабочий стол|Expo||По горячей кнопке <super>s показывает на одном экране все рабочие столы. Перемещаться между столами можно стрелочками, после повторного нажатия <super>s происходит переход на выбранный рабочий стол|
|compiz-plugins-extra|Рабочий стол|Fade to Desktop|||
|compiz-plugins-extra|Рабочий стол|Show Desktop|||
||Рабочий стол|Ubuntu Unity Plugin|||
||Рабочий стол|Viewport Switcher|||
|compiz-plugins-extra|Рабочий стол|Widget Layer|||
||Рабочий стол|Вращение куба|||
||Рабочий стол|Дублирование вывода|||
||Рабочий стол|Куб рабочего стола|||
|compiz-plugins-extra|Эффекты|3D Windows|||
||Эффекты|Animations|||
|compiz-plugins-extra|Эффекты|Animations Add-On|||
|compiz-plugins-extra|Эффекты|Bicubic filter|||
|compiz-plugins-extra|Эффекты|Gube Gears|||
|compiz-plugins-extra|Эффекты|Cube Reflection and Deformation|||
|compiz-plugins-extra|Эффекты|Login/Logout|||
|compiz-plugins-extra|Эффекты|Motion blur|||
|compiz-plugins-extra|Эффекты|Paint fire on the screen|||
|compiz-plugins-extra|Эффекты|Reflection|||
|compiz-plugins-extra|Эффекты|Trailfocus|||
||Эффекты|Вязкие окна||Очень приятный эффект при перемещении, разворачивании и сворачивании окон. Окно становится как-бы желейным|
||Эффекты|Оформление окна|||
||Эффекты|Появление/исчезание окон|||
||Эффекты|Размытие окон|||
||Эффекты|Эффект воды|||
|compiz-plugins-extra|Дополнения|Benchmark|||
|compiz-plugins-extra|Дополнения|Splash|||
||Дополнения|Window Preview|||
||Дополнения|Заметка|||
||Дополнения|Снимок экрана|||
||Загрузка изображения|JPEG|||
||Загрузка изображения|PNG|||
||Загрузка изображения|SVG|||
||Загрузка изображения|Text|||
||Утилиты|Bailer|||
||Утилиты|Compiz Library Toolbox|||
|compiz-plugins-extra|Утилиты|Crash handler|||
||Утилиты|D-Bus|||
||Утилиты|Detection|||
||Утилиты|File Watcher|||
||Утилиты|Mouse position polling|||
|compiz-plugins-extra|Утилиты|Notification|||
||Утилиты|Resize Info|||
||Утилиты|Scale Addons|||
|compiz-plugins-extra|Утилиты|Scale Windows Title Filter|||
||Утилиты|Session Management|||
||Утилиты|Title Bar Info|||
|compiz-plugins-extra|Утилиты|Wallpaper|||
||Утилиты|Workarounds|||
||Утилиты|Соответствие регулярным выражениям|||
|compiz-plugins-extra|Управление окнами|Extra WM Actions|||
||Управление окнами|Grid|||
|compiz-plugins-extra|Управление окнами|Group and Tab Windows|||
|compiz-plugins-extra|Управление окнами|Maximumize|||
||Управление окнами|Put|||
||Управление окнами|Ring Switcher|||
|compiz-plugins-extra|Управление окнами|Shelf|||
||Управление окнами|Shift Switcher|||
||Управление окнами|Snapping Windows|||
||Управление окнами|Static Application Switcher|||
||Управление окнами|Windows Rules|||
||Управление окнами|Изменение размеров окна||Переключил изменение размеров окна из режима Прямоугольник в режим Растянуть. Так хотя бы видно, что открывается при уменьшении размеров окна. Ну а обычный режим визуального изменения размера окна (Нормальный) на окне CompizConfig «подтормаживает» оочень сильно. На других программах не пробовал пока|
||Управление окнами|Масштабировать|||
||Управление окнами|Переключение приложений|||
||Управление окнами|Переместить окно|||
||Управление окнами|Размещение окон|||
||Не категоризировано|Debug Spewer|||
||Не категоризировано|Unity MT Grab Handles|||
Обычно все эффекты включаются/выключаются с помощью совместной комбинации какой-либо клавиши с клавишей <super>. Обычно клавиша <super> помечена на клавиатуре флажком Microsoft.
===
+++![Настройка FireFox »»][Настройка FireFox ««]
|!Модуль {{remark{(плагин)}}}|!Назначение, рекомендации|
|FlashGot|Управление закачками|
|NoScript|Модуль по умолчанию отключает JavaScript-ы. Соответственно, уменьшается количество лезущих из всех щелей троянов, уменьшается количество отображаемой рекламы, ну и трафик со временем экономится тоже|
|[[FireBug|Плагин FireBug]]|Просмотр структуры страниц и отладка вёрстки, скриптов, cookies; оптимизация загрузки. Описание дополнительных примочек к плагину в заметке по ссылке на описание плагина|
|[[TabMixPlus|Плагин TabMixPlus]]|Многофункциональный плагин улучшения работы. Оптимизация работы и вида вкладок, сессий, и многого другого. Рекомендуемая настройка приведена в заметке по ссылке на описание плагина|
|[[OpenTabCount|Плагин OpenTabCount]]|Маленький плагин, который в строке состояния {{remark{(«Панель дополнений» по современному)}}} показывает количество открытых вкладок в FireFox. Инструкция о том, как убрать иконку около него и настроить его вид, доступна по ссылке|
|[[Classic Theme Restorer|Модуль Classic Theme Restorer]]|Модуль, умеющий изменять вид общего интерфейса FireFox.|
|>|!!Веб-разработка и веб-отладка|
|[[FirePicker|Плагин FirePicker]]||
|[[WebDeveloper|Плагин WebDeveloper]]|Шикарный плагин с анализом ошибок страницы и прочими возможностями|
|>|!!Проверка, выбор, установка цветов|
|[[ColorZilla|Плагин ColorZilla]]||
|[[Rainbow|Плагин Rainbow]]||
===
# Установить screenlets
# Выбрать и настроить желаемые
# У тех приложений, которые нужны постоянно {{remark{(календарь, калькулятор)}}} включить режим Thread as Widget {{remark{(при этом эти приложения будут в обычном режиме скрыты, и появятся только при вызове слоя виджетов)}}}
# Настроить комбинацию горячих клавиш на включение/выключение слоя виджетов на <super>-v {{remark{(клавиша <super> по умолчанию — клавиша Windows)}}} в CompizConfig {{remark{(слой виджетов)}}}
P.S.: На досуге посмотреть, не будет ли заменой ли скринлетам notify-send?
<html>
<table>
	<tr><th>Пункт меню</th><th>Оптимальное значение</th><th>Примечание</th></tr>
	<tr><td>Память <code>extended</code> и <code>expanded</code></td><td>Максимум <code>extended</code> и 0 <code>expanded</code></td><td>Linux не использует дополнительную (<span class="remark">expanded</span>) память</td></tr>
	<tr><td>Использование <code>Shadow RAM</code></td><td>Отключить</td><td>Ускорение доступа к ПЗУ материнской платы. Linux не использует медленную 16-разрядную ПЗУ.<br>Варианты пункта настройки: «Video BIOS Shadow», «C800-CBFF Shadow»</td></tr>
	<tr><td>15–16 MB Memory Hole</td><td>Отключить</td><td>Linux сам умеет находить эту память, если она есть</td></tr>
	<tr><td>Управление электропитанием</td></td>Включить <code>APM</code>, отключить <code>doze</code>, <code>standby</code>, <code>suspend</code>, <code>nap</code> и <code>sleep</code>, запретить таймерное отключение жёсткого диска.</td><td>Linux умеет управлять этими режимами лучше, чем материнская плата</td></tr>
	<tr><td>Поддержка USB-клавиатур</td><td>Если клавиатура "косячит", то придётся изменить значение <code>Legacy keyboard emulation</code> или <code>USB keyboard support</code></td><td /></tr>
</table>
</html>
В панели поиска {{{TUX Commander}}} {{remark{(Alt-F7)}}} два перевода неправильных. Опечатка во фразе «Чувствительно к регистру», и после поля «Содержит текст» фраза должна стоять после галочки «Чувствительно к регистру»
В настройках GNOME Commander-а есть отображение скрытых файлов, настройка быстрого поиска через ALT+буква {{remark{(чего так не хватало в mc)}}}, выделение файлов правой кнопкой мыши, режим отображения прав переключил в числовой {{remark{(644)}}}, цветовую схему установил пока в Современную {{remark{(установка цветовой схемы производится на закладке Расположение. Косяк перевода?)}}} плюс взвёл галочку «Окрашивать файлы в соответствии с переменной среды LS_COLORS}}}
Большой плюс — в меню Файл изначально есть Синхронизация. Осталось заставить заработать в GNOME Commander кнопку Samba, и можно жить спокойно&hellip;
!Цветовые схемы GNOME Commander-а
|!Название|!Описание|
|Определённая цветовая схема|Стандартный чёрные буквы на белом фоне. Для текста в принципе нормально, но для файловой системы без цветовой подсветки файлов контраст немножко лишковат, на мой взгляд|
|Современные|Самое то! Светло-серенький фон у панелей не напрягает глаз вообще! Но цветовую схему в переменной LS_COLORS надо бы по хорошему подправить. Некоторые цвета несколько раздражают своей насыщенностью, а некоторые цвета на светлом фоне совершенно нечитабельны|
|Слияние|Сиреневые буквы на серо-голубом фоне. Отличие от схемы «Deep Blue» только в цвете фона. У «Deep Blue» он синий, а у «Слияние» чуть посветлее|
|Классические|Серые буквы на тёмно-тёмно-синем фоне. То же самое оформление, что и у темы «Обычные»|
|Deep Blue|Подобие оригинальной раскраски панелей в цвета DOS-овского Norton Commander-а. Безнадёжно устарела|
|Cafezinho|Если не включать цветовую подсветку файлов в соответствии с переменной среды LS_COLORS, то вроде как получается неплохая инверсная {{remark{(светлые буквы на тёмном фоне)}}} цветовая схема панелей. Ну а если вдруг включить LS_COLORS, то синие буквы на тёмно-коричневом фоне — это что-то! Ну и контраст светлого обрамления с тёмными панелями тоже несколько напрягает. Схема для инверсной темы оформления явно&hellip;|
|Обычные|Кто бы мог подумать, что цветовая схема обычные — это серые буквы на тёмно-тёмно-синем фоне|
Пакет {{{Samba}}} обеспечивает сетевой доступ к ресурсам компьютера, то есть делает компьютер сервером сети. {{{Samba}}} устанавливается автоматически при установке первой же общедоступной сетевой папочки.

Пакет {{{Samba}}} конфигурируется следующими файлами:
{{{/etc/default/samba}}}
{{{/usr/bin/smbstatus.samba3}}}
{{{/usr/bin/smbstatus}}}

Для того, чтобы пользователь мог временно разрешать или запрещать доступ к компьютеру, в файл {{{/etc/default/samba/smb.conf}}} в раздел [global] придётся вписать строчку
{{{
usershare owner only = false
}}}
|!Команда|!Назначение|
|{{{sudo /etc/init.d/apache2 restart}}}|Перезапуск Apache|
Программа извлекает из тома/образа диска фрагменты, отвечающие признакам перечисленных в настроечном файле сигнатур файлов.
Так как алгоритм работы программы {{{foremost}}} аналогичен алгоритму работы программы [[scalpel|Пакет scalpel]], то и замечания по возможным результатам восстановления данных с помощью этой программы остаются теми же самыми.
Найдено {{{/usr/share/doc/friendly-recovery}}}
!Non-linear keyboard trainer — нелинейный тренажёр клавиатуры
Вводить приходится абстрактные комбинации клавиш, поэтому слепая печать в принципе должна тренироваться неплохо {{remark{(ибо отвлекаться от экрана тяжеловато, абракадабра не запоминается никак)}}}
Для тренировки раскладок приходится делать разные профили {{remark{(например, {{{vmunt}}} и {{{Вячеслав}}})}}}
В меню {{{GNOME}}} пакет автоматически не появляется, поэтому занести его туда придётся ручками. Для обучающих программ в меню {{{GNOME}}} зарезервирован пункт меню {{{Образовательные}}}. Там и создал ярлычок для этой программы.
----
{{remark{Смотри также: [[Расположение пальцев на клавиатуре]]}}}
Программа также, как и [[scalpel|Пакет scalpel]] / [[foremost|Пакет foremost]], может оперировать как с устройствами, так и с образами дисков. Программе можно указать для работы размер кластера {{remark{(непонятно, правда, пока, как программа будет работать, если начальное смещение первого кластера не будет равно целому количеству секторов, делённых на размер кластера)}}}. Похоже также, что программа не анализирует файл по длине и по содержимому. В наборе восстановленных файлов две фотки оказались битыми {{remark{(то есть программа взяла фрагментированный файл и обрезала его по сигнатуре конца, находящейся в теле данных файла)}}}. В результате восстановились не все фотографии из полного количества удалённых {{remark{(фрагментированные фотографии не находятся, восстановлено 154 файла из 173-х, из них два битых (то есть после {{{scalpel}}} количество восстановленных фотографий на 2 больше)}}}. Программа была запущена командной строкой:
{{{
recoveryjpeg -b 32k -m 12m ../flash.dump
}}}
где параметр {{{-b}}} указывает размер кластера {{remark{(если я правильно понял help программы)}}}, а {{{-m}}} сообщает программе максимальный размер файла {{remark{(установленный по умолчанию размер 6 мегабайт явно маловат)}}}
Программа извлекает из тома/образа диска фрагменты, отвечающие признакам перечисленных в настроечном файле сигнатур файлов. От программы [[foremost|Пакет foremost]] программа отличается поддержкой файлов бо́льшего размера {{remark{(более 4Gb)}}}, нежели [[foremost|Пакет foremost]].
Примеры запуска программы:
{{{
scalpel -v ~/flash.dump
scalpel -v /dev/sdb
}}}
Программа работает просто. В конфиге для разных типов файлов устанавливается сигнатуры начала и конца {{remark{(последняя необязательна)}}} и максимальный размер файла. После этого программа ищет на устройстве {{remark{(например, /dev/sdb)}}} или в файле образа {{remark{(например, /home/user/disk.dump)}}} сигнатуры начала {{remark{(надеюсь, по правильному смещению, кратному 512 байтам)}}}, и потом в зависимости от наличия сигнатуры конца файла вырезает кусок от стартовой сигнатуры до первой встреченной конечной сигнатуры, или {{remark{(при указании ключевого слова {{{REVERSE}}} после сигнатуры конца файла)}}} от стартовой сигнатуры до __последней__ встреченной сигнатуры. Последняя встреченная сигнатура вычисляется от конца файла, рассчитываемого для случая линейного расположения файла на поверхности диска. Вырезанные куски именуются от 00000000.тип до 99999999.тип и складываются в указанную в командной строке папку {{remark{(или в папку с именем {{{scalpel-output}}}, если папка назначения не указана)}}}. Внутри папки {{{scalpel-output}}} файлы раскладываются в подпапки по типам файлов.
В принципе программе можно указать в качестве маркера конца файла сигнатуру начала файла с указанием после сигнатуры конца файла ключевого слова {{{NEXT}}}, что будет означать, что с этого момента начинается следующий файл.
В результате первый режим работы программы {{remark{(вырезание кусков от стартовой до первой конечной сигнатуры)}}} в случае JPEG-файлов восстановил файлы размером по полтора килобайта {{remark{(вместо ожидаемых трёх-пяти мегабайт)}}}, так как конечная сигнатура внутри тела JPEG-файла встречается неоднократно как часть данных.
Второй режим работы в случае большого количества файлов приводит к резкому заполнению дискового пространства, ибо по умолчанию в конфигурационном файле {{{/etc/scalpel/scalpel.conf}}} размер файла JPG установлен по умолчанию в 200 мегабайт.
Соответственно, программа имеет хорошие шансы восстановить файлы на нефрагментированных {{remark{(или малофрагментированных томах)}}}. В случае карт памяти фотоаппаратов {{remark{(на которых битые файлы часто удаляются, в том числе и из середины последовательности фотографий)}}} достаточно заметный процент восстановленных фотографий будет битым.
{{remark{Примечание 1: и в случае запуска {{{scalpel}}} с правами суперпользователя не забудьте потом сменить собственника файлов на нужного пользователя командой:}}}
{{{
chown -R -v пользователь *
}}}
{{remark{Примечание 2: Программа не работает с примонтированными файловыми системами с удалёнными файлами. Если с диска удалены все файлы, то программа ничего не восстановит. Возможно, можно восстанавливать файлы непосредственно с тома {{remark{(например, с {{{/dev/sdb1}}})}}}, но не проверял.}}}
{{remark{Примечание 3: После окончания работы программа в папке восстановления создаёт текстовый файл {{{audit.txt}}}, в котором указаны начальные смещения найденных файлов. В принципе эти смещения можно быстро пересчитать в кластеры по формуле (смещение / размер_сектора - кол-во_зарезервированных_секторов) / размер_кластера + 2. В моём случае пересчёт по формуле {{{=ЗНАЧЕН(ПСТР(B2;13;2000))/32768-8}}} был таким:}}}
|!Файл|!Смещение|!Кластер|
|00000000.jpg| 393216| 4|
|00000001.jpg| 3964928| 113|
|00000002.jpg| 7602176| 224|
|00000003.jpg| 11206656| 334|
|00000004.jpg| 14843904| 445|
|00000005.jpg| 18481152| 556|
|00000006.jpg| 22020096| 664|
|00000007.jpg| 24248320| 732|
|00000008.jpg| 26017792| 786|
|00000009.jpg| 27852800| 842|
|00000010.jpg| 30048256| 909|
{{remark{В дальнейшем эти данные могут сильно помочь в случае ручного восстановления информации с помощью дисковых утилит (что, собственно, мне и помогло)}}}
# Сохраняем файл {{{open_tab_count-1.1-fx.xpi}}} со странички с плагином {{remark{(или копируем из папки профиля FireFox файл extensions/tabcount@3greeneggs.com.xpi)}}}. Этот файл является ZIP-архивом, поэтому или переименовываем его в .zip, или просто работаем через FAR или другую управляющую файлами программу, автоматически распознающую тип файла.
# Желательно сделать архивную копию файла {{remark{(на всякий пожарный, вдруг пригодится)}}}.
# В папке chrome/chromeFiles/content/ изменяем файлы плагина по своему вкусу {{remark{(изменения под мой вкус описаны ниже)}}}, обновить их в архиве плагина.
# Удалить старый плагин {{remark{(если он был установлен)}}}, перезапустить FireFox.
# Добавить изменённый плагин в FireFox, перезапуститься, наслаждаться&hellip;
!Изменения файлов в плагине под мой вкус
В файле browser_overlay.xul удаляю строчку:
{{{
<image src="chrome://tabcount/content/folder_navy.png" />
}}}
вставляющую в панель состояния совершенно ненужную {{remark{(и при этом жутко уродливую)}}} иконку.
В файле tabcount.css произвожу следующие изменения:
{{{
#tabcount { color:#000000; }
#tabcount label { margin:0px; }
#tabcount_label { padding-left:5px; }
}}}
При этом цвет всего текста становится чёрным и появляется отступ слева от текста
{{source{(Уточнённый перевод совета guanxi [[отсюда|https://addons.mozilla.org/ru/firefox/addon/open-tab-count/?src=search]])}}}
|functions|k
|!Параметр|!Значение|!Описание|
|>|>|!!Ссылки {{remark{(все настройки оставлены по умолчанию)}}}|
|>|>|!!События|
|>|>|!!!Новые вкладки|
|Размещать новые вкладки после текущей| Вкл |При большом количестве вкладок не надо проматывать панель вкладок до последней свежеоткрытой вкладки|
|Открывать другие вкладки после текущей| Вкл |Все новые вкладки, открываемые из других программ, открываются сразу после активной вкладки. Позволяет заранее распланировать группировку вкладок по темам|
|Только если связано с текущей вкладкой| Выкл |Невнятные условия отключаем|
|Изменять порядок открытия| Выкл |~|
|>|>|!!!Открытие вкладок|
|Открывать в новых вкладках| Всё вкл, кроме «Из адресной строки» |Любой щелчок на указанных ссылках автоматически откроет ссылку в новом окне|
|>|>|!!!Закрытие вкладок|
|При закрытии текущей вкладки| Переключаться на вкладку слева |Вместе с открытием ссылок рядом с активной позволяет прочитывать ссылки с конца {{remark{(с первой открытой)}}} до начала {{remark{к самой последней открытой)}}} без дополнительных щелчков по вкладкам|
|>|>|!!!Объединение вкладок|
|>|>|!!!Настройки вкладок|
|Запоминать не более &hellip; вкладок| 30 |10 вкладок по умолчанию, на мой взгляд, маловато. Иногда явно надо больше|
|>|>|!!Просмотр|
|>|>|!!!Панель вкладок|
|Показывать превью вкладки| Вкл |Заменяет выпадывающий список с вкладками {{remark{(стрелочка вниз справа на панели вкладок)}}} на панель с иконками вкладок. Чуть помедленнее появляется, зато не надо проматывать список на небольших экранах плюс сразу можно ориентироваться по иконкам сайтов, подписям и виду|
|>|>|!!!Параметры вкладок|
|Подсветка непрочитанной вкладки| Вкл |Очень удобно при открытии сразу нескольких вкладок с текущей страницы. Сразу видно, где первая открытая вкладка. Настройка стилей вкладок приведена ниже этой таблицы|
|Настройка стилей| Текущая вкладка |Включить цвет фона: 255/255/153, непрозрачность: 60%|
|~| Непрочитанные вкладки |Включить цвет фона: 153/255/153, непрозрачность: 30%|
|Кнопка закрытия| На текущей вкладке и вкладке при наведении курсора мыши |Визуально меньше мусора на экране. Взгляд лишний раз не цепляется за уйму крестиков|
|Ширина вкладок| от 42 пикселей |Можно сделать и 30, если хочется|
|>|>|!!!Панель инструментов|
|>|>|!!Мышь|
|>|>|!!!Настройки мыши|
|>|>|!!!Кнопки мыши|
|>|>|!!!!Двойной щелчок|
|По вкладке| Клонировать вкладку | |
|>|>|!!!!Ctrl-ЛеваяКнопкаМыши|
|По панели вкладок| Выбрать вкладки для объединения |Ctrl-ЛКМ объединяет вкладки как при щелчке по тексту вкладки, так и по ярлычкам вкладок|
|>|>|!!!!Shift-ЛеваяКнопкаМыши|
|По панели вкладок| Защитить вкладку |Shift-ЛКМ защищает вкладки как при щелчке на текст вкладки, так и при щелчке на ярлычок вкладки|
|>|>|!!!!Alt-ЛеваяКнопкаМыши|
|По панели вкладок| Заблокировать вкладку |Alt-ЛКМ блокирует вкладку аналогично предыдущим действиям|
|>|>|!!Меню|
|>|>|!!!Вкладки|
|>|>|!!!Страницы|
|>|>|!!!Инструменты|
|>|>|!!Сессии|
|Использовать встроенную функцию восстановления| Вкл |При запуске FireFox-а открывает все последние открытые вкладки. Экономит нажатие пункта меню {{{Журнал / Восстановить предыдущую сессию}}}|

{{remark{Примечание: Параметры, оставленные в состоянии настройки по умолчанию, не описываются (чтобы не загромождать описание плагина)}}}
!Изменение настроек стилей вкладок
|!Параметр|!Значение|
|>|!!Текущая вкладка|
|Цвет фона:|255-255-153 / 60% {{remark{(бледно-жёлтый)}}}|
|>|!!Непрочитанные вкладки|
|Текст|Курсив|
|Цвет фона:|153-255-153 / 30% {{remark{(бледно-зелёный)}}}|
!Нужна помощь по автоматическому монтированию сетевой папки
{{remark{Ylmf OS китаец на базе Ubuntu}}} {{source{http://teron.ru/index.php?showtopic=1311568}}}
''стоит Ylmf OS от китайских братьев, нужно для работы 1с смонтировать папку с базой на windows машине. Если делаю ручками то все ОК, а вот сделать так что бы при старте монтировалось не смог, в {{{/etc/fstab}}} вписал строку {{{//192.168.0.1/base /mnt/user/1c cifs iocharset=utf8 0 0}}}, но толку нет :-(
подскажите куда копать''
Пакет mount.cifs стоит? Какой конфиг самбы? Что выдает {{{ls -l /mnt/user}}}
Какие права на шару base?
''mount.cifs стоит''
{{{
ls -l /home/user выдает
итого 836
drwxr-xr-x 2 user user 4096 2011-10-18 19:27 1c
...
}}}
''шара на видовой машине, права полные,
если делаю ручками {{{sudo mount -t smbfs //192.168.0.1/base /home/user/1c -o username=User/,iocharset=utf8,rw,file_mode=0777,dir_mode=0777}}}
то все замечательно, но после перезагрузки нужно снова монтировать, а это не гут''

Попробуйте сделать скрипт запускающийся после поднятия сетевого интерфейса.

в fstab как-то так:
{{{
//192.168.0.1/base /mnt/user/1c cifs auto,,iocharset=utf8,dir_mode=0777,file_mode=0777,rw 0 0 
}}}
''не прокатило''
логи смотрите, возможно монтирование происходит до старта клиента самбы
''может плохо искал конечно, но не знаю где смотреть :-( ''
В {{{/var/log/}}} вестимо . Пройтись grep-ом по daemon.log и messages, и dmesg. Ну дальше разберётесь. Это же вроде *buntu.
!Разбиение диска
На всякий пожарный на новый ноут перенёс Windows со старого Aquarius-а. Соответственно, на жёстком диске получилось 4 раздела {{remark{(разбиение выведено командой {{{sudo fdisk -l}}})}}}:
|!Устройство|!Загр|!Начало|!Конец|!Блоки|!Id|!Система|!Примечание|
|/dev/sda1| | 1| 3'319| 26'658'816| 83|Linux {{remark{(ext3, /, root)}}}||
|/dev/sda2| * | 3'825| 7'648| 38'716'280| C| W95 FAT32 (LBA)|Раздел 2 не заканчивается на границе цилиндра|
|/dev/sda3| | 7'649| 30'401| 182'763'000| 7|HPFS/NTFS|Раздел 3 не заканчивается на границе цилиндра|
|/dev/sda4| | 3'319| 3'824| 4'056'064| 82|Linux своп / Solaris {{remark{(swap)}}}||
{{remark{''Примечания:''}}}
# {{remark{очерёдность {{{/dev/sdXN}}} идёт в порядке 1-4, если раздел создан в MBR, и с пяти и далее, если это Extended Partition,}}}
# {{remark{посмотреть разбиение диска можно командой {{{gparted}}} или {{{fdisk -l}}}.}}}
!Монтирование томов
Соответственно, для работы с данными на томах Windows потребовалось примонтировать их файловую систему к дереву Linux-а. Мне показалось логичным разместить их в папках {{{/mnt/WINDOWS}}} и {{{/mnt/STORAGE}}} {{remark{(тем более, что метки дисков в Windows-е у данных томов практически такие же)}}}.
Для этого в консоли командами
{{{
sudo mkdir /mnt/WINDOWS
sudo mkdir /mnt/STORAGE
}}}
создал папки, а затем командами
{{{
sudo mount /dev/sda2 /mnt/WINDOWS
sudo mount /dev/sda3 /mnt/STORAGE
}}}
монтируем тома и проверяем {{remark{(через любую файловую оболочку)}}} правильность кодировки файлов в подмонтированных файловых системах. Если автоопределение кодировки не сработало, можно размонтировать том и при повторном монтировании кодировку указать явно командой
{{{
sudo umount /mnt/WINDOWS
sudo mount -t /dev/sda2 /mnt/WINDOWS
}}}
{{remark{Примечание: в принципе для экономии клавиатурной работы можно запустить Терминал под суперпользователем {{remark{(gksu gnome-terminal)}}}, тогда префикс {{{sudo}}} перед командами набирать не придётся}}}
Просмотреть текущие монтирования можно командой
{{{
mount -l
}}}
!Автоматическое подключение томов (fstab)
После того, как всё проверено, для автоматического подключения томов в предварительно созданные папки параметры подключаемых томов можно прописать в конфигурационном файле {{{/etc/fstab}}}
|!File system|!Mount point|!Type|!Options|!Dump|!Pass|
|/dev/sda2|/windows|vfat|iocharset=utf8,umask=017| 0| 0|
|/dev/sda3|/storage|ntfs|utf8| 0| 0|
После сохранения файла можно или перезагрузиться, или просто запустить автомонтирование командой
{{{
mount -a
}}}
Допустимые типы файловых систем: {{{ntfs}}}, {{{ntfs-3g}}}, &hellip;
!Пример чужого fstab
{{{
/dev/sda1	none	swap	sw	0	0
/dev/sda2	/ext4	defaults	0	1
/dev/sda5	/home	ext4	defaults	0	2
/dev/sdb1	/home/username/Диск250	xfs	remount,users	1	2
}}}
+++![Разметка диска »»][Разметка диска ««]
|!Программа|!Примечание|
|cfdisk| |
|parted| |
|partman| |
===
{{{
sudo fdisk -l 

Диск /dev/sda: 120.0 ГБ, 120034123776 байт
255 heads, 63 sectors/track, 14593 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x056255c5

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1        3824    30716248+   c  W95 FAT32 (LBA)
/dev/sda2            3825       14593    86501992+   7  HPFS/NTFS
}}}
<html>
<style type="text/css">
TABLE.kbd { border:none;border-collapse:collapse;font-family:Times New Roman,serif;font-weight:bold;padding:0px }
TABLE.kbd TR { border:none;font-size:1.4em;line-height:25px;text-align:center;vertical-align:middle }
TABLE.kbd TD { border:1px solid black;padding:2px;width:9px } /* border:1px dotted blue; */
TABLE.kbd TD TT { color:#840;display:block;float:right;font-size:1em;position:relative;top:-0.4em }
TABLE.kbd TR.top { font-size:1.2em }
TABLE.kbd TR.top TD { padding-bottom:0px;vertical-align:bottom;text-align:left;height:2px }
TABLE.kbd TR.top TD TT { top:-0.4em }
TABLE.kbd TD.sp { border:none;font-size:.1em;padding:0px; } /* border:1px dotted blue; */
TABLE.kbd TD.miz { background-color:#ccf }
TABLE.kbd TD.non { background-color:#fcc }
TABLE.kbd TD.mid { background-color:#cfc }
TABLE.kbd TD.ptr { background-color:#ffd }
TABLE.kbd TD.big { background-color:#ccc }
</style>
</html>+++![Ортодоксальное расположение »»]
+++!![Настольная клавиатура (eng) »»]
<html>
<table class="kbd">

<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >'<tt>~</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">2<tt>@</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">3<tt>#</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">4<tt>$</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>^</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>&</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>|</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Q</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">W</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">E</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">R</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">T</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Y</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">U</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">I</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">O</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">P</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">[<tt>{</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">]<tt>}</tt></td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">&nbsp;</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">A</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">S</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">D</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">F</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">G</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">H</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">J</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">K</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">L</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">;<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">'<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Z</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">X</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">C</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">V</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">B</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">N</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">M</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">,<tt>&lt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">.<tt>&gt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">/<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=12 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=24 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
+++!![Настольная клавиатура (рус) »»]
<html>
<table class="kbd">
<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >ё<tt>Ё</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">2<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">3<tt>№</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">4<tt>;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>/</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Й</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ц</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">У</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">К</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Е</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Н</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Г</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Ш</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Щ</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">З</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Х</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ъ</td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">&nbsp;</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ф</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ы</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">В</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">А</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">П</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Р</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">О</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Л</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Д</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ж</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Э</td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Я</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ч</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">С</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">М</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">И</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Т</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Ь</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Б</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ю</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">.<tt>,</tt></td><td class="sp">&nbsp;</td>
	<td colspan=12 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=24 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
+++!![Ноутбук (eng) »»]
<html>
<table class="kbd">

<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >'<tt>~</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">2<tt>@</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">3<tt>#</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">4<tt>$</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>^</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>&</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Q</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">W</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">E</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">R</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">T</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Y</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">U</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">I</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">O</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">P</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">[<tt>{</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">]<tt>}</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>|</tt></td>
</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">A</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">S</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">D</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">F</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">G</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">H</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">J</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">K</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">L</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">;<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">'<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Z</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">X</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">C</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">V</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">B</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">N</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">M</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">,<tt>&lt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">.<tt>&gt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">/<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=21 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
+++!![Ноутбук (рус) »»]
<html>
<table class="kbd">

<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >ё<tt>Ё</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">2<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">3<tt>№</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">4<tt>;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Й</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ц</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">У</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">К</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Е</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Н</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Г</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Ш</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Щ</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">З</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Х</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ъ</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>/</tt></td>
</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ф</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ы</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">В</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">А</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">П</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Р</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">О</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Л</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Д</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ж</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Э</td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Я</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ч</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">С</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">М</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">И</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Т</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Ь</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Б</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ю</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">.<tt>,</tt></td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=21 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
===
+++![Моё расположение »»]
+++!![Настольная клавиатура (eng) »»]
<html>
<table class="kbd">
<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >'<tt>~</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">2<tt>@</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">3<tt>#</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">4<tt>$</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>^</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>&</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>|</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Q</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">W</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">E</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">R</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">T</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Y</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">U</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">I</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">O</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">P</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">[<tt>{</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">]<tt>}</tt></td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">&nbsp;</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">A</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">S</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">D</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">F</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">G</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">H</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">J</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">K</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">L</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">;<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">'<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Z</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">X</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">C</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">V</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">B</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">N</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">M</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">,<tt>&lt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">.<tt>&gt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">/<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=12 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=24 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
+++!![Настольная клавиатура (рус) »»]
<html>
<table class="kbd">
<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >ё<tt>Ё</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">2<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">3<tt>№</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">4<tt>;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>/</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Й</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ц</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">У</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">К</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Е</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Н</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Г</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Ш</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Щ</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">З</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Х</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ъ</td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">&nbsp;</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ф</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ы</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">В</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">А</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">П</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Р</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">О</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Л</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Д</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ж</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Э</td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Я</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Ч</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">С</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">М</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">И</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Т</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Ь</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Б</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ю</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">.<tt>,</tt></td><td class="sp">&nbsp;</td>
	<td colspan=12 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=24 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
+++!![Ноутбук (eng) »»]
<html>
<table class="kbd">

<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >'<tt>~</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">2<tt>@</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">3<tt>#</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">4<tt>$</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>^</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>&</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Q</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">W</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">E</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">R</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">T</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Y</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">U</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">I</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">O</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">P</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">[<tt>{</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">]<tt>}</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>|</tt></td>
</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">A</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">S</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">D</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">F</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">G</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">H</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">J</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">K</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">L</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">;<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">'<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Z</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">X</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">C</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">V</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">B</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">N</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">M</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">,<tt>&lt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">.<tt>&gt;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">/<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=21 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
+++!![Ноутбук (рус) »»]
<html>
<table class="kbd">

<tr style="line-height:2px;font-size:.1em;padding:0px">
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
	<td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td><td class="sp">&nbsp;</td>
</tr>
<tr class="top">
	<td colspan=3 class="miz" >ё<tt>Ё</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">1<tt>!</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">2<tt>"</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">3<tt>№</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">4<tt>;</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">5<tt>%</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">6<tt>:</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">7<tt>?</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">8<tt>*</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">9<tt>(</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">0<tt>)</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">-<tt>_</tt></td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">=<tt>+</tt></td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz" style="text-align:center">BS</td>
</tr>
<tr>
	<td colspan=4 class="miz">Tab</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Й</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ц</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">У</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">К</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Е</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Н</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Г</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Ш</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Щ</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">З</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Х</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ъ</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">\<tt>/</tt></td>
</td>
</tr>
<tr>
	<td colspan=5 class="miz">Caps</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ф</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ы</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">В</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">А</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">П</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Р</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">О</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Л</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Д</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Ж</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">Э</td><td class="sp">&nbsp;</td>
	<td colspan=6 class="miz">Enter</td>
</tr>
<tr>
	<td colspan=6 class="miz">Shift</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Я</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Ч</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">С</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">М</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">И</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Т</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="ptr">Ь</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="mid">Б</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="non">Ю</td><td class="sp">&nbsp;</td>
	<td colspan=3 class="miz">.<tt>,</tt></td><td class="sp">&nbsp;</td>
	<td colspan=9 class="miz">Shift</td>
</tr>
<tr>
	<td colspan=4 class="miz">Ctrl</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=21 class="big">Space</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="big">Alt</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="non">sup</td><td class="sp">&nbsp;</td>
	<td colspan=4>Menu</td><td class="sp">&nbsp;</td>
	<td colspan=4 class="miz">Ctrl</td>
</tr>
</table>
</html>===
===
!Монтирование нужных дисков из локальной сети
Команды почему-то пока не работают:
{{{
mount -t smbfs //home/disk_d /mnt/home_d
mount -t ntfs //home/disk_d /mnt/home_d
mount -t ntfs //home/DISK_D /mnt/home_d
mount -t ntfs -o -auto,iocharset=utf8 //home/Мои%20документы /mnt/home_vmunt
mount -t ntfs -o -auto,iocharset=utf8,user=vmunt%пароль "//home/Мои документы" /mnt/home_vmunt
mount -t ntfs -o -auto,iocharset=utf8,user=WORKGROUP/vmunt%пароль "//home/Мои документы" /mnt/home_vmunt
smbmount -t ntfs //home/disk_d /mnt/home_d

}}}
Ну и, соответственно, пакетный файл {{{/usr/bin/mount_home_munt}}} пока бесполезен

Примечание: правда, выполнял я это всё монтирование до того, как прописал в hosts строку {{{192.168.0.12 home}}}, но и после неё {{{mount}}} пишет, что ресурс {{{//home/disk_d}}} {{remark{(или {{{//home/DISK_D}}})}}} недоступен
!Подключение сетевых дисков в GTK
Если к сетевому тому обращаться через оконный сетевой интерфейс, то том:
# появляется на рабочем столе, и
# монтируется в папку {{{/home/<пользователь>/.gvfs/<имя_сетевого_ресурса> на <имя_компьютера>}}}
+++![Подготовка к копированию »»][Подготовка к копированию ««]
!!Создание папок:
{{{
> mkdir /home/user/sync
> mkdir /home/user/sync/src
> mkdir /home/user/sync/dst
}}}
{{remark{''Примечание:'' В папках {{{src}}} и {{{dst}}} можно создать подпапки и примонтировать в них несколько разных томов, чтобы выполнить всю синхронизацию за один единственный запуск {{{rsync}}}.}}}
!!Подключение томов
{{{
> mount /dev/sd<xM> /home/user/sync/src
> mount /dev/sd<yN> /home/user/sync/dst
}}}
===
!Синхронизация
{{{
> rsync -rplgotEv --noatime --progress /home/user/sync/src/ /home/user/sync/dst/
}}}
{{source{Источник: [[хабр|https://habrahabr.ru/post/102849/]]}}}{{remark{''Примечания:'' 1) внимательно указывайте завершающие символы ''{{string{/}}}'', 2) ключ ''{{string{x}}}'' убран.}}}
+++!![Синхронизация с файлом исключений »»][Синхронизация с файлом исключений ««]
===
где ключи {{{rsync}}}:
|sortable|k
|>|!Ключ|!Действие|h
|!краткий|!полный|~|h
| -v | """--"""verbose |Включение проверки.|
| -q | """--"""quiet |Вывод только ошибок и предупреждений.|
| -c | """--"""checksum |Сравнение файлов по контрольным суммам {{remark{(при одинаковом времени изменения и размере)}}}.|
| -r | """--"""recursive |Работа с подкаталогами.|
| -R | """--"""relative |Использование относительных путей.|
| -b | """--"""backup |Создание архивной копии.|
| | """--"""backup-dir=DIR |Путь создания архивной копии.|
| | """--"""suffix=SUFFIX |По умолчанию используется &hellip; непонятно что.|
| -u | """--"""update |Более новые файлы в DEST не перезаписываем.|
| -d | """--"""dirs |Копирование только первого уровня вложенных папок?|
| -l | """--"""links |Копирование симлинков симлинками.|
| -L | """--"""copy-links |Преобразование симлинков в ссылки?|
| | """--"""safe-links |Игнорирование симлинков на ресурсы вне копируемого дерева папок.|
| -k | """--"""copy-dirlinks |Копирование содержимого симлинков.|
| -K | """--"""keep-dirlinks |Клонированные симлинковские деревья папок не обновляются.|
| -p | """--"""perms |Клонирование прав.|
| -E | """--"""executability |Клонирование признака исполняемого файла.|
| | """--"""chmod=CHMOD |Изменение прав.|
| -o | """--"""owner |Сохранение хозяина.|
| -g | """--"""group |Сохранение группы.|
| -t | """--"""times |Сохранение времени изменения.|
| | """--"""preallocate |Резервирование места под файл перед копированием.|
| -n | """--"""dry-run |Тестовый проход, без проведения копирования.|
| -W | """--"""whole-file |Копирования файлов целиком, без применения алгоритма delta-xfer.|
| -x | """--"""one-file-system |Соблюдение ограничений файловых систем?|
| | """--"""existing |Обновление только существующих файлов, новые файлы не добавляются.|
| | """--"""ignore-existing |Копирование только новых файлов, уже существующие файлы не обновляются.|
| | """--"""remove-source-files |Скопированные файлы удаляются из исходных папок.|
| | """--"""delete |Лишние файлы на получателе удаляются.|
| | """--"""delete-excluded |Исключаемые файлы у получателя удаляются.|
| | """--"""ignore-errors |Игнорирование ошибок ввода-вывода.|
| | """--"""force |Разрешение удалять папки.|
| | """--"""max-delete=NUM |Удаление не более NUM файлов за сеанс.|
| | """--"""max-size=SIZE |Файлы больше SIZE не копируются.|
| | """--"""min-size=SIZE |Файлы меньше SIZE не копируются.|
| -m | """--"""prune-empty-dirs |Пустые ветки папок не копируются.|
| | """--"""timeout=SECONDS |Установка времени таймаута операции.|
| -I | """--"""ignore-times |Файлы с одинаковой датой и размеров копируются повторно.|
| | """--"""size-only |Проверка одинаковости только по размеру файла.|
| | """--"""exclude=PATTERN |Исключение файлов по шаблону.|
| | """--"""exclude-from=FILE |Исключение файлов, совпадающих с шаблонами, перечисленными в файле.|
| | """--"""include=PATTERN |Обязательное копирование совпадающих с шаблоном файлов?|
| | """--"""include-from=FILE |Обязательное копирование файлов, совпадающих с шаблонами, перечисленными в файле?|
| | """--"""files-from=FILE |Копирование только файлов, перечисленных в файле?|
| | """--"""stats |Отображение статистики работы?|
| -h | """--"""human-readable |Отображение статистики в удобочитаемом формате?|
| | """--"""progress |Отображение процесса работы.|
| | """--"""log-file=FILE |Указание файла лога.|
| | """--"""log-file-format=FMT |Указание формата записей лога.|
| | """--"""list-only |Ещё одна имитация работы?|
| | """--"""bwlimit=RATE |Ограничение скорости работы.|
| | """--"""noatime |Запрет обновления времени последнего доступа исходных файлов.|
+++![Завершение копирования »»][Завершение копирования ««]
!!Отключение томов
{{{
> umount /dev/sd<xM>
> umount /dev/sd<yN>
}}}
!!Удаление папок
{{{
> rmdir /home/user/sync/src
> rmdir /home/user/sync/dst
> rmdir /home/user/sync
}}}
===
В меню Приложения/Wine выложил две строчки
* Explorer — {{{}}}, и
* Regedit — {{{}}} {{remark{(regedit нужен для настройки CompuPic)}}}
Samba - прижившееся название сервисов smb

NetBEUI - сокращённая реализация NetBIOS

more /etc/services
{{{
ps -xaww | grep mb
alias
unalias grep
}}}

Для нормальной работы Самбе нужны базы LDAP
шифрование Kerberos нужно для работы с AD

{{{ntpd}}} настроить по cron-у ntpdate, или запустить ntpd {{remark{(клиентская работа)}}}, чтобы потом быть сервером для остальных

samba если устанавливается
размещение может быть как в {{{usr/local/samba/config}}}, так и в {{{etc/local/etc/samba}}}

{{{swat}}} - Samba WEB Administration Toolkit (облегчение для настройки Samba). Версия SWAT должна подходить под версию Samba

Журналы могут быть распределёнными (по IP-адресам машин, по именам машин, удобно, раздельные логи), так и агрегированными

У Samba в conf-файле допустимы переменные, которые можно заменять на имя пользователя, IP-адрес компа.

Связывание самбы с приложениями - демон winbindd
winbindd - авторизация в Linux-е, апаче, squid, на использование доменной структуры под Unix. 

PAM - Plugable Autorisation Modules С появлением этой системы стало возможным подключать любые авторизации

Авторизация FTP или SSH возможна, черех winbindd и потом в домен...

more /etc/samba/smb.conf

[lgobal] настройка самого сервера
domain=WORKGROUP
server string - ися компа (сервера)

далее разделы - описание ресурсов, которые предоставляет самба сервер
Умеет предоставлять файловые или принтерные ресурсы

Скрытые ресурсы есть, которые не только кончаются на $

Доступ к C$ тоже из Linux-а работают...

"/home/samba/переменная пользователя" в конфиге сделать, и мы не сможет увидеть пути других пользователей, например

WINS сервера надо или указать явно, или этот сервер автоматически стаёт сам WINS-сервером
oslevel - параметр, который явно включает WINS-сервер (для Win95 oslevel=34, NT =64)

В Vista oslevel больше, чем 64

domainlogons и domainmaster надо включить, если надо, чтобы Linux-сервер сделать контроллером домена.
В Internet-е есть всякие Howto, как включить контроллер домена на Linux-е

Пароли хранятся или в текстовом файле, или уже достаточно давно в файле tdsam, 

Политики, стартовые скрипты позволяют устанавливать софт на клиентские компы...

Есть возможность внешних пользователей маппить на внутренних пользователей

Схемы работы с выгрузкой рабочих столов могут быть разными

Разные варианты скриптов. Logon script, add user script

Как создать простой сервер, 

lpd - line printer daemon - демон принтера

/var/spool - спул принтеров

[print$] - раздел с драйверами принтеров
/var/lib/samba/print - драйверы принтеров
GoldenDict, StarDict
<html>
<span class="remark"><b>Начальное замечание:</b> Данная вики является некоторым подспорьем для моей памяти плюс помогает сообщать полезные сведения дочери, обучающейся сейчас в Питере. Информация, содержащаяся здесь, вряд ли будет сильно полезной другим людям, не участвующим в интерактивном процессе освоения Linix-а.</span><br>
<h1 class="titled" title="Сразу хотел бы отметить, что подход с точки зрения системного знания в корне неправильный. А системное знание очень пригодится в будущем, ибо дефекты использования косячного монопольного ПО с каждым днём видны всё заметней. Ну и правильный подход к системному знанию — взять хорошую книжку (того же Колисниченко, например), и от корки до корки. Заодно и буковки вспомнить можно будет...">Пошаговое освоение день за днём</h1>
</html>[[Введение]] {{remark{(включая [[Идеология дерева ресурсов UNIX-подобных ОС]], [[Идеология безопасности UNIX-подобных ОС]], [[Использование нескольких рабочих столов]])}}}
[[Установка]]
[[Посещение Linux Install Fest|Конференция Linux Install Fest 4-5.09.2010]]
[[Настройка окружающей среды]]
[[Подключение томов и fstab]]
[[Связь с Windows и запуск приложений Windows]]
[[Распределение ресурсов локальной сети]]
[[Установка Samba]]
[[Резервное копирование, дублирование, синхронизация]]
[[Восстановление удалённых файлов]]
[[Настройка веб-сервера на основе Apache]]
[[Установка snort для MySQL]]
[[Настройка скринлетов]]
[[Установка Apache/PHP/MySQL]]
[[Анализ проблем]]
[[Установка сканера Acer 640BU]]
[[Настройка RAID в шлюзе]]
[[Текстовый редактор vim]]
!Справочник
[[Установленные пакеты]]
[[Горячие клавиши]]
[[Касса символов]]
[[Расположение пальцев на клавиатуре]]
----
[[Добавление пакетов при переустановке]]
[[Назначение папок]]
[[Обнаруженные косяки]]
[[Конфигурирование Debian]]
[[Как (сделать)…]]
----
!Программа безопасного удаления файлов wipe
!Программа восстановления (и смены) пароля в NT SAM
{{{
chntpw
}}}
!Конференции
[[Конференция Linux Install Fest 4-5.09.2010]]
!Книги
[[Читая Колисниченко…]]
{{{sudo ln -s /usr/bin/gnome-terminal /usr/bin/terminal}}}
{{{debmirror}}} Утилита изготовления локального репозитария
!Настройка локального репозитария
|{{{sudo gedit /etc/apt/sources.list}}}|Открытие файла конфигурации репозитария (локального репозитария)|
|{{{sudo scite /etc/apt/sources.list}}}|~|
{{{
deb http://192.168.1.3/ubuntu lucid main restricted universe multiverse
deb http://192.168.1.3/ubuntu lucid-security main restricted universe multiverse
deb http://192.168.1.3/ubuntu lucid-updates main restricted universe multiverse
}}}
{{remark{Если debmirror не установлен, то как обычно — {{{sudo apt-get install debmirror}}}}}}
После изменения файла sources.list надо обновить apt-get командой {{{sudo apt-get update}}}
{{remark{P.S.: Ubuntu использует репозитарий Debian, поэтому для локальной сети с разными операционными системами можно иметь один локальный репозитарий}}}
[[Программы]]
[[Консольные команды]]
[[Горячие клавиши]]
diff
<html><table border="1">
<colgroup><col><col></colgroup>
<thead>
	<tr><th>Каталог</th><th>Содержит</th></tr>
</thead>
<tbody>
	<tr><td><code>bin</code></td><td>необходимые исполняемые файлы</td></tr>
	<tr><td><code>boot</code></td><td>статичные файлы системного загрузчика</td></tr>
	<tr><td><code>dev</code></td><td>файлы устройств</td></tr>
	<tr><td><code>etc</code></td><td>настройки системы данной машины</td></tr>
	<tr><td><code>home</code></td><td>домашние каталоги пользователей</td></tr>
	<tr><td><code>lib</code></td><td>необходимые библиотеки общего пользования и модули ядра</td></tr>
	<tr><td><code>media</code></td><td>содержит точки монтирования для съёмных носителей</td></tr>
	<tr><td><code>mnt</code></td><td>точка монтирования для временно монтируемой файловой системы</td></tr>
	<tr><td><code>proc</code></td><td>виртуальный каталог для системной информации (для ядер 2.4 и 2.6)</td></tr>
	<tr><td><code>root</code></td><td>домашний каталог суперпользователя</td></tr>
	<tr><td><code>sbin</code></td><td>необходимые системные исполняемые файлы</td></tr>
	<tr><td><code>sys</code></td><td>виртуальный каталог для системной информации (для ядер 2.6)</td></tr>
	<tr><td><code>tmp</code></td><td>временные файлы</td></tr>
	<tr><td><code>usr</code></td><td>вторичная иерархия</td></tr>
	<tr><td><code>var</code></td><td>изменяемые данные</td></tr>
	<tr><td><code>srv</code></td><td>Данные сервисов, предоставляемых системой</td></tr>
	<tr><td><code>opt</code></td><td>дополнительное программное обеспечение</td></tr>
</tbody>
</table>
<p class="source">Источник: <a href=http://www.debian.org/releases/stable/i386/apcs02.html.ru>debian.org</a></p>
</html>
<html>
<table><thead>
	<tr><th colspan="11">Нормальные</th><td style="background-color:white" /><th colspan="8">Высокоинтенсивные</th></tr>
	<tr><th colspan="2">Обычный</th><td style="background-color:white" /><th colspan="2">Жирный</th><td style="background-color:white" /><th colspan="2">Подчёркнутый</th><td style="background-color:white" /><th colspan="2">Фоновый</th><td style="background-color:white" /><th colspan="2">Обычный</th><td style="background-color:white" /><th colspan="2">Жирный</th><td style="background-color:white" /><th colspan="2">Подчёркнутый</th></tr>
	<tr><th>Код</th><th>Цвет</th><td style="background-color:white" /><th>Код</th><th>Цвет</th><td style="background-color:white" /><th>Код</th><th>Цвет</th><td style="background-color:white" /><th>Код</th><th>Цвет</th><td style="background-color:white" /><th>Код</th><th>Цвет</th><td style="background-color:white" /><th>Код</th><th>Цвет</th><td style="background-color:white" /><th>Код</th><th>Цвет</th></tr>
</thead><tbody>
	<tr class="evn"><td class="mid"><code>\e[0m</code></td><td colspan="19">Цвет по умолчанию</td></tr>
	<tr class="odd"> <!-- black -->
		<td class="mid"><code>\e[0;30m</code></td><td style="color:#000">Black</td><td />
		<td class="mid"><code>\e[1;30m</code></td><td style="color:#555;font-weight:bold">BBlack</td><td />
		<td class="mid"><code>\e[4;30m</code></td><td style="color:#000;text-decoration:underline">UBlack</td><td />
		<td class="mid"><code>\e[40m</code></td><td style="background-color:#000;color:white">On_Black</td><td />
		<td class="mid"><code>\e[0;90m</code></td><td style="color:#555">IBlack</td><td />
		<td class="mid"><code>\e[1;90m</code></td><td style="color:#555;font-weight:bold">BIBlack</td><td />
		<td class="mid"><code>\e[0;100m</code></td><td style="background-color:#555;color:white">On_IBlack</td>
	</tr>
	<tr class="evn"> <!-- red -->
		<td class="mid"><code>\e[0;31m</code></td><td style="color:#b00">Red</td><td />
		<td class="mid"><code>\e[1;31m</code></td><td style="color:#f55;font-weight:bold">BRed</td><td />
		<td class="mid"><code>\e[4;31m</code></td><td style="color:#b00;text-decoration:underline">URed</td><td />
		<td class="mid"><code>\e[41m</code></td><td style="background-color:#b00;color:white">On_Red</td><td />
		<td class="mid"><code>\e[0;91m</code></td><td style="color:#f55">IRed</td><td />
		<td class="mid"><code>\e[1;91m</code></td><td style="color:#f55;font-weight:bold">BIRed</td><td />
		<td class="mid"><code>\e[0;101m</code></td><td style="background-color:#f55;color:white">On_IRed</td>
	</tr>
	<tr class="odd"> <!-- green -->
		<td class="mid"><code>\e[0;32m</code></td><td style="color:#0b0">Green</td><td />
		<td class="mid"><code>\e[1;32m</code></td><td style="color:#5f5;font-weight:bold">BGreen</td><td />
		<td class="mid"><code>\e[4;32m</code></td><td style="color:#0b0;text-decoration:underline">UGreen</td><td />
		<td class="mid"><code>\e[42m</code></td><td style="background-color:#0b0;color:white">On_Green</td><td />
		<td class="mid"><code>\e[0;92m</code></td><td style="color:#5f5">IGreen</td><td />
		<td class="mid"><code>\e[1;92m</code></td><td style="color:#5f5;font-weight:bold">BIGreen</td><td />
		<td class="mid"><code>\e[0;102m</code></td><td style="background-color:#5f5;color:white">On_IGreen</td>
	</tr>
	<tr class="evn"> <!-- yellow -->
		<td class="mid"><code>\e[0;33m</code></td><td style="color:#bb0">Yellow</td><td />
		<td class="mid"><code>\e[1;33m</code></td><td style="color:#ffff49;font-weight:bold">BYellow</td><td />
		<td class="mid"><code>\e[4;33m</code></td><td style="color:#bb0;text-decoration:underline">UYellow</td><td />
		<td class="mid"><code>\e[43m</code></td><td style="background-color:#bb0;color:white">On_Yellow</td><td />
		<td class="mid"><code>\e[0;93m</code></td><td style="color:#ffff49">IYellow</td><td />
		<td class="mid"><code>\e[1;93m</code></td><td style="color:#ffff49;font-weight:bold">BIYellow</td><td />
		<td class="mid"><code>\e[0;103m</code></td><td style="background-color:#ffff49;color:white">On_IYellow</td>
	</tr>
	<tr class="odd"> <!-- blue -->
		<td class="mid"><code>\e[0;34m</code></td><td style="color:#00b">Blue</td><td />
		<td class="mid"><code>\e[1;34m</code></td><td style="color:#55f;font-weight:bold">BBlue</td><td />
		<td class="mid"><code>\e[4;34m</code></td><td style="color:#00b;text-decoration:underline">UBlue</td><td />
		<td class="mid"><code>\e[44m</code></td><td style="background-color:#00b;color:white">On_Blue</td><td />
		<td class="mid"><code>\e[0;94m</code></td><td style="color:#55f">IBlue</td><td />
		<td class="mid"><code>\e[1;94m</code></td><td style="color:#55f;font-weight:bold">BIBlue</td><td />
		<td class="mid"><code>\e[0;104m</code></td><td style="background-color:#55f;color:white">On_IBlue</td>
	</tr>
	<tr class="evn"> <!-- purple -->
		<td class="mid"><code>\e[0;35m</code></td><td style="color:#b0b">Purple</td><td />
		<td class="mid"><code>\e[1;35m</code></td><td style="color:#f5f;font-weight:bold">BPurple</td><td />
		<td class="mid"><code>\e[4;35m</code></td><td style="color:#b0b;text-decoration:underline">UPurple</td><td />
		<td class="mid"><code>\e[45m</code></td><td style="background-color:#b0b;color:white">On_Purple</td><td />
		<td class="mid"><code>\e[0;95m</code></td><td style="color:#f5f">IPurple</td><td />
		<td class="mid"><code>\e[1;95m</code></td><td style="color:#f5f;font-weight:bold">BIPurple</td><td />
		<td class="mid"><code>\e[0;105m</code></td><td style="background-color:#f5f;color:white">On_IPurple</td>
	</tr>
	<tr class="odd"> <!-- cyan -->
		<td class="mid"><code>\e[0;36m</code></td><td style="color:#00bba1">Cyan</td><td />
		<td class="mid"><code>\e[1;36m</code></td><td style="color:#55ffdb;font-weight:bold">BCyan</td><td />
		<td class="mid"><code>\e[4;36m</code></td><td style="color:#00bba1;text-decoration:underline">UCyan</td><td />
		<td class="mid"><code>\e[46m</code></td><td style="background-color:#00bba1;color:white">On_Cyan</td><td />
		<td class="mid"><code>\e[0;96m</code></td><td style="color:#55ffdb">ICyan</td><td />
		<td class="mid"><code>\e[1;96m</code></td><td style="color:#55ffdb;font-weight:bold">BICyan</td><td />
		<td class="mid"><code>\e[0;106m</code></td><td style="background-color:#55ffdb;color:white">On_ICyan</td>
	</tr>
	<tr class="evn"> <!-- white -->
		<td class="mid"><code>\e[0;37m</code></td><td style="color:#bbb">White</td><td />
		<td class="mid"><code>\e[1;37m</code></td><td style="color:#fff;font-weight:bold">BWhite</td><td />
		<td class="mid"><code>\e[4;37m</code></td><td style="color:#bbb;text-decoration:underline">UWhite</td><td />
		<td class="mid"><code>\e[47m</code></td><td style="background-color:#bbb;color:white">On_White</td><td />
		<td class="mid"><code>\e[0;97m</code></td><td style="color:#fff">IWhite</td><td />
		<td class="mid"><code>\e[1;97m</code></td><td style="color:#fff;font-weight:bold">BIWhite</td><td />
		<td class="mid"><code>\e[0;107m</code></td><td style="background-color:#fff;color:#bbb">On_IWhite</td>
	</tr>
</tbody></table>
</html>
Сравнение файлов: vimdiff file1 file2 {{remark{(сопровождается цветовой подсветкой отличающихся мест)}}}.
Дружественный интерфейс vim: cream {{remark{(альтернативная команда введена для того, чтобы иметь доступ как к родному vim-интерфейсу, так и к переделанному)}}}.
Bells and whistles для vim: множество кем-то сделанных скриптов {{remark{(не установлено)}}}.
powerline -- строка состояния для многих приложений, в том числе и для vim.
exuberant-ctags (ctags) -- синтаксический анализатор для vi и emacsen (установлен).
----
ColorDiff
BleachBit -- удаление мусорных и временных файлов.
vifm -- файловый менеджер
kdesdk-scripts -- макросы для Qt
openshot -- видеоредактор для интернета и ютуба
VNC
|!Операция|!Командная строка|!Примечание|
|Обнуление первых четырёх секторов жёсткого диска|{{{# dd if=/dev/zero of=/dev/hdXX bs=512 count=4}}}|
|Посмотреть, вставилась ли флэшка|dmesg||
|Переключение между консолями|левый Alt-F1–Alt-F4|Alt-F1 — основная консоль, Alt-F4 — консоль ошибок|
|Установить компилятор gcc|{{{sudo apt-get install gcc}}}|
[[Документация по установке Debian]]
[[Установка Ubuntu]]
[[Установка Debian]]
+++![Apache »»][Apache ««]
''Папка по умолчанию:'' {{{/usr/local/apache2}}}
''Папка логов по умолчанию:'' {{{/var/log/apache}}}
!Сборка
{{{
./configure --enable-so // --prefix=/usr/local/apache2
make && make install
}}}
!Примечания:
# {{remark{если предыдущая установка не удалась, то можно очистить объектные и конфигурационные файлы сборки Apache командой {{{make clean}}}.}}}
# {{remark{В случае конфликтов при запуске проверить, что сидит на 80-м порту, можно командой {{{netstat -n -p -l}}}.}}}
===
+++![PHP »»][PHP ««]
http://www.linuxfromscratch.org/blfs/view/svn/general/php.html
''Папка по умолчанию:'' {{{/usr/local/php}}}
!Сборка
{{{
./configure --with-apx2=/usr/local/apache2/bin/apxs // --prefix=/usr/local/php --with-mysql=/usr/bin/mysql_config
make
make install
}}}
После правильной сборки в папке {{{/usr/local/apache2/modules}}} должен появиться файл {{{libphp5.so}}}.
===
+++![MySQL »»][MySQL ««]
Скачали deb-пакет, MySQL установился в папку /opt/mysql/server-5.6
/var/lib/mysql
Плюс для mysql понадобился пакет libaio

http://gahcep.github.io/blog/2013/03/11/linux-mysql-setup/
/usr/bin/mysqladmin -u root password 'new-password'  
/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'  

===
+++![apachetop, goaccess »»][apachetop, goaccess ««]
===
# Сначала проверил, чем отличаются варианты установки:
## Текстовая установка от графической установки отличается "видом буковок" и отсутствием мышки. Решил, что красивенькая графическая установка меня радовать будет больше {{remark{(хотя 60 герц частоты на моём CTX-е 795-м несколько напрягали)}}}
## Advanced install и Advanced Graphics Install решил пока не запускать. Пока несколько испугался размеров менюшки установки. Пока этот режим мне не по зубам...
# Комп назвал {{{WEB}}}, рабочую группу назвал {{{WORKGROUP}}}
# Так как ставил я Debian специально на чистый RAID на FastTrack TX4650, то драйвер контроллера с первого раза положить правильно на флэшку не удалось. Архивы .tgz и .tar, а также разархивированную {{remark{(бесплатным 7zip-ом)}}} папку tx4650 установщик не "скушал".
Настроить [[цветные приглашения консоли|Цветные приглашения консоли в Debian]].
+++![История команд root-а »»][История команд root-а ««]
{{{
apt-get install bind9
nano /etc/bind/named.conf.options
nano /etc/bind/named.conf

cd /srv/samba
chown nobody.nogroup /srv/samba/share

dpkg -a --configure
journalctl -xn
dmesg | tail
reiserfsck --check
apt-get install reiserfsck
apt-get install reiser*
apt-get install reiserfs
journalctl -xn

hdparm /dev/sdb
cd /dev
hdparm sda
blkid

service gdm stop
service gdm start
serivce gdm3 stop
service gdm3 start

systemctl status lightdm
lightdm stop
lightdm start
cd /var/log/lightdm
nano lightdm.log

apt-get update
su root
su wolf
su vmunt


touch /etc/samba/mksmbpasswd.sh
nano /etc/samba/mksmbpasswd.sh
chmod 700 mksmbpasswd.sh
cat /etc/passwd | /etc/samba/mksmbpasswd.sh > /etc/samba/psw
nano /etc/samba/psw
cp psw smbpasswd


mkdir /etc/samba/netlogon
group
cat /etc/group
cd /etc/samba
getent
getent passwd
getent group
getenv
users
groupadd office
getent group
exit
}}}
===
+++![Настройка компьютера (пользователи, папки, права) »»][Настройка компьютера (пользователи, папки, права) ««]
!!Команды
{{{
nano /etc/hostname
nano /etc/hosts
ping server
}}}
{{{
nano /etc/fstab
fdisk -l
mkdir /mnt/shared
umount sda3  ## storage
mount -a
}}}
{{{
touch /var/STORAGE
rm /var/STORAGE
mkdir /var/STORAGE
chmod 777 /var/STORAGE
chmod 777 /var/STORAGE/Документы/
cd /var/STORAGE
chmod -fR 777 *
}}}
+++!![Создание пользователей »»][Создание пользователей ««]
{{{
useradd natasha
passwd natasha
}}}
===
+++!![/etc/hostname »»][/etc/hostname ««]
{{{
SERVER
}}}
===
+++!![/etc/hosts »»][/etc/hosts ««]
{{{
127.0.0.1	localhost
127.0.1.1	SERVER.WORKGROUP	SERVER

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
}}}
===
+++!![/etc/passwd »»][/etc/passwd ««]
{{{
}}}
===
+++!![/etc/fstab »»][/etc/fstab ««]
{{{
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=585e7079-75a9-4114-a098-84e1a7dba53a /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda2 during installation
UUID=e75f29a7-bd10-46a9-9b3c-a193448d82f5 none            swap    sw              0       0
# /var was on /dev/sda3 during installation
UUID=a5bd0eee-2f34-42a1-90e5-9092af6571e8 /var           ext4    defaults        0       2
}}}
===
===
+++![Сервер Samba »»][Сервер Samba ««]
+++!![Удаление Samba »»][Удаление Samba ««]
{{{
apt-get purge samba
cd /etc/samba
rm -rF *  ## что-то из этого косяк Даниила (неверный набор)
rm -fR *
cd ..
rm -f /etc/samba
rm -R /etc/samba
apt-get purge smbd
cd /var/cache/samba
ls -l
cd ..
rm -fR samba

apt-get purge samba*
apt-get remove samba
shutdown -r
shutdown -r now
}}}
===
{{{
apt-get install samba smbclient samba-client samba-common system-config-samba
samba-common
nano /etc/samba/smb.conf
testparm
samba-tool domain provision --user-rfc2307 --interactive

service smbd restart
/etc/init.d/samba restart
/etc/init.d/smbd restart
/etc/init.d/nmbd restart
smbd
smbd restart
}}}
+++!![Добавление пользователей в списки доступа »»][Добавление пользователей в списки доступа ««]
{{{
useradd natasha
}}}
{{{
smbpasswd –a natasha
	New SMB password: ********
	Retype new SMB password:********
}}}
Make /etc/samba/smbpasswd file read-only
{{{
chmod 644 /etc/samba/smbpasswd
}}}
{{{
smbstatus
smbpasswd wolf
smbpasswd -e wolf[B
smbclient -L localhost -U
smbclient -L localhost -U vmunt
smbclient -L localhost -U
smbclient -L localhost -U%
}}}
===
+++!![samba-tool »»][samba-tool ««]
{{{
Main samba administration tool

Usage: samba-tool <subcommand>
Options:
  -h, --help       show this help message and exit
  -V, --version  Display version number
Available subcommands:
  dbcheck     - Check local AD database for errors.
  delegation  - Delegation management.
  dns         - Domain Name Service (DNS) management.
  domain      - Domain management.
  drs         - Directory Replication Services (DRS) management.
  dsacl       - DS ACLs manipulation.
  fsmo        - Flexible Single Master Operations (FSMO) roles management.
  gpo         - Group Policy Object (GPO) management.
  group       - Group management.
  ldapcmp     - Compare two ldap databases.
  ntacl       - NT ACLs manipulation.
  processes   - List processes (to aid debugging on systems without setproctitle).
  rodc        - Read-Only Domain Controller (RODC) management.
  sites       - Sites management.
  spn         - Service Principal Name (SPN) management.
  testparm    - Syntax check the configuration file.
  time        - Retrieve the time on a server.
  user        - User management.
  vampire     - Join and synchronise a remote AD domain to the local server.
For more help on a specific subcommand, please type: samba-tool <subcommand> (-h|--help)
}}}
===
+++!![/etc/samba/smb.conf »»][/etc/samba/smb.conf ««]
{{{
[global]
workgroup = WORKGROUP
# server string = Samba Server
netbios name = SERVER

security = user
encrypt passwords = yes

smb passwd file = /etc/samba/smbpasswd
log file = /var/log/samba/%m.log

os level = 65
domain master = no
domain logons = no
map to guest = never
wins support = no

[netlogon]
browseable = no
path = /etc/samba/netlogon
writable = no
public = no
root preexec = smbstatus | grep netlogin >> /var/log/samba/resurs
invalid users = nobody

[Storage]
comment = Хранилище файлов
path = /var/STORAGE
writable = YES  # replaced to "read only = No" (showed by testparm command)
browseable = yes
guest ok = No
create mask = 0777
directory mask = 0777

[Distr]
# comment = SETUP
path = /var/DISTR
writable = yes
public = yes
guest ok = no
}}}
===
+++!![/etc/samba/smbusers »»][/etc/samba/smbusers ««]
{{{
# Unix_name = SMB_name1 ...
wolf = wolf
}}}
===
+++!![/etc/samba/smbpasswd »»][/etc/samba/smbpasswd ««]
{{{
nobody:65534:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:nobody
vmunt:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:vmunt,,,
wolf:1001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
daniil:1002:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
}}}
===
+++!![/var/log/samba/smbd.log »»][/var/log/samba/smbd.log ««]
{{{
[2016/10/28 16:57:16.351923,  0] ../lib/util/become_daemon.c:124(daemon_ready)
  STATUS=daemon 'smbd' finished starting up and ready to serve connections
Unable to connect to CUPS server localhost:631 - Неправильный дескриптор файла
failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
Unable to connect to CUPS server localhost:631 - Неправильный дескриптор файла
failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
Unable to connect to CUPS server localhost:631 - Неправильный дескриптор файла
failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
[2016/10/28 16:57:21.541993,  0] ../lib/util/pidfile.c:153(pidfile_unlink)
  Failed to delete pidfile /var/run/samba/smbd.pid. Error was Нет такого файла или каталога
}}}
===
+++!![/var/log/samba/nmbd.log »»][/var/log/samba/nmbd.log ««]
{{{
[2016/10/31 11:07:19.343700,  0] ../lib/util/become_daemon.c:124(daemon_ready)
  STATUS=daemon 'nmbd' finished starting up and ready to serve connections
[2016/10/31 11:12:12.169783,  0] ../source3/nmbd/nmbd.c:169(nmbd_sig_hup_handler)
  Got SIGHUP dumping debug info.
[2016/10/31 11:12:12.169872,  0] ../source3/nmbd/nmbd_workgroupdb.c:276(dump_workgroups)
  dump_workgroups()
   dump workgroup on subnet    192.168.0.16: netmask=  255.255.255.0:
  	WORKGROUP(1) current master browser = SHIHARBEEVA
  		SERVER 40819a03 (Samba Server)
  		SHIHARBEEVA 40051203 ()
[2016/10/31 18:45:32.635710,  0] ../source3/nmbd/nmbd_become_lmb.c:397(become_local_master_stage2)
  *****
  
  Samba name server SERVER is now a local master browser for workgroup WORKGROUP on subnet 192.168.0.16
  
  *****
[2016/11/22 13:14:44.615919,  0] ../source3/nmbd/nmbd.c:169(nmbd_sig_hup_handler)
  Got SIGHUP dumping debug info.
[2016/11/22 13:14:44.616008,  0] ../source3/nmbd/nmbd_workgroupdb.c:276(dump_workgroups)
  dump_workgroups()
   dump workgroup on subnet    192.168.0.16: netmask=  255.255.255.0:
  	WORKGROUP(1) current master browser = UNKNOWN
  		SERVER 40819a03 (Samba Server)
[2016/11/22 13:28:23.192123,  0] ../lib/util/become_daemon.c:124(daemon_ready)
  STATUS=daemon 'nmbd' finished starting up and ready to serve connections
}}}
===
===
+++![Протокол авторизации Windows (Kerberos) »»][Протокол авторизации Windows (Kerberos) ««]
{{{
apt-get purge krb-user krb krb5-user krb5
apt-get install krb5-user winbind
nano /etc/krb5.conf
}}}
+++!![/etc/krb5.conf »»][/etc/krb5.conf ««]
{{{
[libdefaults]
	default_realm = SERVER.WORKGROUP
	dns_lookup_realm = false
	dns_lookup_kdc = true
	kdc_timesync = 1
	ccache_type = 4
	forwardable = true
	proxiable = true
	v4_instance_resolve = false
	v4_name_convert = {
		host = {
			rcmd = host
			ftp = ftp
		}
		plain = {
			something = something-else
		}
	}
	fcc-mit-ticketflags = true

[realms]
	SERVER.WORKGROUP = {
		default_domain = server.workgroup
		kdc = server.workgroup
		admin_server = server.workgroup
	}

[login]
	krb4_convert = false
	krb4_get_tickets = false

[domain_realm]
	server.workgroup = SERVER.WORKGROUP
	.server.workgroup = SERVER.WORKGROUP
}}}
===
===
/etc/bind/named.conf
/etc/bind/named.conf.options
/var/log/lightdm/lightdm.log
/var/log/samba/webdev.log
/var/log/samba/smbd.log

+++![Вспомогательные команды »»][Вспомогательные команды ««]
{{{
ls -l
ls -acL
cat smb.conf
nano ~/.bash_history
}}}
{{{
top
iotop
atop
}}}
{{{
whoami  ## текущий логин (root)
who  ## первый логин? (vmunt    pts/0        2016-11-28 13:16 (192.168.0.200))
}}}
!!Состояние сервисов
{{{
systemctl
systemctl status
systemctl status smbd.service
systemctl -l status sm
}}}
+++!![Нерабочие команды »»][Нерабочие команды ««]
{{{
kinit vmunt@Server
kinit vmunt@SERVER
kinit vmunt@SERVER.WORKGROUP
klist
}}}
===
===
!Сообщение о подготовке базы данных для журналирования с помощью snort-mysql
Для журналирования snort не хватает настроенной базы данных. Перед тем, как продолжить, проверьте:
* имя машины-сервера {{remark{(этот сервер должен принимать TCP-соединения с этой машины)}}}
* базу данных на этом сервере
* имя пользователя и пароль для доступа к базе данных
Если не хватает хотя бы одного параметра, ответьте отрицательно и включите поддержку журналирования в обычный файл.
Журналирование в базу данных можно настроить позже с помощью команды {{{dpkg-reconfigure -plow snort-mysql}}}
<html>
<p class="remark">Пошаговый алгоритм, который использовал Женя.</p>

<ul>
  <li>Команды поиска в гугле:
<pre>
Как установить USB-сканер в Linux Mint
Как установить USB-сканер Acer в Linux Mint
Как установить USB-сканер Acer 640BU в Linux Mint
</pre>
Ресурсы, найденные с помощью гугла:<br />
<a href="http://www.buzzard.me.uk/jonathan/scanners-usb.html">USB Scanners under Linux</a><br />
<a href="http://snapscan.sourceforge.net">SnapScan Backend for SANE</a><br />
<a href="http://libusb.info">libusb</a><br />
<a href="http://ubuntuforums.org/archieve/index.php/t-26911.html">HOWTO: Epson Perfection 1670 Scanner (and other SnapScan scanners) [Archieve]</a>
</li>

  <li>Ранешные команды:
<pre>
sane-find-scanner
</pre>
</li>

  <li>Смотрим, как работать с командой <code>scanimage</code>:
<pre>
# scanimage --help
</pre>
</li>

  <li>Подключаем сканер, командой <code>lsusb</code> смотрим, распознал ли его Linux:
<pre>
# lsusb
...
Bus 003 Device 011: ID 04a5:207e Acer Peripherials Inc. (now BenQ Corp.) Prisa 640BU
...
</pre>Распознал.</li>

  <li>Командой <code>lsmod</code> смотрим, установлен ли модуль <span class="remark">(драйвер)</span> для сканера. Ничего похожего не видим. Должны были увидеть что-то похожее на <code>sane</code>, видимо <span class="remark">(стандартный модуль поддержки сканеров в Linux)</span>.</li>

  <li>Командой <code>aptitude search sane</code> смотрим, что установлено из комплекта драйвера. Видим, что ранее с помощью программы <code>synaptic</code> установлено уже много всего, в том числе и сам <code>sane</code>.</li>

  <li>Непонятные действия: командами просмотра подключенных устройств добираемся до устройства Acer 640BU:
<pre>
# ls /dev
# ls /dev/bus/usb
</pre>
и почему-то после команды:
<pre>
# ls /dev/bus/usb/001/001
</pre>
видим распечатку какой-то home-папки <span class="remark">(папки Документы, Рабочий стол, Загрузки, и так далее)</span>. Затем идут команды:
<pre>
# rmmod scanner
ERROR: Module scanner not found.

# lsmod | grep scan
<пусто>

# aptitude search scan
<много всего>

# sc <tab> scan <tab>
<видим две доступные команды: scanadf и scanimage>

# scanimage
[snapscan] Cannot open firmware file /usr/share/sane/snapscan/your-firmwarefile.bin.
[snapscan] Edit the firmware file entry in snapscan.conf.
scanimage: open of device snapscan:libusb:003:011 failed: Invalid argument

# scanimage -L
device `snapscan:libusb:003:011' is a Acer FlatbedScanner13 flatbed scanner
</pre>
Программа <code>scanimage</code> распознаёт сканер как сканер, но работать с ним не может.</li>

  <li>Смотрим конфиги <code>sane</code>:
<pre>
# ls /etc/sane.d
</pre>
и проверяем файлы <code>abaton.conf</code>, <code>mustek_usb.conf</code>, <code>saned.conf</code>, <code>snapscan.conf</code> командами вида:
<pre>
# nano /etc/sane.d/snapscan.conf
</pre>
</li>

  <li>Скачиваем и разархивируем драйвер Acer ScanPrisa 640BU для Windows XP, копируем бинарный файл в папку <code>/usr/share/sane</code>:
<pre>
# cp /media/vmunt/QUMO/U126V043.BIN /usr/share/sane
</pre>
проверяем:
<pre>
# ls /usr/share/sane/U126V043.BIN
/usr/share/sane/U126V043.BIN
</pre>
</li>

  <li>Смотрим файл /etc/sane.d/snapscan.conf:
<pre>
# nano /etc/sane.d/scnapscan.conf
</pre>
видим там строчку:
<pre>
# Benq/Acer/Vuego 640BU
usb 0x04a5 0x207e
</pre>
которая совпадает с ранешной строчкой из lsusb. Выходим.<li>

  <li>Команда <code>scanimage</code> начинает вести себя по-другому:
<pre>
# scanimage
[snapscan] Scanner warming up - waiting 28 seconds.
scanimage: output is not a file, exiting
</pre>
</li>

  <li>Далее просто идём в GIMP, проверяем, что <code>xsane</code> успешно работает и сканирует изображения.</li>
<ul>
</html>
|sortable|k
|!Категория|!Название<br>{{{(пакет)}}}|!Назначение, примечание, комментарий|h
|Файловые оболочки|TUX Commander<br>([[tuxcmd|Пакет TUX Commander]])|Замена жуткому {{{mc}}}. Умеет показывать скрытые файлы {{remark{(меню Вид)}}}|
|Файловые оболочки|GNOME Commander<br>([[gnome-commander|Пакет GNOME Commander]]) |Вроде как должен уметь работать напрямую с samba, но пока только говорит, что «модуль smb не установлен»|
|Сеть|Samba<br>([[smb|Пакет Samba]]) |По идее надо бы настроить, чтобы в расшаренные папки из сети анонимусы записывали файлы с атрибутом rw-rw-rw|
|Сеть|[[system-config-samba|Пакет system-config-samba]]|Пакет графической настройки сервера Samba {{remark{(управления доступом к ресурсам компьютера)}}}. Создаёт пункт меню {{{Параметры / Администрирование / Samba}}}|
|Сеть|ppp|Подключение по протоколу PPPoE?|
|Сеть|dhcp|Поддержка DHCP-сервера {{remark{(автоматической раздачи IP-адресов в локальной сети)}}}|
|Сеть|bind|Управление именами компьютеров в сети|
|Графические приложения|InkScape||
|Графические приложения|GIMP||
|Системные программы|VirtualBox|Дополнения поддержки разных операционных систем — пакет {{{virtualbox-guest-additions}}}|
|Системные программы|Wine||
|Системные программы|Baobab|Анализатор использования диска {{remark{(подсчитывает размеры папок)}}}|
|Пользовательские программы|dict|Оболочка для словаря. Как пользоваться — непонятно|
|Восстановление данных|[[scalpel|Пакет scalpel]]|Утилита командной строки для извлечения с устройства или из образа диска файлов по формату с помощью полнодискового поиска. Клон {{remark{(улучшение)}}} [[foremost|Пакет foremost]]|
|Восстановление данных|[[foremost|Пакет foremost]]|Утилита командной строки для извлечения с устройства или из образа диска файлов по формату с помощью полнодискового поиска|
|Восстановление данных|[[recoverjpeg|Пакет recoverjpeg]]|Утилита командной строки для извлечения с устройства или из образа диска файлов JPEG|
|Тренажёр клавиатуры|Non-linear keyboard trainer<br>([[nlkt|Пакет nlkt]]) |Тренажёр клавиатуры, основанный на генерации случайной последовательности символов|
|Тренажёр клавиатуры|[[klavaro|Пакет klavaro]]|Многоязычный тренажёр клавиатуры, построенный на уроках, сгруппированных в несколько уровней сложности|
|Захват экрана|xvidcap|Захват видео с экрана X Window. Устанавливается по умолчанию в меню Аудио и видео|
|Захват экрана|recordmydesktop|Захват полного или части экрана в ogg-vorbis|
|Запись видео|dvr|Захват видео с плат видеозахвата|
|Видеоредактор|pitivi|Видеоредактор. Установлен по умолчанию|
|Видеоредактор|avidemux|Не пробовал пока|
|Видеоредактор|OpenShot|Не пробовал. Устанавливается в {{{Приложения / Аудио и видео}}}|
|Видеоредактор|mjpertools|Захват, редактирование и просмотр видео|
|Видеопроигрыватель|vlc|Устанавливается по умолчанию в меню Аудио и видео|
|Видеопроигрыватель|totem|Устанавливается по умолчанию в меню Аудио и видео с именем пункта меню Видеопроигрыватель. Переименовал в «Видеопроигрыватель totem»|
|Видеопроигрыватель|Banshee|Устанавливается по умолчанию|
|Сервер|wu-ftpd<br>{{{(ftpd)}}}|FTP-сервер|
|Сервер|NFS|Сетевой доступ к файлам?|
|Сервер|squid|Прокси-сервер {{remark{(кэширование интернет-ресурсов)}}}|
|Сервер|routed|Маршрутизация|
|Сервер|sendmail|Обмен сообщениями электронной почты|
|Сервер|imap|Обмен сообщениями электронной почты|
|Сервер|IPChains|Биллинг {{remark{(учёт трафика)}}}, файрвол {{remark{(фильтрация пакетов и защита сети)}}}, NAT?|
|Сервер|lpd|Сервер печати|
|Сервер|CUPS|Сервер печати|
|Сервер|[[apache|Пакет apache]]|Веб-сервер|
|Читалки FB2|tea|Текстовый редактор с подсветкой синтаксиса и с поддержкой формата FB2. Устанавливается в {{{Приложения / Стандартные / TEA Text Editor}}}|
|Читалки FB2|fbreader|Устанавливается в {{{Приложения / Офис / Чтение электронных книг}}}|
|!Название|!Назначение|!Примечание|
|fips|Утилита разбиения дисков|FTP-сервера Debian, каталог tools|
|mount|Монтирование устройство|{{{$ mount /dev/hdc /cdrom}}} {{remark{(монтирование CD-ROM-а вручную)}}}<br>{{{mount -t vbox_sf share_name mount point}}} {{remark{(монтирование томов DRIVE_C и DRIVE_D в VirtualBox}}}|
|blender|Аналог 3D Studio Max|
|>|>|!!Рекомендации Ubuntu при установке|
|Stellarium|Карта звёздного неба||
|Frozen Bubble|Видимо, игрушка||
|Shotwell|Менеждер фотографий||
|Pitivi|Видеоредактор||
|Banshee|Музыкальный редактор||
|Empathy|Клиент мгновенных изображений||
|LibreOffice||
|Tomboy|Заметки||
{{author{Кутищев Александр Александрович (Пермский университет, raven)}}}

dev, etc, var, usr

i-node (идентификатор файла, а в файловой системе на этот i-node уже ссылаются или hardlink-ами, или softlink-ами. Переименование файла на i-node не влияет)
Есть ещё аппаратные файлы, pipe-ы
hardlink - ссылка на i-node
softlink - ссылка на имя файла

dev бывают символьные, блочные и потоковые {{remark{}}}
В dev есть префикс c (char) для символьных устройств, b (block) для блочных устройств. Потоковые устройства в dev отсутствуют

ls -s /proc

mount - просто показать смотнированные файловые системы

df -k - Посмотреть размеры файловой системы\

/dev/sda1 - процент заполнения root-а если больше 90%, то резко начинает падать производительность (экспоненциально)

var и home рекомендуется выносить в отдельные файловые системы

var занимает (для старта системы достаточно 70-80 мегабайт). Пользователи с почтовыми ящиками идут туда же. Логи по умолчанию кладутся в var, веб-сервер кладётся в var, 

usr - du -ks /usr (посчитать в 
в usr лежат библиотеки, man-ы

/usr/local - кладутся всякие сторонние программы

df - 
du - disk usage - 
Это две команды для определения размеров файлов в папках
DIR-ами можно смотреть, что в каждой папке лежит, и 

xfs хороша для маленьких файлов
jfs - для больших
reiserfs - промежуточная

корень и tmo 386
user 286
var 1,2 Gb
home 286 Mb

В чистом home нет ничего, так как у root-а свой каталог, а в home появятся папки только при создании пользователей

swap - можно временно увеличить временным файлом на диске
swap обычно выбирается 2 размера озу. Чем больше ОЗУ, тем меньше можно выбирать swap
Как-то можно попробовать настроить место хранения hibernate
ext2 - нежурналируемая
ext3 получается из ext2 складыванием в корень файла журнала
ext4 переработана

Таблица i-node может быть увеличена в процессе работы, и можно для неё сделать несколько копий.
i-node при удалении файлов освобождаются, поэтому при быстром создании нового файла бывает 
lost+found - аналог папок FOUND.000

bsd и solaris многозадачные процессы обрабатывают чуток лучше linux-а, потому что в linux-е каждый thread порождает новый процесс, а в unix-ах thread-ы живут внутри одного процесса.

10-15 X-Terminal-ов забивают 10-мегабитную сеть только своим трафиком

NFS - network file system - сетевая файловая система

Служба automount - аналог перемещаемых профилей?

NFS поддерживает права, доступы и квоты.

RPC - rpcbin portmap nfs nfsd

intuit.ru - в системном администрировании Solaris10 расписаны порты. по которым работают 

showmount -

Служба automount - аналог перемещаемых профилей?
automount - переносимые рабочие столы и домашние каталоги
Бездисковые рабочие станции под windows-ом невозможны, а под unix-ами сетевое хранилище - нормальное дело...

lsof
fuser
Это команды, которые выводят информацию о том, кто использует (заблокировал) данный файл

ls /tmp
ls -F /tmp

kill -9
kill -19

openSolaris и Solaris для работы DNS-ом оченно неплох

Буферизацию где-то в NFS надо настроить, 

NFS поддерживают шифрование SSL
NFS умеет работать через SSH

IPSec - тоже секретный протокол, который можно использовать как транспорт для NFS

HDD Regenerator

BSOD - unmountable, 

fsck File system check
Монтирование файловой системы для записи - будет ошибка при контроле, если будут изменения

etc - в ней хранится параметры файловой системы.
PGP - был backdoor




Какими программами восстанавливается порушенная файловая система
Как выглядят X-терминалы?
{{remark{''Примечание:'' Вид приглашения настраивается в файле {{{~/.bashrc}}}, правка файла: {{{nano ~/.bashrc}}}, применение изменений: {{{source ~/.bashrc}}}, список цветов можно посмотреть [[тут|Таблица цветов в Bash]].}}}
!!Пользовательское приглашение {{remark{(вариант 1)}}}
user: login - green (32), folder - cyan (36), $ - margenta (35)
<html>
<pre style="float:right;padding:1em 2em;background-color:white;color:green;font-family:arial,​helvetica,sans-serif">
<span style="color:green">user_login</span>
</pre>
<pre style="float:right;padding:1em 2em;background-color:black;color:lightgreen;margin-left:8px;font-family:arial,​helvetica,sans-serif">
<span style="color:green">user_login</span>
</pre>
<pre style="padding-top:1em;padding-bottom:1em;font-family:arial,​helvetica,sans-serif">
PS1='${debian_chroot:+($debian_chroot)}<span style="font-weight:bold">\[</span><span style="color:green">\033[32m</span><span style="font-weight:bold">\]</span>\u@\h<span style="font-weight:bold">\[</span>\033[00m<span style="font-weight:bold">\]</span>:<span style="font-weight:bold">\[</span>\033[36m<span style="font-weight:bold">\]</span>\w<span style="font-weight:bold">\[</span>\033[35m<span style="font-weight:bold">\]</span>\$<span style="font-weight:bold">\[</span>\033[00m<span style="font-weight:bold">\]</span> '
</pre>
</html>root: login - lt green (32;1), folder - lt cyan (36;1), $# - lt red (31;1)
{{{
PS1='${debian_chroot:+($debian_chroot)}\[\033[32;1m\]\u@\h\[\033[00m\]:\[\033[36;1m\]\w\[\033[31;1m\]\$\[\033[00m\] '
}}}
!!Пользовательское приглашение {{remark{(вариант 2)}}}
{{{
PS1='${debian_chroot:+($debian_chroot)}\e[33m\u\e[1;30m@\e[0;32m\h\e[1;30m:\e[0;36m\w\e[1;30m\$\e[0m '
}}}
!!Администраторское приглашение {{remark{(вариант 2)}}}
{{{
PS1='${debian_chroot:+($debian_chroot)}\e[31;1m\u\e[0;33m@\e[32m\h\e[33m:\e[36;1m\w\e[0;33m\$\e[0m '
}}}
!!!с подчёркиванием имени {{{root}}}
{{{
PS1='${debian_chroot:+($debian_chroot)}\e[91;4m\u\e[0;33m@\e[32m\h\e[33m:\e[36;1m\w\e[0;33m\$\e[0m '
}}}
Код включения:
{{{
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
# vmunt: uncommening

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
	# We have color support; assume it's compliant with Ecma-48
	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
	# a case would tend to support setf rather than setaf.)
	color_prompt=yes
    else
	color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
#	PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
	PS1='${debian_chroot:+($debian_chroot)}\[\033[32m\]\u@\h\[\033[00m\]:\[\033[36m\]\w\[\033[35m\]\$\[\033[00m\] '
	# vmunt: login - green (32), folder - cyan (36), $ - margenta (35)
else
	PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
}}}
{{remark{''Примечание'': Применить изменение без перезапуска сессии: {{{source ~/.bashrc}}}.}}}
!!Белая командная строка (магия)
user: login - green (32), folder - cyan (36), $ - margenta (35), командная строка - lt white (37;1)
{{{
PS1='${debian_chroot:+($debian_chroot)}\[\e[32m\]\u@\h\[\e[00m\]:\[\e[36m\]\w\[\e[35m\]\$\[\e[37;1m\] '
trap 'printf "\e[0m" "$_"' DEBUG
}}}
root: login - lt green (32;1), folder - lt cyan (36;1), $# - lt red (31;1), командная строка - lt white (37;1)
{{{
PS1='${debian_chroot:+($debian_chroot)}\[\e[32;1m\]\u@\h\[\e[00m\]:\[\e[36;1m\]\w\[\e[31;1m\]\$\[\e[37;1m\] '
trap 'printf "\e[0m" "$_"' DEBUG
}}}
См.также: [[Литеральные последовательности в Bash]], [[ESCAPE-последовательности в Bash]], [[Таблица цветов в Bash]].
[[Подключение сетевых папок (диалог на Тероне)]]
Веб-серверы -- inetd и xinetd
fips -- Изменение размера раздела?
Варианты установки Red Hat
|Workstation|64Mb — swap, 16Mb — boot, остальное — root|
|Server|64Mb — swap, 256Mb — root, 512Mb — /usr, 512Mb — /home, 256Mb — /var {{remark{(итого около 1,6Gb дискового пространства)}}}|
TrueCrypt - шифрование дисков целиком или отдельных криптоконтейнером

Есть Стандартный криптоконтейнер и Скрытый криптоконтейнер {{remark{(два криптораздела с двумя разными паролями)}}}

Монтирование TrueCrypt-дисков делается в самом интерфейсе TrueCrypt и подключается в папку media
Также работает из командной строки. Можно также зашифровать образ диска с Windows-ом