Fossil SCM

Add a khaki color skin.

drh 2009-12-20 02:53 trunk
Commit 91b90814256f9a55459f7c97fc5c3dd6952deea1
2 files changed +6 +202 -1
--- src/setup.c
+++ src/setup.c
@@ -964,10 +964,12 @@
964964
@ <input type="submit" name="clear" value="Revert To Default">
965965
@ </form>
966966
@ <hr>
967967
@ The default CSS is shown below for reference. Other examples
968968
@ of CSS files can be seen on the <a href="setup_skin">skins page</a>.
969
+ @ See also the <a href="setup_header">header</a> and
970
+ @ <a href="setup_footer">footer</a> editing screens.
969971
@ <blockquote><pre>
970972
@ %h(zDefaultCSS)
971973
@ </pre></blockquote>
972974
style_footer();
973975
db_end_transaction(0);
@@ -1000,10 +1002,12 @@
10001002
@ <input type="submit" name="clear" value="Revert To Default">
10011003
@ </form>
10021004
@ <hr>
10031005
@ The default header is shown below for reference. Other examples
10041006
@ of headers can be seen on the <a href="setup_skin">skins page</a>.
1007
+ @ See also the <a href="setup_editcss">CSS</a> and
1008
+ @ <a href="setup_footer">footer</a> editing screeens.
10051009
@ <blockquote><pre>
10061010
@ %h(zDefaultHeader)
10071011
@ </pre></blockquote>
10081012
style_footer();
10091013
db_end_transaction(0);
@@ -1035,10 +1039,12 @@
10351039
@ <input type="submit" name="clear" value="Revert To Default">
10361040
@ </form>
10371041
@ <hr>
10381042
@ The default footer is shown below for reference. Other examples
10391043
@ of footers can be seen on the <a href="setup_skin">skins page</a>.
1044
+ @ See also the <a href="setup_editcss">CSS</a> and
1045
+ @ <a href="setup_header">header</a> editing screens.
10401046
@ <blockquote><pre>
10411047
@ %h(zDefaultFooter)
10421048
@ </pre></blockquote>
10431049
style_footer();
10441050
db_end_transaction(0);
10451051
--- src/setup.c
+++ src/setup.c
@@ -964,10 +964,12 @@
964 @ <input type="submit" name="clear" value="Revert To Default">
965 @ </form>
966 @ <hr>
967 @ The default CSS is shown below for reference. Other examples
968 @ of CSS files can be seen on the <a href="setup_skin">skins page</a>.
 
 
969 @ <blockquote><pre>
970 @ %h(zDefaultCSS)
971 @ </pre></blockquote>
972 style_footer();
973 db_end_transaction(0);
@@ -1000,10 +1002,12 @@
1000 @ <input type="submit" name="clear" value="Revert To Default">
1001 @ </form>
1002 @ <hr>
1003 @ The default header is shown below for reference. Other examples
1004 @ of headers can be seen on the <a href="setup_skin">skins page</a>.
 
 
1005 @ <blockquote><pre>
1006 @ %h(zDefaultHeader)
1007 @ </pre></blockquote>
1008 style_footer();
1009 db_end_transaction(0);
@@ -1035,10 +1039,12 @@
1035 @ <input type="submit" name="clear" value="Revert To Default">
1036 @ </form>
1037 @ <hr>
1038 @ The default footer is shown below for reference. Other examples
1039 @ of footers can be seen on the <a href="setup_skin">skins page</a>.
 
 
1040 @ <blockquote><pre>
1041 @ %h(zDefaultFooter)
1042 @ </pre></blockquote>
1043 style_footer();
1044 db_end_transaction(0);
1045
--- src/setup.c
+++ src/setup.c
@@ -964,10 +964,12 @@
964 @ <input type="submit" name="clear" value="Revert To Default">
965 @ </form>
966 @ <hr>
967 @ The default CSS is shown below for reference. Other examples
968 @ of CSS files can be seen on the <a href="setup_skin">skins page</a>.
969 @ See also the <a href="setup_header">header</a> and
970 @ <a href="setup_footer">footer</a> editing screens.
971 @ <blockquote><pre>
972 @ %h(zDefaultCSS)
973 @ </pre></blockquote>
974 style_footer();
975 db_end_transaction(0);
@@ -1000,10 +1002,12 @@
1002 @ <input type="submit" name="clear" value="Revert To Default">
1003 @ </form>
1004 @ <hr>
1005 @ The default header is shown below for reference. Other examples
1006 @ of headers can be seen on the <a href="setup_skin">skins page</a>.
1007 @ See also the <a href="setup_editcss">CSS</a> and
1008 @ <a href="setup_footer">footer</a> editing screeens.
1009 @ <blockquote><pre>
1010 @ %h(zDefaultHeader)
1011 @ </pre></blockquote>
1012 style_footer();
1013 db_end_transaction(0);
@@ -1035,10 +1039,12 @@
1039 @ <input type="submit" name="clear" value="Revert To Default">
1040 @ </form>
1041 @ <hr>
1042 @ The default footer is shown below for reference. Other examples
1043 @ of footers can be seen on the <a href="setup_skin">skins page</a>.
1044 @ See also the <a href="setup_editcss">CSS</a> and
1045 @ <a href="setup_header">header</a> editing screens.
1046 @ <blockquote><pre>
1047 @ %h(zDefaultFooter)
1048 @ </pre></blockquote>
1049 style_footer();
1050 db_end_transaction(0);
1051
+202 -1
--- src/skins.c
+++ src/skins.c
@@ -215,10 +215,210 @@
215215
@ Fossil version $manifest_version $manifest_date
216216
@ </div>
217217
@ </body></html>
218218
@ ');
219219
;
220
+
221
+/*
222
+** A tan theme with the project title above the user identification
223
+** and no logo image.
224
+*/
225
+static const char zBuiltinSkin2[] =
226
+@ REPLACE INTO config VALUES('css','/* General settings for the entire page */
227
+@ body {
228
+@ margin: 0ex 0ex;
229
+@ padding: 0px;
230
+@ background-color: #fef3bc;
231
+@ font-family: sans-serif;
232
+@ }
233
+@
234
+@ /* The project logo in the upper left-hand corner of each page */
235
+@ div.logo {
236
+@ display: inline;
237
+@ text-align: center;
238
+@ vertical-align: bottom;
239
+@ font-weight: bold;
240
+@ font-size: 2.5em;
241
+@ color: #a09048;
242
+@ }
243
+@
244
+@ /* The page title centered at the top of each page */
245
+@ div.title {
246
+@ display: table-cell;
247
+@ font-size: 2em;
248
+@ font-weight: bold;
249
+@ text-align: left;
250
+@ padding: 0 0 0 5px;
251
+@ color: #a09048;
252
+@ vertical-align: bottom;
253
+@ width: 100%;
254
+@ }
255
+@
256
+@ /* The login status message in the top right-hand corner */
257
+@ div.status {
258
+@ display: table-cell;
259
+@ text-align: right;
260
+@ vertical-align: bottom;
261
+@ color: #a09048;
262
+@ padding: 5px 5px 0 0;
263
+@ font-size: 0.8em;
264
+@ font-weight: bold;
265
+@ }
266
+@
267
+@ /* The header across the top of the page */
268
+@ div.header {
269
+@ display: table;
270
+@ width: 100%;
271
+@ }
272
+@
273
+@ /* The main menu bar that appears at the top of the page beneath
274
+@ ** the header */
275
+@ div.mainmenu {
276
+@ padding: 5px 10px 5px 10px;
277
+@ font-size: 0.9em;
278
+@ font-weight: bold;
279
+@ text-align: center;
280
+@ letter-spacing: 1px;
281
+@ background-color: #a09048;
282
+@ color: black;
283
+@ }
284
+@
285
+@ /* The submenu bar that *sometimes* appears below the main menu */
286
+@ div.submenu {
287
+@ padding: 3px 10px 3px 0px;
288
+@ font-size: 0.9em;
289
+@ text-align: center;
290
+@ background-color: #c0af58;
291
+@ color: white;
292
+@ }
293
+@ div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited {
294
+@ padding: 3px 10px 3px 10px;
295
+@ color: white;
296
+@ text-decoration: none;
297
+@ }
298
+@ div.mainmenu a:hover, div.submenu a:hover {
299
+@ color: #a09048;
300
+@ background-color: white;
301
+@ }
302
+@
303
+@ /* All page content from the bottom of the menu or submenu down to
304
+@ ** the footer */
305
+@ div.content {
306
+@ padding: 1ex 5px;
307
+@ }
308
+@ div.content a { color: #706532; }
309
+@ div.content a:link { color: #706532; }
310
+@ div.content a:visited { color: #704032; }
311
+@ div.content a:hover { background-color: white; color: #706532; }
312
+@
313
+@ /* Some pages have section dividers */
314
+@ div.section {
315
+@ margin-bottom: 0px;
316
+@ margin-top: 1em;
317
+@ padding: 3px 3px 0 3px;
318
+@ font-size: 1.2em;
319
+@ font-weight: bold;
320
+@ background-color: #a09048;
321
+@ color: white;
322
+@ }
323
+@
324
+@ /* The "Date" that occurs on the left hand side of timelines */
325
+@ div.divider {
326
+@ background: #e1d498;
327
+@ border: 2px #a09048 solid;
328
+@ font-size: 1em; font-weight: normal;
329
+@ padding: .25em;
330
+@ margin: .2em 0 .2em 0;
331
+@ float: left;
332
+@ clear: left;
333
+@ }
334
+@
335
+@ /* The footer at the very bottom of the page */
336
+@ div.footer {
337
+@ font-size: 0.8em;
338
+@ margin-top: 12px;
339
+@ padding: 5px 10px 5px 10px;
340
+@ text-align: right;
341
+@ background-color: #a09048;
342
+@ color: white;
343
+@ }
344
+@
345
+@ /* Hyperlink colors */
346
+@ div.footer a { color: white; }
347
+@ div.footer a:link { color: white; }
348
+@ div.footer a:visited { color: white; }
349
+@ div.footer a:hover { background-color: white; color: #558195; }
350
+@
351
+@ /* <verbatim> blocks */
352
+@ pre.verbatim {
353
+@ background-color: #f5f5f5;
354
+@ padding: 0.5em;
355
+@ }
356
+@
357
+@ /* The label/value pairs on (for example) the ci page */
358
+@ table.label-value th {
359
+@ vertical-align: top;
360
+@ text-align: right;
361
+@ padding: 0.2ex 2ex;
362
+@ }
363
+@ ');
364
+@ REPLACE INTO config VALUES('header','<html>
365
+@ <head>
366
+@ <title>$<project_name>: $<title></title>
367
+@ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
368
+@ href="$baseurl/timeline.rss">
369
+@ <link rel="stylesheet" href="$baseurl/style.css" type="text/css"
370
+@ media="screen">
371
+@ </head>
372
+@ <body>
373
+@ <div class="header">
374
+@ <div class="title">$<title></div>
375
+@ <div class="status">
376
+@ <div class="logo">$<project_name></div><br/>
377
+@ <nobr><th1>
378
+@ if {[info exists login]} {
379
+@ puts "Logged in as $login"
380
+@ } else {
381
+@ puts "Not logged in"
382
+@ }
383
+@ </th1></nobr></div>
384
+@ </div>
385
+@ <div class="mainmenu"><th1>
386
+@ html "<a href=''$baseurl$index_page''>Home</a> "
387
+@ if {[hascap h]} {
388
+@ html "<a href=''$baseurl/dir''>Files</a> "
389
+@ }
390
+@ if {[hascap o]} {
391
+@ html "<a href=''$baseurl/leaves''>Leaves</a> "
392
+@ html "<a href=''$baseurl/timeline''>Timeline</a> "
393
+@ html "<a href=''$baseurl/brlist''>Branches</a> "
394
+@ html "<a href=''$baseurl/taglist''>Tags</a> "
395
+@ }
396
+@ if {[hascap r]} {
397
+@ html "<a href=''$baseurl/reportlist''>Tickets</a> "
398
+@ }
399
+@ if {[hascap j]} {
400
+@ html "<a href=''$baseurl/wiki''>Wiki</a> "
401
+@ }
402
+@ if {[hascap s]} {
403
+@ html "<a href=''$baseurl/setup''>Admin</a> "
404
+@ } elseif {[hascap a]} {
405
+@ html "<a href=''$baseurl/setup_ulist''>Users</a> "
406
+@ }
407
+@ if {[info exists login]} {
408
+@ html "<a href=''$baseurl/login''>Logout</a> "
409
+@ } else {
410
+@ html "<a href=''$baseurl/login''>Login</a> "
411
+@ }
412
+@ </th1></div>
413
+@ ');
414
+@ REPLACE INTO config VALUES('footer','<div class="footer">
415
+@ Fossil version $manifest_version $manifest_date
416
+@ </div>
417
+@ </body></html>
418
+@ ');
419
+;
220420
221421
/*
222422
** An array of available built-in skins.
223423
*/
224424
static struct BuiltinSkin {
@@ -225,10 +425,11 @@
225425
const char *zName;
226426
const char *zValue;
227427
} aBuiltinSkin[] = {
228428
{ "Default", 0 /* Filled in at runtime */ },
229429
{ "Plain Gray, No Logo", zBuiltinSkin1 },
430
+ { "Khaki, No Logo", zBuiltinSkin2 },
230431
};
231432
232433
/*
233434
** For a skin named zSkinName, compute the name of the CONFIG table
234435
** entry where that skin is stored and return it.
@@ -391,11 +592,11 @@
391592
);
392593
while( db_step(&q)==SQLITE_ROW ){
393594
const char *zN = db_column_text(&q, 0);
394595
const char *zV = db_column_text(&q, 1);
395596
if( strcmp(zV, zCurrent)==0 ){
396
- @ <li><p>%h(zN) <b>Currently In Use</b></p>
597
+ @ <li><p>%h(zN).&nbsp;&nbsp; <b>Currently In Use</b></p>
397598
}else{
398599
@ <li><form action="%s(g.zBaseURL)/setup_skin" method="POST">
399600
@ %h(zN).&nbsp;&nbsp;
400601
@ <input type="hidden" name="sn" value="%h(zN)">
401602
@ <input type="submit" name="load" value="Use This Skin">
402603
--- src/skins.c
+++ src/skins.c
@@ -215,10 +215,210 @@
215 @ Fossil version $manifest_version $manifest_date
216 @ </div>
217 @ </body></html>
218 @ ');
219 ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
221 /*
222 ** An array of available built-in skins.
223 */
224 static struct BuiltinSkin {
@@ -225,10 +425,11 @@
225 const char *zName;
226 const char *zValue;
227 } aBuiltinSkin[] = {
228 { "Default", 0 /* Filled in at runtime */ },
229 { "Plain Gray, No Logo", zBuiltinSkin1 },
 
230 };
231
232 /*
233 ** For a skin named zSkinName, compute the name of the CONFIG table
234 ** entry where that skin is stored and return it.
@@ -391,11 +592,11 @@
391 );
392 while( db_step(&q)==SQLITE_ROW ){
393 const char *zN = db_column_text(&q, 0);
394 const char *zV = db_column_text(&q, 1);
395 if( strcmp(zV, zCurrent)==0 ){
396 @ <li><p>%h(zN) <b>Currently In Use</b></p>
397 }else{
398 @ <li><form action="%s(g.zBaseURL)/setup_skin" method="POST">
399 @ %h(zN).&nbsp;&nbsp;
400 @ <input type="hidden" name="sn" value="%h(zN)">
401 @ <input type="submit" name="load" value="Use This Skin">
402
--- src/skins.c
+++ src/skins.c
@@ -215,10 +215,210 @@
215 @ Fossil version $manifest_version $manifest_date
216 @ </div>
217 @ </body></html>
218 @ ');
219 ;
220
221 /*
222 ** A tan theme with the project title above the user identification
223 ** and no logo image.
224 */
225 static const char zBuiltinSkin2[] =
226 @ REPLACE INTO config VALUES('css','/* General settings for the entire page */
227 @ body {
228 @ margin: 0ex 0ex;
229 @ padding: 0px;
230 @ background-color: #fef3bc;
231 @ font-family: sans-serif;
232 @ }
233 @
234 @ /* The project logo in the upper left-hand corner of each page */
235 @ div.logo {
236 @ display: inline;
237 @ text-align: center;
238 @ vertical-align: bottom;
239 @ font-weight: bold;
240 @ font-size: 2.5em;
241 @ color: #a09048;
242 @ }
243 @
244 @ /* The page title centered at the top of each page */
245 @ div.title {
246 @ display: table-cell;
247 @ font-size: 2em;
248 @ font-weight: bold;
249 @ text-align: left;
250 @ padding: 0 0 0 5px;
251 @ color: #a09048;
252 @ vertical-align: bottom;
253 @ width: 100%;
254 @ }
255 @
256 @ /* The login status message in the top right-hand corner */
257 @ div.status {
258 @ display: table-cell;
259 @ text-align: right;
260 @ vertical-align: bottom;
261 @ color: #a09048;
262 @ padding: 5px 5px 0 0;
263 @ font-size: 0.8em;
264 @ font-weight: bold;
265 @ }
266 @
267 @ /* The header across the top of the page */
268 @ div.header {
269 @ display: table;
270 @ width: 100%;
271 @ }
272 @
273 @ /* The main menu bar that appears at the top of the page beneath
274 @ ** the header */
275 @ div.mainmenu {
276 @ padding: 5px 10px 5px 10px;
277 @ font-size: 0.9em;
278 @ font-weight: bold;
279 @ text-align: center;
280 @ letter-spacing: 1px;
281 @ background-color: #a09048;
282 @ color: black;
283 @ }
284 @
285 @ /* The submenu bar that *sometimes* appears below the main menu */
286 @ div.submenu {
287 @ padding: 3px 10px 3px 0px;
288 @ font-size: 0.9em;
289 @ text-align: center;
290 @ background-color: #c0af58;
291 @ color: white;
292 @ }
293 @ div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited {
294 @ padding: 3px 10px 3px 10px;
295 @ color: white;
296 @ text-decoration: none;
297 @ }
298 @ div.mainmenu a:hover, div.submenu a:hover {
299 @ color: #a09048;
300 @ background-color: white;
301 @ }
302 @
303 @ /* All page content from the bottom of the menu or submenu down to
304 @ ** the footer */
305 @ div.content {
306 @ padding: 1ex 5px;
307 @ }
308 @ div.content a { color: #706532; }
309 @ div.content a:link { color: #706532; }
310 @ div.content a:visited { color: #704032; }
311 @ div.content a:hover { background-color: white; color: #706532; }
312 @
313 @ /* Some pages have section dividers */
314 @ div.section {
315 @ margin-bottom: 0px;
316 @ margin-top: 1em;
317 @ padding: 3px 3px 0 3px;
318 @ font-size: 1.2em;
319 @ font-weight: bold;
320 @ background-color: #a09048;
321 @ color: white;
322 @ }
323 @
324 @ /* The "Date" that occurs on the left hand side of timelines */
325 @ div.divider {
326 @ background: #e1d498;
327 @ border: 2px #a09048 solid;
328 @ font-size: 1em; font-weight: normal;
329 @ padding: .25em;
330 @ margin: .2em 0 .2em 0;
331 @ float: left;
332 @ clear: left;
333 @ }
334 @
335 @ /* The footer at the very bottom of the page */
336 @ div.footer {
337 @ font-size: 0.8em;
338 @ margin-top: 12px;
339 @ padding: 5px 10px 5px 10px;
340 @ text-align: right;
341 @ background-color: #a09048;
342 @ color: white;
343 @ }
344 @
345 @ /* Hyperlink colors */
346 @ div.footer a { color: white; }
347 @ div.footer a:link { color: white; }
348 @ div.footer a:visited { color: white; }
349 @ div.footer a:hover { background-color: white; color: #558195; }
350 @
351 @ /* <verbatim> blocks */
352 @ pre.verbatim {
353 @ background-color: #f5f5f5;
354 @ padding: 0.5em;
355 @ }
356 @
357 @ /* The label/value pairs on (for example) the ci page */
358 @ table.label-value th {
359 @ vertical-align: top;
360 @ text-align: right;
361 @ padding: 0.2ex 2ex;
362 @ }
363 @ ');
364 @ REPLACE INTO config VALUES('header','<html>
365 @ <head>
366 @ <title>$<project_name>: $<title></title>
367 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
368 @ href="$baseurl/timeline.rss">
369 @ <link rel="stylesheet" href="$baseurl/style.css" type="text/css"
370 @ media="screen">
371 @ </head>
372 @ <body>
373 @ <div class="header">
374 @ <div class="title">$<title></div>
375 @ <div class="status">
376 @ <div class="logo">$<project_name></div><br/>
377 @ <nobr><th1>
378 @ if {[info exists login]} {
379 @ puts "Logged in as $login"
380 @ } else {
381 @ puts "Not logged in"
382 @ }
383 @ </th1></nobr></div>
384 @ </div>
385 @ <div class="mainmenu"><th1>
386 @ html "<a href=''$baseurl$index_page''>Home</a> "
387 @ if {[hascap h]} {
388 @ html "<a href=''$baseurl/dir''>Files</a> "
389 @ }
390 @ if {[hascap o]} {
391 @ html "<a href=''$baseurl/leaves''>Leaves</a> "
392 @ html "<a href=''$baseurl/timeline''>Timeline</a> "
393 @ html "<a href=''$baseurl/brlist''>Branches</a> "
394 @ html "<a href=''$baseurl/taglist''>Tags</a> "
395 @ }
396 @ if {[hascap r]} {
397 @ html "<a href=''$baseurl/reportlist''>Tickets</a> "
398 @ }
399 @ if {[hascap j]} {
400 @ html "<a href=''$baseurl/wiki''>Wiki</a> "
401 @ }
402 @ if {[hascap s]} {
403 @ html "<a href=''$baseurl/setup''>Admin</a> "
404 @ } elseif {[hascap a]} {
405 @ html "<a href=''$baseurl/setup_ulist''>Users</a> "
406 @ }
407 @ if {[info exists login]} {
408 @ html "<a href=''$baseurl/login''>Logout</a> "
409 @ } else {
410 @ html "<a href=''$baseurl/login''>Login</a> "
411 @ }
412 @ </th1></div>
413 @ ');
414 @ REPLACE INTO config VALUES('footer','<div class="footer">
415 @ Fossil version $manifest_version $manifest_date
416 @ </div>
417 @ </body></html>
418 @ ');
419 ;
420
421 /*
422 ** An array of available built-in skins.
423 */
424 static struct BuiltinSkin {
@@ -225,10 +425,11 @@
425 const char *zName;
426 const char *zValue;
427 } aBuiltinSkin[] = {
428 { "Default", 0 /* Filled in at runtime */ },
429 { "Plain Gray, No Logo", zBuiltinSkin1 },
430 { "Khaki, No Logo", zBuiltinSkin2 },
431 };
432
433 /*
434 ** For a skin named zSkinName, compute the name of the CONFIG table
435 ** entry where that skin is stored and return it.
@@ -391,11 +592,11 @@
592 );
593 while( db_step(&q)==SQLITE_ROW ){
594 const char *zN = db_column_text(&q, 0);
595 const char *zV = db_column_text(&q, 1);
596 if( strcmp(zV, zCurrent)==0 ){
597 @ <li><p>%h(zN).&nbsp;&nbsp; <b>Currently In Use</b></p>
598 }else{
599 @ <li><form action="%s(g.zBaseURL)/setup_skin" method="POST">
600 @ %h(zN).&nbsp;&nbsp;
601 @ <input type="hidden" name="sn" value="%h(zN)">
602 @ <input type="submit" name="load" value="Use This Skin">
603

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button