Music production session manager https://www.laborejo.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1255 lines
63KB

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta name="generator" content="Asciidoctor 2.0.10">
  8. <meta name="author" content="Laborejo Software Suite">
  9. <title>Agordejo</title>
  10. <style>
  11. /* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
  12. /* Uncomment @import statement to use as custom stylesheet */
  13. /*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
  14. article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
  15. audio,video{display:inline-block}
  16. audio:not([controls]){display:none;height:0}
  17. html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
  18. a{background:none}
  19. a:focus{outline:thin dotted}
  20. a:active,a:hover{outline:0}
  21. h1{font-size:2em;margin:.67em 0}
  22. abbr[title]{border-bottom:1px dotted}
  23. b,strong{font-weight:bold}
  24. dfn{font-style:italic}
  25. hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
  26. mark{background:#ff0;color:#000}
  27. code,kbd,pre,samp{font-family:monospace;font-size:1em}
  28. pre{white-space:pre-wrap}
  29. q{quotes:"\201C" "\201D" "\2018" "\2019"}
  30. small{font-size:80%}
  31. sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
  32. sup{top:-.5em}
  33. sub{bottom:-.25em}
  34. img{border:0}
  35. svg:not(:root){overflow:hidden}
  36. figure{margin:0}
  37. fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
  38. legend{border:0;padding:0}
  39. button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
  40. button,input{line-height:normal}
  41. button,select{text-transform:none}
  42. button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
  43. button[disabled],html input[disabled]{cursor:default}
  44. input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
  45. button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
  46. textarea{overflow:auto;vertical-align:top}
  47. table{border-collapse:collapse;border-spacing:0}
  48. *,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
  49. html,body{font-size:100%}
  50. body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
  51. a:hover{cursor:pointer}
  52. img,object,embed{max-width:100%;height:auto}
  53. object,embed{height:100%}
  54. img{-ms-interpolation-mode:bicubic}
  55. .left{float:left!important}
  56. .right{float:right!important}
  57. .text-left{text-align:left!important}
  58. .text-right{text-align:right!important}
  59. .text-center{text-align:center!important}
  60. .text-justify{text-align:justify!important}
  61. .hide{display:none}
  62. img,object,svg{display:inline-block;vertical-align:middle}
  63. textarea{height:auto;min-height:50px}
  64. select{width:100%}
  65. .center{margin-left:auto;margin-right:auto}
  66. .stretch{width:100%}
  67. .subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
  68. div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
  69. a{color:#2156a5;text-decoration:underline;line-height:inherit}
  70. a:hover,a:focus{color:#1d4b8f}
  71. a img{border:0}
  72. p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
  73. p aside{font-size:.875em;line-height:1.35;font-style:italic}
  74. h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
  75. h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
  76. h1{font-size:2.125em}
  77. h2{font-size:1.6875em}
  78. h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
  79. h4,h5{font-size:1.125em}
  80. h6{font-size:1em}
  81. hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
  82. em,i{font-style:italic;line-height:inherit}
  83. strong,b{font-weight:bold;line-height:inherit}
  84. small{font-size:60%;line-height:inherit}
  85. code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
  86. ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
  87. ul,ol{margin-left:1.5em}
  88. ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
  89. ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
  90. ul.square{list-style-type:square}
  91. ul.circle{list-style-type:circle}
  92. ul.disc{list-style-type:disc}
  93. ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
  94. dl dt{margin-bottom:.3125em;font-weight:bold}
  95. dl dd{margin-bottom:1.25em}
  96. abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
  97. abbr{text-transform:none}
  98. blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
  99. blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
  100. blockquote cite::before{content:"\2014 \0020"}
  101. blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
  102. blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
  103. @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
  104. h1{font-size:2.75em}
  105. h2{font-size:2.3125em}
  106. h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
  107. h4{font-size:1.4375em}}
  108. table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
  109. table thead,table tfoot{background:#f7f8f7}
  110. table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
  111. table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
  112. table tr.even,table tr.alt{background:#f8f8f7}
  113. table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
  114. h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
  115. h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
  116. .clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
  117. .clearfix::after,.float-group::after{clear:both}
  118. :not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
  119. :not(pre)>code.nobreak{word-wrap:normal}
  120. :not(pre)>code.nowrap{white-space:nowrap}
  121. pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
  122. pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
  123. pre>code{display:block}
  124. pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
  125. em em{font-style:normal}
  126. strong strong{font-weight:400}
  127. .keyseq{color:rgba(51,51,51,.8)}
  128. kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
  129. .keyseq kbd:first-child{margin-left:0}
  130. .keyseq kbd:last-child{margin-right:0}
  131. .menuseq,.menuref{color:#000}
  132. .menuseq b:not(.caret),.menuref{font-weight:inherit}
  133. .menuseq{word-spacing:-.02em}
  134. .menuseq b.caret{font-size:1.25em;line-height:.8}
  135. .menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
  136. b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
  137. b.button::before{content:"[";padding:0 3px 0 2px}
  138. b.button::after{content:"]";padding:0 2px 0 3px}
  139. p a>code:hover{color:rgba(0,0,0,.9)}
  140. #header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
  141. #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
  142. #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
  143. #content{margin-top:1.25em}
  144. #content::before{content:none}
  145. #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
  146. #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
  147. #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
  148. #header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
  149. #header .details span:first-child{margin-left:-.125em}
  150. #header .details span.email a{color:rgba(0,0,0,.85)}
  151. #header .details br{display:none}
  152. #header .details br+span::before{content:"\00a0\2013\00a0"}
  153. #header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
  154. #header .details br+span#revremark::before{content:"\00a0|\00a0"}
  155. #header #revnumber{text-transform:capitalize}
  156. #header #revnumber::after{content:"\00a0"}
  157. #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
  158. #toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
  159. #toc>ul{margin-left:.125em}
  160. #toc ul.sectlevel0>li>a{font-style:italic}
  161. #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
  162. #toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
  163. #toc li{line-height:1.3334;margin-top:.3334em}
  164. #toc a{text-decoration:none}
  165. #toc a:active{text-decoration:underline}
  166. #toctitle{color:#7a2518;font-size:1.2em}
  167. @media screen and (min-width:768px){#toctitle{font-size:1.375em}
  168. body.toc2{padding-left:15em;padding-right:0}
  169. #toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
  170. #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
  171. #toc.toc2>ul{font-size:.9em;margin-bottom:0}
  172. #toc.toc2 ul ul{margin-left:0;padding-left:1em}
  173. #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
  174. body.toc2.toc-right{padding-left:0;padding-right:15em}
  175. body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
  176. @media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
  177. #toc.toc2{width:20em}
  178. #toc.toc2 #toctitle{font-size:1.375em}
  179. #toc.toc2>ul{font-size:.95em}
  180. #toc.toc2 ul ul{padding-left:1.25em}
  181. body.toc2.toc-right{padding-left:0;padding-right:20em}}
  182. #content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
  183. #content #toc>:first-child{margin-top:0}
  184. #content #toc>:last-child{margin-bottom:0}
  185. #footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
  186. #footer-text{color:rgba(255,255,255,.8);line-height:1.44}
  187. #content{margin-bottom:.625em}
  188. .sect1{padding-bottom:.625em}
  189. @media screen and (min-width:768px){#content{margin-bottom:1.25em}
  190. .sect1{padding-bottom:1.25em}}
  191. .sect1:last-child{padding-bottom:0}
  192. .sect1+.sect1{border-top:1px solid #e7e7e9}
  193. #content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
  194. #content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
  195. #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
  196. #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
  197. #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
  198. details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
  199. details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
  200. .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
  201. table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
  202. .paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
  203. table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
  204. .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
  205. .admonitionblock>table td.icon{text-align:center;width:80px}
  206. .admonitionblock>table td.icon img{max-width:none}
  207. .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
  208. .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
  209. .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
  210. .exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
  211. .exampleblock>.content>:first-child{margin-top:0}
  212. .exampleblock>.content>:last-child{margin-bottom:0}
  213. .sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
  214. .sidebarblock>:first-child{margin-top:0}
  215. .sidebarblock>:last-child{margin-bottom:0}
  216. .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
  217. .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
  218. .literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
  219. @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
  220. @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
  221. .literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
  222. .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
  223. .listingblock>.content{position:relative}
  224. .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
  225. .listingblock:hover code[data-lang]::before{display:block}
  226. .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
  227. .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
  228. .listingblock pre.highlightjs{padding:0}
  229. .listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
  230. .listingblock pre.prettyprint{border-width:0}
  231. .prettyprint{background:#f7f7f8}
  232. pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
  233. pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
  234. pre.prettyprint li code[data-lang]::before{opacity:1}
  235. pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
  236. table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
  237. table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
  238. table.linenotable td.code{padding-left:.75em}
  239. table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
  240. pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
  241. pre.pygments .lineno::before{content:"";margin-right:-.125em}
  242. .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
  243. .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
  244. .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
  245. .quoteblock blockquote{margin:0;padding:0;border:0}
  246. .quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
  247. .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
  248. .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
  249. .verseblock{margin:0 1em 1.25em}
  250. .verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
  251. .verseblock pre strong{font-weight:400}
  252. .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
  253. .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
  254. .quoteblock .attribution br,.verseblock .attribution br{display:none}
  255. .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
  256. .quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
  257. .quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
  258. .quoteblock.abstract{margin:0 1em 1.25em;display:block}
  259. .quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
  260. .quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
  261. .quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
  262. .quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
  263. .quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
  264. table.tableblock{max-width:100%;border-collapse:separate}
  265. p.tableblock:last-child{margin-bottom:0}
  266. td.tableblock>.content>:last-child{margin-bottom:-1.25em}
  267. td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
  268. table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
  269. table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
  270. table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
  271. table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
  272. table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
  273. table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
  274. table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
  275. table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
  276. table.frame-all{border-width:1px}
  277. table.frame-sides{border-width:0 1px}
  278. table.frame-topbot,table.frame-ends{border-width:1px 0}
  279. table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
  280. th.halign-left,td.halign-left{text-align:left}
  281. th.halign-right,td.halign-right{text-align:right}
  282. th.halign-center,td.halign-center{text-align:center}
  283. th.valign-top,td.valign-top{vertical-align:top}
  284. th.valign-bottom,td.valign-bottom{vertical-align:bottom}
  285. th.valign-middle,td.valign-middle{vertical-align:middle}
  286. table thead th,table tfoot th{font-weight:bold}
  287. tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
  288. tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
  289. p.tableblock>code:only-child{background:none;padding:0}
  290. p.tableblock{font-size:1em}
  291. ol{margin-left:1.75em}
  292. ul li ol{margin-left:1.5em}
  293. dl dd{margin-left:1.125em}
  294. dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
  295. ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
  296. ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
  297. ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
  298. ul.unstyled,ol.unstyled{margin-left:0}
  299. ul.checklist{margin-left:.625em}
  300. ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
  301. ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
  302. ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
  303. ul.inline>li{margin-left:1.25em}
  304. .unstyled dl dt{font-weight:400;font-style:normal}
  305. ol.arabic{list-style-type:decimal}
  306. ol.decimal{list-style-type:decimal-leading-zero}
  307. ol.loweralpha{list-style-type:lower-alpha}
  308. ol.upperalpha{list-style-type:upper-alpha}
  309. ol.lowerroman{list-style-type:lower-roman}
  310. ol.upperroman{list-style-type:upper-roman}
  311. ol.lowergreek{list-style-type:lower-greek}
  312. .hdlist>table,.colist>table{border:0;background:none}
  313. .hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
  314. td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
  315. td.hdlist1{font-weight:bold;padding-bottom:1.25em}
  316. .literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
  317. .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
  318. .colist td:not([class]):first-child img{max-width:none}
  319. .colist td:not([class]):last-child{padding:.25em 0}
  320. .thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
  321. .imageblock.left{margin:.25em .625em 1.25em 0}
  322. .imageblock.right{margin:.25em 0 1.25em .625em}
  323. .imageblock>.title{margin-bottom:0}
  324. .imageblock.thumb,.imageblock.th{border-width:6px}
  325. .imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
  326. .image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
  327. .image.left{margin-right:.625em}
  328. .image.right{margin-left:.625em}
  329. a.image{text-decoration:none;display:inline-block}
  330. a.image object{pointer-events:none}
  331. sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
  332. sup.footnote a,sup.footnoteref a{text-decoration:none}
  333. sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
  334. #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
  335. #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
  336. #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
  337. #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
  338. #footnotes .footnote:last-of-type{margin-bottom:0}
  339. #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
  340. .gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
  341. .gist .file-data>table td.line-data{width:99%}
  342. div.unbreakable{page-break-inside:avoid}
  343. .big{font-size:larger}
  344. .small{font-size:smaller}
  345. .underline{text-decoration:underline}
  346. .overline{text-decoration:overline}
  347. .line-through{text-decoration:line-through}
  348. .aqua{color:#00bfbf}
  349. .aqua-background{background:#00fafa}
  350. .black{color:#000}
  351. .black-background{background:#000}
  352. .blue{color:#0000bf}
  353. .blue-background{background:#0000fa}
  354. .fuchsia{color:#bf00bf}
  355. .fuchsia-background{background:#fa00fa}
  356. .gray{color:#606060}
  357. .gray-background{background:#7d7d7d}
  358. .green{color:#006000}
  359. .green-background{background:#007d00}
  360. .lime{color:#00bf00}
  361. .lime-background{background:#00fa00}
  362. .maroon{color:#600000}
  363. .maroon-background{background:#7d0000}
  364. .navy{color:#000060}
  365. .navy-background{background:#00007d}
  366. .olive{color:#606000}
  367. .olive-background{background:#7d7d00}
  368. .purple{color:#600060}
  369. .purple-background{background:#7d007d}
  370. .red{color:#bf0000}
  371. .red-background{background:#fa0000}
  372. .silver{color:#909090}
  373. .silver-background{background:#bcbcbc}
  374. .teal{color:#006060}
  375. .teal-background{background:#007d7d}
  376. .white{color:#bfbfbf}
  377. .white-background{background:#fafafa}
  378. .yellow{color:#bfbf00}
  379. .yellow-background{background:#fafa00}
  380. span.icon>.fa{cursor:default}
  381. a span.icon>.fa{cursor:inherit}
  382. .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
  383. .admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
  384. .admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
  385. .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
  386. .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
  387. .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
  388. .conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
  389. .conum[data-value] *{color:#fff!important}
  390. .conum[data-value]+b{display:none}
  391. .conum[data-value]::after{content:attr(data-value)}
  392. pre .conum[data-value]{position:relative;top:-.125em}
  393. b.conum *{color:inherit!important}
  394. .conum:not([data-value]):empty{display:none}
  395. dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
  396. h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
  397. p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
  398. p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
  399. p{margin-bottom:1.25rem}
  400. .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
  401. .exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
  402. .print-only{display:none!important}
  403. @page{margin:1.25cm .75cm}
  404. @media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
  405. html{font-size:80%}
  406. a{color:inherit!important;text-decoration:underline!important}
  407. a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
  408. a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
  409. abbr[title]::after{content:" (" attr(title) ")"}
  410. pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
  411. thead{display:table-header-group}
  412. svg{max-width:100%}
  413. p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
  414. h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
  415. #toc,.sidebarblock,.exampleblock>.content{background:none!important}
  416. #toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
  417. body.book #header{text-align:center}
  418. body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
  419. body.book #header .details{border:0!important;display:block;padding:0!important}
  420. body.book #header .details span:first-child{margin-left:0!important}
  421. body.book #header .details br{display:block}
  422. body.book #header .details br+span::before{content:none!important}
  423. body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
  424. body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
  425. .listingblock code[data-lang]::before{display:block}
  426. #footer{padding:0 .9375em}
  427. .hide-on-print{display:none!important}
  428. .print-only{display:block!important}
  429. .hide-for-print{display:none!important}
  430. .show-for-print{display:inherit!important}}
  431. @media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
  432. .sect1{padding:0!important}
  433. .sect1+.sect1{border:0}
  434. #footer{background:none}
  435. #footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
  436. @media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
  437. </style>
  438. </head>
  439. <body class="article toc2 toc-left">
  440. <div id="header">
  441. <h1>Agordejo</h1>
  442. <div class="details">
  443. <span id="author" class="author">Laborejo Software Suite</span><br>
  444. </div>
  445. <div id="toc" class="toc2">
  446. <div id="toctitle">Table of Contents</div>
  447. <ul class="sectlevel1">
  448. <li><a href="#_introduction">1. Introduction</a></li>
  449. <li><a href="#_preamble">2. Preamble</a>
  450. <ul class="sectlevel2">
  451. <li><a href="#_example">2.1. Example</a></li>
  452. </ul>
  453. </li>
  454. <li><a href="#_quick_view">3. Quick View</a>
  455. <ul class="sectlevel2">
  456. <li><a href="#_selecting_a_session">3.1. Selecting a Session</a></li>
  457. <li><a href="#_in_a_session">3.2. In a Session</a></li>
  458. </ul>
  459. </li>
  460. <li><a href="#_full_view">4. Full View</a>
  461. <ul class="sectlevel2">
  462. <li><a href="#_selecting_a_session_2">4.1. Selecting a Session</a></li>
  463. <li><a href="#_in_a_session_2">4.2. In a Session</a>
  464. <ul class="sectlevel3">
  465. <li><a href="#_running_programs">4.2.1. Running Programs</a></li>
  466. <li><a href="#_the_session_menu">4.2.2. The Session Menu</a></li>
  467. </ul>
  468. </li>
  469. </ul>
  470. </li>
  471. <li><a href="#_program_database">5. Program-Database</a>
  472. <ul class="sectlevel2">
  473. <li><a href="#_for_advanced_users">5.1. For advanced users</a></li>
  474. </ul>
  475. </li>
  476. <li><a href="#_tray">6. Tray</a></li>
  477. <li><a href="#_network_sessions">7. Network Sessions</a></li>
  478. <li><a href="#_program_parameters">8. Program parameters</a></li>
  479. <li><a href="#_miscellaneous_explanations_faq">9. Miscellaneous / Explanations / FAQ</a></li>
  480. <li><a href="#_installation_and_start">10. Installation and Start</a></li>
  481. <li><a href="#_help_and_development">11. Help and Development</a>
  482. <ul class="sectlevel2">
  483. <li><a href="#_testing_and_reporting_errors">11.1. Testing and Reporting Errors</a></li>
  484. <li><a href="#_programming">11.2. Programming</a></li>
  485. <li><a href="#_translations">11.3. Translations</a></li>
  486. </ul>
  487. </li>
  488. </ul>
  489. </div>
  490. </div>
  491. <div id="content">
  492. <div id="preamble">
  493. <div class="sectionbody">
  494. <div class="paragraph">
  495. <p>For program version 0.1</p>
  496. </div>
  497. </div>
  498. </div>
  499. <div class="sect1">
  500. <h2 id="_introduction">1. Introduction</h2>
  501. <div class="sectionbody">
  502. <div class="paragraph">
  503. <p>Agordejo (Esperanto: 'place to set things up') is a music production session manager.
  504. It is used to start your programs, remember their (JACK) interconnections and make your life easier
  505. in general.</p>
  506. </div>
  507. <div class="paragraph">
  508. <p>You can seamlessly change between two view modes to quickly start a few programs or have complete
  509. control and a detailed overview.</p>
  510. </div>
  511. <div class="paragraph">
  512. <p>Agordejo does not re-invent the wheel but instead uses the New-Session-Manager daemon and enhances
  513. it with some tricks of its own, that always remain 100% compatible with the original sessions.</p>
  514. </div>
  515. <div class="paragraph">
  516. <p>This is a proof of concept version. It aims to show that session management with NSM can be quick
  517. and convenient and make the user feel in control. Some functionality has not yet been
  518. implemented, most prominently anything related to NSM over network. There is always the possibility to
  519. break things when trying out corner cases and hacks.</p>
  520. </div>
  521. <div class="paragraph">
  522. <p>That said, for single-computer sessions with just one daemon and one GUI at the same time Agordejo
  523. should provide a good user experience.</p>
  524. </div>
  525. </div>
  526. </div>
  527. <div class="sect1">
  528. <h2 id="_preamble">2. Preamble</h2>
  529. <div class="sectionbody">
  530. <div class="paragraph">
  531. <p>Session Management leads to simplification of workflows, overview and control over
  532. programs and data and a good portion of convenience :)</p>
  533. </div>
  534. <div class="paragraph">
  535. <p>No program exists on its own, because no program can do everything that is necessary for today&#8217;s
  536. music production.</p>
  537. </div>
  538. <div class="paragraph">
  539. <p>This is obvious in a JACK environment, which is fundamentally modular: Different
  540. programs fulfill different functions and "talk" to each other by sending data to each other.
  541. A sequencer sends MIDI to a sampler or synthesizer, which is connected to a plug-in host for effects etc.</p>
  542. </div>
  543. <div class="paragraph">
  544. <p>Even the most monolithic all-in-one DAWs have to, or want to, eventually connect to the outside
  545. world. For example, to connect to a screen recorder or streaming program, include a word processor
  546. for recording order or lyrics, or to use a function that is simply not available in the DAW.</p>
  547. </div>
  548. <div class="paragraph">
  549. <p>Much of the work is already done by the JACK subsystem. All programs can share their music in
  550. real time, have synchronized timelines and play in the same tempo.</p>
  551. </div>
  552. <div class="paragraph">
  553. <p>What remains is the tedious work of always starting all programs, loading project files, connecting
  554. audio channels etc. Session management in general (e.g. specifically written starter script files)
  555. and Agordejo in particular do this work for you, or at the very least, greatly simplify it.</p>
  556. </div>
  557. <div class="paragraph">
  558. <p>In contrast to the self-written script mentioned above, you don&#8217;t have to decide in advance on a
  559. setup, but everything is saved automatically as long as you manage everything through Agordejo.</p>
  560. </div>
  561. <div class="sect2">
  562. <h3 id="_example">2.1. Example</h3>
  563. <div class="ulist">
  564. <ul>
  565. <li>
  566. <p>Start Agordejo (Start menu, terminal etc.)</p>
  567. </li>
  568. <li>
  569. <p>You are now in the "Quick View" to start a session</p>
  570. </li>
  571. <li>
  572. <p>Press the big button "Start New Session"</p>
  573. </li>
  574. <li>
  575. <p>Now you get a choice of programs:</p>
  576. </li>
  577. <li>
  578. <p>A single click with the mouse starts a program</p>
  579. </li>
  580. <li>
  581. <p>Another click hides (or subsequently shows) its graphical interface</p>
  582. </li>
  583. <li>
  584. <p>If the program crashes you get a warning and can restart it.</p>
  585. </li>
  586. <li>
  587. <p>Audio and midi ports can now be connected together in a patchbay. The connections are stored in Agordejo.</p>
  588. </li>
  589. <li>
  590. <p>To get more programs and advanced features you can switch to the tab "Full View</p>
  591. </li>
  592. <li>
  593. <p>The name of the session so far is simply a date. By clicking on it you can enter a real name. Like "My song"</p>
  594. </li>
  595. <li>
  596. <p>If you are finished you can return to the session selection by pressing the button "Save and Close"</p>
  597. </li>
  598. <li>
  599. <p>Now Agordejo could be closed itself.</p>
  600. </li>
  601. <li>
  602. <p>All stored data is in a single directory on the hard disk (<code>~/NSM Sessions/My Song</code>)</p>
  603. </li>
  604. <li>
  605. <p>The session can be resumed: After clicking on the name, all programs start automatically and connect their JACK ports to among themselves.</p>
  606. </li>
  607. </ul>
  608. </div>
  609. <div class="paragraph">
  610. <p>"Quick View" is a good start. However, usually one would like to get into the full view, even if it
  611. is only to start a program twice or to save manually.</p>
  612. </div>
  613. </div>
  614. </div>
  615. </div>
  616. <div class="sect1">
  617. <h2 id="_quick_view">3. Quick View</h2>
  618. <div class="sectionbody">
  619. <div class="paragraph">
  620. <p>The quick view is an environment reduced to the minimum. You, as a user, should have to make as few
  621. decisions as possible and start an old session or create a new one as quickly as possible (with the
  622. at least clicks).</p>
  623. </div>
  624. <div class="paragraph">
  625. <p>For stability reasons, only programs are shown that are known to
  626. work correctly with Agordejos session management.</p>
  627. </div>
  628. <div class="paragraph">
  629. <p>The Quick View is only a view. There is no technical difference to the full view and you can switch
  630. back and forth at any time.</p>
  631. </div>
  632. <div class="sect2">
  633. <h3 id="_selecting_a_session">3.1. Selecting a Session</h3>
  634. <div class="paragraph">
  635. <p>There are only two options here: Click on "Start New Session" to do so, or
  636. select one of the existing sessions to resume it (if available).</p>
  637. </div>
  638. </div>
  639. <div class="sect2">
  640. <h3 id="_in_a_session">3.2. In a Session</h3>
  641. <div class="paragraph">
  642. <p>The name can be changed. We recommend a date in the form YYYY-MM-DD followed by a informative name.
  643. Please note that the name change will only take effect (e.g. renaming the session directory on
  644. disk) when you close the session.</p>
  645. </div>
  646. <div class="paragraph">
  647. <p>Next, a larger text field is available for notes. Write what you want. TODO lists, lyrics, credits
  648. and sources of external samples etc.</p>
  649. </div>
  650. <div class="paragraph">
  651. <p>Programs are symbolized by icons. A mouse click starts the program (which can take a while, we have
  652. no influence on that). The status of the program is indicated by a symbol: The "Play" symbol for
  653. the running program, the eye means "program window hidden", the "Power On/Off" symbol means that
  654. the program has been terminated (or crashed).</p>
  655. </div>
  656. <div class="paragraph">
  657. <p>If the program supports it, a running program window can be hidden. Synthesizers, once set up, do
  658. not have to be permanently visible. Just click on the program icon again. Either nothing happens
  659. (the program does not support it) or the window will hide. Another click on a hidden window shows
  660. it again. Every program itself is responsible for whether it saves its window state. Also, some
  661. programs already start hidden.</p>
  662. </div>
  663. <div class="paragraph">
  664. <p>There is <strong>no</strong> way to end or remove a program in this view. To do this, switch to the full view or
  665. use the close function of the program itself.</p>
  666. </div>
  667. <div class="paragraph">
  668. <p>There is also <strong>no</strong> possibility to start a program multiple times, e.g. one synthesizer per
  669. track. If you want to start multiple program instances through the full view times you can still
  670. use the quick view to manage the general session, but it is not defined which program instance a
  671. click on the icon (e.g. to hide) affects. Multiple instances are a clear indicator that you are
  672. ready for the full view.</p>
  673. </div>
  674. <div class="paragraph">
  675. <p>As you&#8217;ll eventually discover, not <strong>all</strong> available programs are in the list, and there there is
  676. also no possibility to start programs that would work well in a session (e.g. a tuner), but are not
  677. explicitly written for it, e.g. do not report their status. It is better to manage these programs
  678. in full view.</p>
  679. </div>
  680. <div class="paragraph">
  681. <p>If, unfortunately, a program has crashed, you can only restart it and hope its automatic saving
  682. worked. Good luck.</p>
  683. </div>
  684. </div>
  685. </div>
  686. </div>
  687. <div class="sect1">
  688. <h2 id="_full_view">4. Full View</h2>
  689. <div class="sectionbody">
  690. <div class="paragraph">
  691. <p>Some concepts have already been explained in the chapter "Quick View". It is expected that you have
  692. read this.</p>
  693. </div>
  694. <div class="sect2">
  695. <h3 id="_selecting_a_session_2">4.1. Selecting a Session</h3>
  696. <div class="paragraph">
  697. <p>Sessions are displayed as a table, which you sort by clicking on a column header. Here is shown how
  698. the session is called and when it was saved the last time, probably the two most important pieces
  699. of information. Also shown is how many programs/clients are in the session and whether it contains
  700. symbolic links. The latter is probably set to "Yes" if use a sampler, or similar, that contains
  701. large audio files. These are initially only linked into the session, and not copied, to save disk
  702. space. The displayed disk space usage is not the actual one, but includes the sizes of
  703. symlink-targets. Only when you archive the session or replace the links with real files the number
  704. becomes correct.</p>
  705. </div>
  706. <div class="paragraph">
  707. <p>Finally, the directory in which the files are actually stored is also given.</p>
  708. </div>
  709. <div class="paragraph">
  710. <p>Sessions represent the directory tree. A session is always a "leaf" and cannot include subsessions.
  711. When creating or renaming sessions, you can also arrange them in the tree by using the usual slash
  712. notation: <code>song123</code> &#8594; <code>New album/song 123</code> or <code>Test/asdf</code> &#8594; <code>Romantic pop ballads/My heart will
  713. keep beating</code>. How to organize your sessions and how many subdirectories you create is up to you.
  714. It is, however, not allowed to start the name with <code>/</code> or use the special characters <code>..</code>. The
  715. tree view can be deactivated by a checkbox on the left side, e.g. to be able to sort them. This is
  716. just a view, your data remains untouched.</p>
  717. </div>
  718. <div class="paragraph">
  719. <p>Each session has a context menu (e.g. right mouse button) with further options: You can choose to
  720. rename a session, delete it (including all associated files on the hard disk!) and more. These
  721. functions are equivalent to your file manager. If you like, you can also use your file manager to
  722. rename, move, or delete the session directories themselves (unless they are is currently open). You
  723. don&#8217;t need to restart Agordejo to do this, it will respond to the changes while running.</p>
  724. </div>
  725. <div class="paragraph">
  726. <p>There is also the possibility to remove a so-called "lock" file. This is a file which is created
  727. when the session starts and deleted when it ends. This tells Agordejo which session is currently
  728. running. If a lock file exists, the session cannot be opened! This should not happen during normal
  729. operation. But if a power failure or similar occurs in the middle of a session, the lock file may
  730. remain, although obviously no session is opened. In this case, unlock the session manually by
  731. deleting the lock file.</p>
  732. </div>
  733. <div class="paragraph">
  734. <p>Click on "New session" to create one. In contrast to the quick view, you must enter the name
  735. directly . As mentioned above, you can use the directory tree. In addition, there are several
  736. (almost obligatory) programs suggested to start with. Normally one should accept all suggestions.
  737. There is always the option to remove them later.</p>
  738. </div>
  739. <div class="paragraph">
  740. <p>A double click on an existing session (or the "Load Selected" button) does just that.</p>
  741. </div>
  742. </div>
  743. <div class="sect2">
  744. <h3 id="_in_a_session_2">4.2. In a Session</h3>
  745. <div class="paragraph">
  746. <p>The full view is divided into three areas: Program starter, programs in the current session
  747. and the session notes. There is also a dynamic menu.</p>
  748. </div>
  749. <div class="paragraph">
  750. <p>On the left side you see the program starter. A double-click starts a program instance in this
  751. session. You can also start a program more than once. For available programs please refer to the
  752. chapter "Program Database".</p>
  753. </div>
  754. <div class="sect3">
  755. <h4 id="_running_programs">4.2.1. Running Programs</h4>
  756. <div class="paragraph">
  757. <p>Started programs are located on the right side. A double-click switches the visibility
  758. to hide its window if the program supports it. If not, nothing happens.</p>
  759. </div>
  760. <div class="paragraph">
  761. <p>The following information is available per program:</p>
  762. </div>
  763. <div class="ulist">
  764. <ul>
  765. <li>
  766. <p>The name (possibly with icon)</p>
  767. </li>
  768. <li>
  769. <p>A "label" that programs can use freely (e.g. Fluajho shows the loaded .sf2 here)</p>
  770. </li>
  771. <li>
  772. <p>The program status</p>
  773. </li>
  774. <li>
  775. <p>Stopped , not running</p>
  776. </li>
  777. <li>
  778. <p>Ready, running</p>
  779. </li>
  780. <li>
  781. <p>Launch, If the status halts here but the programs works, it is one that does not specifically support session mode. Agordejo cannot know if it is already running or not. Everything is fine! :)</p>
  782. </li>
  783. <li>
  784. <p>Other states are only transitions and usually only visible for a very short time, e.g. Open / Loading</p>
  785. </li>
  786. <li>
  787. <p>Visibility (A cross for visible, blank for invisible)</p>
  788. </li>
  789. <li>
  790. <p>Changes - Are there currently unsaved changes?</p>
  791. </li>
  792. <li>
  793. <p>ID - A unique identifier that can be used to distinguish between multiple instances of the same program</p>
  794. </li>
  795. </ul>
  796. </div>
  797. <div class="paragraph">
  798. <p>All other functions are accessible via the menu or context menu. One click on a program selects it,
  799. and the client menu in the menu bar will now apply to the client. Alternatively, you can
  800. right-click on an entry for a context menu, which is identical to the menu.</p>
  801. </div>
  802. <div class="paragraph">
  803. <p>In addition to self-explanatory functions there are also:</p>
  804. </div>
  805. <div class="ulist">
  806. <ul>
  807. <li>
  808. <p>Rename gives the program a self-chosen name, mostly to make its purpose clear and to distinguish it better from others. This feature is only available when 'nsm-data' is running in the session.</p>
  809. </li>
  810. <li>
  811. <p>Save only tells this program to save</p>
  812. </li>
  813. <li>
  814. <p>Remove takes the program out of the session. However, no files are deleted in the process. At the moment you have to "clean up" in your file manager by hand.</p>
  815. </li>
  816. </ul>
  817. </div>
  818. <div class="paragraph">
  819. <p>If the client "nsm-data" is in the session (this is the default setting) the lower area provides a
  820. large text field for notes. It is the same as in the quick view. Write what you want: TODO lists,
  821. lyrics, credits and sources from external Samples etc.</p>
  822. </div>
  823. </div>
  824. <div class="sect3">
  825. <h4 id="_the_session_menu">4.2.2. The Session Menu</h4>
  826. <div class="paragraph">
  827. <p>In contrast to the quick view, full mode offers menus, which can also be accessed via the usual keyboard shortcuts (Ctrl+S for saving etc.).</p>
  828. </div>
  829. <div class="ulist">
  830. <ul>
  831. <li>
  832. <p>Save instructs all programs to save, the session continues to run</p>
  833. </li>
  834. <li>
  835. <p>Save and Close ends the session, after all programs saved</p>
  836. </li>
  837. <li>
  838. <p>Abort ends the session without saving the programs</p>
  839. </li>
  840. <li>
  841. <p>Save As saves the session under a different name and closes the current session without saving. From now on you work under the new name.</p>
  842. </li>
  843. <li>
  844. <p>Add Client offers the option to add any program, whether it is in the program database or not.</p>
  845. </li>
  846. <li>
  847. <p>Any installed programs are suggested. Agordejo doesn&#8217;t check them for usefulness for a music session, or even for runnability. You will find <code>ls</code> here as well as <code>agordejo</code> itself.</p>
  848. </li>
  849. </ul>
  850. </div>
  851. </div>
  852. </div>
  853. </div>
  854. </div>
  855. <div class="sect1">
  856. <h2 id="_program_database">5. Program-Database</h2>
  857. <div class="sectionbody">
  858. <div class="paragraph">
  859. <p>Agordejos launcher is based on a program database, which is partly self-generated, partly
  860. maintained by hand. As in a start menu Agordejo will offer you only programs that are actually
  861. installed on your system.</p>
  862. </div>
  863. <div class="paragraph">
  864. <p>The database is created at the first start. Depending on your system, this can take some moments to
  865. a few minutes.</p>
  866. </div>
  867. <div class="paragraph">
  868. <p>If you are reinstalling or uninstalling audio programs, you will need to update the database via
  869. the command in the control menu. Program installations and system changes are even possible while
  870. Agordejo is running (even in a session). After a DB update you can immediately access all new
  871. programs.</p>
  872. </div>
  873. <div class="paragraph">
  874. <p>If you do not see an installed program in our launcher, but you are sure that it supports session
  875. management please report it to <a href="mailto:info@laborejo.org">info@laborejo.org</a> or under <a href="https://laborejo.org/bugs" class="bare">https://laborejo.org/bugs</a> .</p>
  876. </div>
  877. <div class="paragraph">
  878. <p>In addition, you can add (in full view) programs that are not in the database.</p>
  879. </div>
  880. <div class="sect2">
  881. <h3 id="_for_advanced_users">5.1. For advanced users</h3>
  882. <div class="paragraph">
  883. <p>The strict rule is that only programs in the $PATH are included in the database. Absolutel paths
  884. are not allowed, even if you enter the program name yourself through the menu. However sometimes
  885. you just want to try out software, or you are a developer yourself and want to test without
  886. system-wide installation.</p>
  887. </div>
  888. <div class="paragraph">
  889. <p>In the control menu / settings is a tab "Program-PATH", where you can define and add your own
  890. search paths. One absolute directory path per line, no wildcards, trailing slash don&#8217;t matter.</p>
  891. </div>
  892. <div class="paragraph">
  893. <p>For example: <code>/home/myuser/sources/newsequencer/bin/</code></p>
  894. </div>
  895. <div class="paragraph">
  896. <p>These search paths are not stored in the session, but locally in your <code>~/.config</code> directory.</p>
  897. </div>
  898. </div>
  899. </div>
  900. </div>
  901. <div class="sect1">
  902. <h2 id="_tray">6. Tray</h2>
  903. <div class="sectionbody">
  904. <div class="paragraph">
  905. <p>Agordejo has a tray icon, if your window manager supports it. A click on the trayicon shows or
  906. hides Agordejo.</p>
  907. </div>
  908. <div class="paragraph">
  909. <p>If you close Agordejo using the normal window manager function, such as a click on the [X], the
  910. program and the session is not terminated, but minimized to the tray.</p>
  911. </div>
  912. <div class="paragraph">
  913. <p>A right click on the icon gives you access to common functions:</p>
  914. </div>
  915. <div class="paragraph">
  916. <p>You can directly start the most recently used sessions.</p>
  917. </div>
  918. <div class="paragraph">
  919. <p>If a session is already running you can save, cancel etc.</p>
  920. </div>
  921. <div class="paragraph">
  922. <p>Agordejo can also be completely exited here.</p>
  923. </div>
  924. </div>
  925. </div>
  926. <div class="sect1">
  927. <h2 id="_network_sessions">7. Network Sessions</h2>
  928. <div class="sectionbody">
  929. <div class="paragraph">
  930. <p>The functionality to distribute sessions over the local network is planned for a later program
  931. version.</p>
  932. </div>
  933. </div>
  934. </div>
  935. <div class="sect1">
  936. <h2 id="_program_parameters">8. Program parameters</h2>
  937. <div class="sectionbody">
  938. <div class="paragraph">
  939. <p>As an advanced user, you can start Agordejo in the terminal and add some parameters.. For a
  940. complete list please use the --help parameter.</p>
  941. </div>
  942. <div class="paragraph">
  943. <p>For example:</p>
  944. </div>
  945. <div class="ulist">
  946. <ul>
  947. <li>
  948. <p><code>--session newAlbum/mySong</code> starts the given session.</p>
  949. </li>
  950. <li>
  951. <p><code>--continue</code> starts the last active session.</p>
  952. </li>
  953. <li>
  954. <p><code>--hide</code> starts Agordejo as TrayIcon.</p>
  955. </li>
  956. <li>
  957. <p><code>--url osc.udp://myhost.localdomain:14294/</code> connects to this server, if available, or starts the internal session server at this address. This is a very technical option and probably not needed.</p>
  958. </li>
  959. <li>
  960. <p><code>--session-root /home/user/production2030</code> sets the root directory. Only sessions in this directory are displayed, everything is stored here.</p>
  961. </li>
  962. </ul>
  963. </div>
  964. <div class="paragraph">
  965. <p>The combination of <code>--continue</code> and <code>--hide</code> is essentially what many people expect from Session
  966. Management: Resuming at the previous state, without any extra windows in their way.
  967. If your system uses a start menu you will find not only the normal Agordejo starter but also
  968. "Agordejo Continue" to start this mode directly.</p>
  969. </div>
  970. </div>
  971. </div>
  972. <div class="sect1">
  973. <h2 id="_miscellaneous_explanations_faq">9. Miscellaneous / Explanations / FAQ</h2>
  974. <div class="sectionbody">
  975. <div class="paragraph">
  976. <p><strong>Session Save and Exit responds slowly</strong>: Agordejo is not a standalone program like an word
  977. processor. The participating programs in the session are not plugins either. When you end the
  978. session a signal is sent to all participating client to save. This may take a few moments where
  979. you are able to see "live" how individual programs terminate and disappear from the session.
  980. Everything is fine.</p>
  981. </div>
  982. <div class="paragraph">
  983. <p><strong>I have added a program but it does not save with the session</strong>: Does the program support session
  984. management? If not, Agordejo cannot do much. But you can ask the program developers to contact us
  985. (<a href="mailto:info@laborejo.org">info@laborejo.org</a>) and we can work together on support.</p>
  986. </div>
  987. <div class="paragraph">
  988. <p><strong>The programs hang on exit</strong>: Sorry about that. Actually, the programs themselves are to blame, but
  989. we are also interested in improving the situation by offering at least an emergency solution in the
  990. future.</p>
  991. </div>
  992. <div class="paragraph">
  993. <p><strong>Agordejo won&#8217;t start! I start the program but I can&#8217;t see anything</strong>: Most likely Agordejo is
  994. running, but invisible, because you exited it from the tray last time. Is it in the tray? A
  995. message should have popped up, maybe you missed it. If there is no tray in your window manager, the
  996. program should always be visible. With all these special window managers in Linux it may be that
  997. the tray detection did not work properly. Contingency plan is to delete
  998. <code>~/.config/LaborejoSoftwareSuite/agordejo</code>. This will NOT remove any sessions, but only local
  999. settings such as the visibility of the program window. At next start Agordejo will behave like the
  1000. very first start.</p>
  1001. </div>
  1002. <div class="paragraph">
  1003. <p><strong>JACK crashed. A lot of programs hang. What can I do to prevent data loss?</strong> Probably already many
  1004. programs in the session are not running properly and are not reacting anymore. The best thing to do
  1005. is to use the 'Abort Session' function and restart everything. If the data has actually been
  1006. unsaved for a long time, you can also dare to save/exit. It may be necessary to re-draw some jack,
  1007. or all, jack connections by hand at the next start. If you want to be on the safe side, you can
  1008. manually make a copy of the session directory in your file manager before ending the session (with
  1009. inevitable crashes).</p>
  1010. </div>
  1011. <div class="paragraph">
  1012. <p><strong>A program update broke my session because it can no longer load its files.</strong> Unfortunately, this is
  1013. a problem that even Agordejo can&#8217;t solve. It also happens with LV2 plugins and with all other
  1014. software, such as office programs. If you fear that a program becomes incompatible in the future,
  1015. write down its version number in the session notes, so that you can at least, in an emergency,
  1016. reinstall the old program version (even if this is very is cumbersome).</p>
  1017. </div>
  1018. <div class="paragraph">
  1019. <p><strong>What&#8217;s better? Monolithic DAW or session management?</strong> Why not both? There is no conflict. Session
  1020. management is worthwhile with two or more participating programs, which one needs almost always.</p>
  1021. </div>
  1022. <div class="paragraph">
  1023. <p>You should not feel compelled to suddenly make everything modular with individual programs, only
  1024. because you use a session manager. Agordejo is designed to make your music production easier. If it
  1025. is faster and more comfortable to manage all plugins and effects e.g. in a single "Carla" instance
  1026. then you should do exactly that. If you basically want to do everything in Ardour, do that, but
  1027. start Ardour anyway in session management, because no program can do everything alone and the time
  1028. will come where you add a second one.</p>
  1029. </div>
  1030. <div class="paragraph">
  1031. <p>Session management is another level of hierarchy. Sequencers or DAWs are not plug-ins themselves.
  1032. Patroneo does not belong "in" Ardour and Ardour does not belong "in" Laborejo. Already in this
  1033. example each of the programs fulfils a different role because the others follow a different design
  1034. philosophy and cannot ever offer the same workflow. And more:</p>
  1035. </div>
  1036. <div class="paragraph">
  1037. <p>Some programs can&#8217;t host plugins, some can&#8217;t export audio files. They are not bad programs, but
  1038. programs that concentrate on one task. Furthermore, there is a lot of software that does not
  1039. directly do music production, but still is connected in the grander scheme: Open Broadcast Studio
  1040. (OBS), music player, word processors and graphic programs etc.</p>
  1041. </div>
  1042. <div class="paragraph">
  1043. <p><strong>Agordejo contains functionality which is not within its scope</strong>: Music production is very complex
  1044. and complexity is inevitable. It&#8217;s like a waterbed: if you press down on one side, something
  1045. bounces up in another place. When you create a "clean and lean" program, which therefore implements
  1046. only a part of the complete workflow, then the missing part pops up somewhere else. A minimalistic
  1047. session manager provokes plug-ins (not LV2), helper-scripts, workarounds and hacks.</p>
  1048. </div>
  1049. <div class="paragraph">
  1050. <p>E.g. not to include file management provokes user errors like deleting the wrong files. If the SM
  1051. knows what to do and it can do it, then let it do it. Or crashes: Technically, crashing programs
  1052. are not the "problem" of the session managers, but they are part of the software reality. Crashes
  1053. happen every day and need to be handled. Can Agordejo simplify the work and help to restore good
  1054. conditions again? Then that should be done. Session management is also an opportunity to simplify
  1055. even complex technical scenarios, e.g. distributing sessions over the network.</p>
  1056. </div>
  1057. </div>
  1058. </div>
  1059. <div class="sect1">
  1060. <h2 id="_installation_and_start">10. Installation and Start</h2>
  1061. <div class="sectionbody">
  1062. <div class="paragraph">
  1063. <p>Agordejo is exclusive for Linux. The best way to install is to use your package manager.
  1064. If it is not there, or only in an outdated version, please ask your Linux distribution to provide a recent version.</p>
  1065. </div>
  1066. <div class="paragraph">
  1067. <p>If not available in the package repository you can build Agordejo yourself.</p>
  1068. </div>
  1069. <div class="ulist">
  1070. <div class="title">Build and Install</div>
  1071. <ul>
  1072. <li>
  1073. <p>Please check the supplied README.md for dependencies.</p>
  1074. </li>
  1075. <li>
  1076. <p>You can download a release or clone the git version</p>
  1077. <div class="ulist">
  1078. <ul>
  1079. <li>
  1080. <p>Download the latest version from <a href="https://www.laborejo.org/downloads" class="bare">https://www.laborejo.org/downloads</a> and extract it.</p>
  1081. </li>
  1082. <li>
  1083. <p>git clone <a href="https://git.laborejo.org/lss/agordejo.git" class="bare">https://git.laborejo.org/lss/agordejo.git</a></p>
  1084. </li>
  1085. </ul>
  1086. </div>
  1087. </li>
  1088. <li>
  1089. <p>Change into the new directory and use these commands:</p>
  1090. </li>
  1091. <li>
  1092. <p><code>./configure --prefix=/usr</code></p>
  1093. <div class="ulist">
  1094. <ul>
  1095. <li>
  1096. <p>The default prefix is /usr/local</p>
  1097. </li>
  1098. </ul>
  1099. </div>
  1100. </li>
  1101. <li>
  1102. <p><code>make</code></p>
  1103. </li>
  1104. <li>
  1105. <p><code>sudo make install</code></p>
  1106. </li>
  1107. </ul>
  1108. </div>
  1109. <div class="paragraph">
  1110. <p>Now the program is available to run via your menu/launcher or <code>agordejo</code> in a terminal.</p>
  1111. </div>
  1112. <div class="paragraph">
  1113. <p>Please read README.md for other ways of starting agordejo, which are impractical for actual use but can
  1114. be helpful for testing and development.</p>
  1115. </div>
  1116. </div>
  1117. </div>
  1118. <div class="sect1">
  1119. <h2 id="_help_and_development">11. Help and Development</h2>
  1120. <div class="sectionbody">
  1121. <div class="paragraph">
  1122. <p>You can help Agordejo in several ways: Testing and reporting errors, translating, marketing, support, programming and more.</p>
  1123. </div>
  1124. <div class="sect2">
  1125. <h3 id="_testing_and_reporting_errors">11.1. Testing and Reporting Errors</h3>
  1126. <div class="paragraph">
  1127. <p>If you find a bug in the program (or it runs too slow) please contact us in a way that suits you best.
  1128. We are thankful for any help.</p>
  1129. </div>
  1130. <div class="ulist">
  1131. <div class="title">How to contact us</div>
  1132. <ul>
  1133. <li>
  1134. <p>Report bugs and issues: <a href="https://www.laborejo.org/bugs" class="bare">https://www.laborejo.org/bugs</a></p>
  1135. </li>
  1136. <li>
  1137. <p>Website: <a href="https://www.laborejo.org" class="bare">https://www.laborejo.org</a></p>
  1138. </li>
  1139. <li>
  1140. <p>E-Mail: <a href="mailto:info@laborejo.org">info@laborejo.org</a></p>
  1141. </li>
  1142. <li>
  1143. <p>If you see the opportunity and know that a developer will read it also forums, social media etc..</p>
  1144. </li>
  1145. </ul>
  1146. </div>
  1147. </div>
  1148. <div class="sect2">
  1149. <h3 id="_programming">11.2. Programming</h3>
  1150. <div class="paragraph">
  1151. <p>If you want to do some programming and don&#8217;t know where to start please get in contact with us directly.
  1152. The short version is: clone the git, change the code, create a git patch or point me to your public git.</p>
  1153. </div>
  1154. </div>
  1155. <div class="sect2">
  1156. <h3 id="_translations">11.3. Translations</h3>
  1157. <div class="paragraph">
  1158. <p>Agordejo is very easy to translate with the help of the Qt-Toolchain, without any need for programming.
  1159. The easiest way is to contact the developers and they will setup the new language.</p>
  1160. </div>
  1161. <div class="paragraph">
  1162. <p>However, here are the complete instructions for doing a translation completely on your own and integrating it into the program.</p>
  1163. </div>
  1164. <div class="paragraph">
  1165. <p>You can add a new language like this:</p>
  1166. </div>
  1167. <div class="ulist">
  1168. <ul>
  1169. <li>
  1170. <p>Open a terminal and navigate to qtgui/resources/translations</p>
  1171. </li>
  1172. <li>
  1173. <p>Edit the file <code>config.pro</code> with a text editor</p>
  1174. <div class="ulist">
  1175. <ul>
  1176. <li>
  1177. <p>Append the name of your language in the last line, in the form <code>XY.ts</code>, where XY is the language code.</p>
  1178. </li>
  1179. <li>
  1180. <p>Make sure to leave a space between the individual languages entries.</p>
  1181. </li>
  1182. </ul>
  1183. </div>
  1184. </li>
  1185. <li>
  1186. <p>Run <code>sh update.sh</code> in the same directory</p>
  1187. <div class="ulist">
  1188. <ul>
  1189. <li>
  1190. <p>The program has now generated a new <code>.ts</code> file in the same directory.</p>
  1191. </li>
  1192. </ul>
  1193. </div>
  1194. </li>
  1195. <li>
  1196. <p>Start Qt Linguist with <code>linguist-qt5</code> (may be named differently) and open your newly generated file</p>
  1197. </li>
  1198. <li>
  1199. <p>Select your "Target Language" and use the program to create a translation</p>
  1200. </li>
  1201. <li>
  1202. <p>Send us the <code>.ts</code> file, such as by e-mail to <a href="mailto:info@laborejo.org">info@laborejo.org</a></p>
  1203. </li>
  1204. </ul>
  1205. </div>
  1206. <div class="paragraph">
  1207. <p>You can also incorporate the translation into Agordejo for testing purposes. This requires rudimentary Python knowledge.</p>
  1208. </div>
  1209. <div class="ulist">
  1210. <ul>
  1211. <li>
  1212. <p>Run the "Release" option in QtLinguists "File" menu. It creates a <code>.qm</code> file in the same directory as your <code>.ts</code> file.</p>
  1213. </li>
  1214. <li>
  1215. <p>Edit <code>qtgui/resources/resources.qrc</code> and duplicate the line <code>&lt;file&gt;translations/de.qm&lt;/file&gt;</code> but change it to your new .qm file.</p>
  1216. </li>
  1217. <li>
  1218. <p>run <code>sh buildresources.sh</code></p>
  1219. </li>
  1220. <li>
  1221. <p>Edit <code>engine/config.py</code>: add your language to the line that begins with "supportedLanguages" like this: <code>{"German": "de.qm", "Esperanto: "eo.qm"}</code></p>
  1222. <div class="ulist">
  1223. <ul>
  1224. <li>
  1225. <p>To find out your language string (German, Esperanto etc.) open the <code>python3</code> interpreter in a terminal and run the following command:</p>
  1226. </li>
  1227. <li>
  1228. <p><code>from PyQt5 import QtCore;QtCore.QLocale().languageToString(QtCore.QLocale().language())</code></p>
  1229. </li>
  1230. </ul>
  1231. </div>
  1232. </li>
  1233. </ul>
  1234. </div>
  1235. <div class="paragraph">
  1236. <p>To test the new translation you can either run the program normally, if your system is set to that language. Alternatively start agordejo via the terminal:</p>
  1237. </div>
  1238. <div class="ulist">
  1239. <ul>
  1240. <li>
  1241. <p><code>LANGUAGE=de_DE.UTF-8 ./agordejo -V --save /dev/null</code></p>
  1242. </li>
  1243. </ul>
  1244. </div>
  1245. </div>
  1246. </div>
  1247. </div>
  1248. </div>
  1249. <div id="footer">
  1250. <div id="footer-text">
  1251. Last updated 2020-07-19 13:51:35 +0200
  1252. </div>
  1253. </div>
  1254. </body>
  1255. </html>