update keybinding documentation; add `/` command to show fullscreen image of keybindings also in Help menu)

This commit is contained in:
stefan schippers 2025-04-06 12:58:13 +02:00
parent 035794df47
commit 24f2af8c81
7 changed files with 159 additions and 108 deletions

View File

@ -57,7 +57,6 @@ p{padding: 15px 30px 10px;}
This list is available in XSCHEM in the <kbd>Help</kbd> menu
</p>
<pre class="code" style="height: 600px;">
XSCHEM MOUSE BINDINGS
----------------------------------------------------------------------
LeftButton Clear selection and select a graphic object
@ -129,9 +128,13 @@ ctrl Enter Confirm closing dialog boxes
- Up Move up
ctrl Left Previous tab (if tabbed interface enabled)
ctrl Right Next tab (if tabbed interface enabled)
- ':' Toggle flat netlist
- '\' Toggle fullscreen
- '!' Break selected wires at any wire or component pin
connection
shift '&lt;' Show all layers
shift '&gt;' Show only current set layer
- '/' Show fullscreen image of bindkeys
- ' ' Pan schematic
- ' ' When drawing lines or wires toggle between
manhattan H-V, manhattan V-H or oblique path.
@ -264,7 +267,6 @@ ctrl '+' Test mode: change line width
ctrl '=' Toggle fill rectangles
- '$' Toggle pixmap saving
ctrl '$' Toggle use XCopyArea vs drawing primitives for drawing the screen
- ':' Toggle flat netlist
</pre><br>
<h3>KEYBIND CUSTOMIZATION</h3>

View File

@ -3255,7 +3255,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
}
else if(rstate == ControlMask) { /* clear schematic */
if(xctx->semaphore >= 2) break;
tcleval("xschem clear SCHEMATIC");
tcleval("xschem clear schematic");
}
break;
@ -3300,7 +3300,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
}
else if(rstate == ControlMask ) { /* clear symbol */
if(xctx->semaphore >= 2) break;
tcleval("xschem clear SYMBOL");
tcleval("xschem clear symbol");
}
break;
@ -4045,15 +4045,24 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
case '>':
if(xctx->semaphore >= 2) break;
if(xctx->draw_single_layer< cadlayers-1) xctx->draw_single_layer++;
xctx->draw_single_layer = xctx->rectcolor;
draw();
break;
case '<':
if(xctx->semaphore >= 2) break;
if(xctx->draw_single_layer>=0 ) xctx->draw_single_layer--;
xctx->draw_single_layer = -1;
draw();
break;
case '?':
if(xctx->semaphore >= 2) break;
tcleval("textwindow \"${XSCHEM_SHAREDIR}/xschem.help\"");
break;
case XK_slash:
if(xctx->semaphore >= 2) break;
tcleval("show_bindkeys");
break;
/* toggle flat netlist (only spice) */
case ':':
if(!tclgetboolvar("flat_netlist")) {

View File

@ -676,9 +676,10 @@ void draw_symbol(int what,int c, int n,int layer,short tmp_flip, short rot,
draw_texts:
if(xctx->inst[n].flags & PIN_OR_LABEL) c_for_text = TEXTWIRELAYER;
if(xctx->sym_txt && !(xctx->inst[n].flags & PIN_OR_LABEL)) c_for_text = TEXTLAYER;
if( !(xctx->inst[n].flags & HIDE_SYMBOL_TEXTS) && (layer == cadlayers - 1)) {
if(xctx->inst[n].flags & PIN_OR_LABEL) c_for_text = TEXTWIRELAYER;
if(xctx->sym_txt && !(xctx->inst[n].flags & PIN_OR_LABEL)) c_for_text = TEXTLAYER;
if(c != layer) c_for_text = c;
for(j=0;j< symptr->texts; ++j)
{
double xscale, yscale;
@ -702,6 +703,7 @@ void draw_symbol(int what,int c, int n,int layer,short tmp_flip, short rot,
}
}
if(textlayer < 0 || textlayer >= cadlayers) textlayer = c_for_text;
if(xctx->draw_single_layer != -1 && textlayer != xctx->draw_single_layer) continue;
/* display PINLAYER colored instance texts even if PINLAYER disabled */
if(xctx->inst[n].color == -PINLAYER || xctx->enable_layer[textlayer]) {
char *txtptr = NULL;
@ -4983,14 +4985,14 @@ void draw(void)
}
dbg(3, "draw(): check4\n");
for(c=0;c<cadlayers; ++c) {
if(xctx->draw_single_layer!=-1 && c != xctx->draw_single_layer) continue;
int draw_layer = (xctx->draw_single_layer == -1 || c == xctx->draw_single_layer);
cc = c; if(xctx->only_probes) cc = GRIDLAYER;
if(xctx->enable_layer[c]) for(i=0;i<xctx->lines[c]; ++i) {
if(draw_layer && xctx->enable_layer[c]) for(i=0;i<xctx->lines[c]; ++i) {
xLine *l = &xctx->line[c][i];
if(l->bus) drawline(cc, THICK, l->x1, l->y1, l->x2, l->y2, l->dash, NULL);
else drawline(cc, ADD, l->x1, l->y1, l->x2, l->y2, l->dash, NULL);
}
if(xctx->enable_layer[c]) for(i=0;i<xctx->rects[c]; ++i) {
if(draw_layer && xctx->enable_layer[c]) for(i=0;i<xctx->rects[c]; ++i) {
xRect *r = &xctx->rect[c][i];
#if HAS_CAIRO==1
if(c != GRIDLAYER || !(r->flags & (1 + 1024)))
@ -5002,12 +5004,12 @@ void draw(void)
if(r->fill) filledrect(cc, ADD, r->x1, r->y1, r->x2, r->y2, r->fill, r->ellipse_a, r->ellipse_b);
}
}
if(xctx->enable_layer[c]) for(i=0;i<xctx->arcs[c]; ++i) {
if(draw_layer && xctx->enable_layer[c]) for(i=0;i<xctx->arcs[c]; ++i) {
xArc **arc = xctx->arc;
drawarc(cc, ADD, arc[c][i].x, arc[c][i].y, arc[c][i].r, arc[c][i].a, arc[c][i].b,
arc[c][i].fill, arc[c][i].dash);
}
if(xctx->enable_layer[c]) for(i=0;i<xctx->polygons[c]; ++i) {
if(draw_layer && xctx->enable_layer[c]) for(i=0;i<xctx->polygons[c]; ++i) {
int bezier;
xPoly *p = &xctx->poly[c][i];
bezier = 2 + !strboolcmp(get_tok_value(p->prop_ptr, "bezier", 0), "true");
@ -5034,7 +5036,9 @@ void draw(void)
symptr->polygons[c] ||
((c==cadlayers - 1) && symptr->texts) )
{
draw_symbol(ADD, cc, i,c, 0, 0, 0.0, 0.0); /* ... then draw current layer */
if(c == 0 || c == cadlayers - 1 || draw_layer) {
draw_symbol(ADD, cc, i,c, 0, 0, 0.0, 0.0); /* ... then draw current layer */
}
}
}
filledrect(cc, END, 0.0, 0.0, 0.0, 0.0, 2, -1, -1); /* fill parameter must be 2! */
@ -5067,56 +5071,55 @@ void draw(void)
filledrect(cc, END, 0.0, 0.0, 0.0, 0.0, 2, -1, -1); /* fill parameter must be 2! */
drawline(cc, END, 0.0, 0.0, 0.0, 0.0, 0, NULL);
}
if(xctx->draw_single_layer ==-1 || xctx->draw_single_layer==TEXTLAYER) {
for(i=0;i<xctx->texts; ++i)
{
const char *txt_ptr;
textlayer = xctx->text[i].layer;
if(!xctx->show_hidden_texts && (xctx->text[i].flags & HIDE_TEXT)) continue;
if(xctx->only_probes) textlayer = GRIDLAYER;
else if(textlayer < 0 || textlayer >= cadlayers) textlayer = TEXTLAYER;
#if HAS_CAIRO==1
if(!xctx->enable_layer[textlayer]) continue;
textfont = xctx->text[i].font;
if( (textfont && textfont[0]) ||
(xctx->text[i].flags & (TEXT_BOLD | TEXT_OBLIQUE | TEXT_ITALIC))) {
cairo_font_slant_t slant;
cairo_font_weight_t weight;
textfont = (xctx->text[i].font && xctx->text[i].font[0]) ?
xctx->text[i].font : tclgetvar("cairo_font_name");
weight = ( xctx->text[i].flags & TEXT_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
slant = CAIRO_FONT_SLANT_NORMAL;
if(xctx->text[i].flags & TEXT_ITALIC) slant = CAIRO_FONT_SLANT_ITALIC;
if(xctx->text[i].flags & TEXT_OBLIQUE) slant = CAIRO_FONT_SLANT_OBLIQUE;
for(i=0;i<xctx->texts; ++i)
{
const char *txt_ptr;
textlayer = xctx->text[i].layer;
if(!xctx->show_hidden_texts && (xctx->text[i].flags & HIDE_TEXT)) continue;
if(xctx->only_probes) textlayer = GRIDLAYER;
else if(textlayer < 0 || textlayer >= cadlayers) textlayer = TEXTLAYER;
#if HAS_CAIRO==1
if(!xctx->enable_layer[textlayer]) continue;
if(xctx->draw_single_layer != -1 && xctx->draw_single_layer != textlayer) continue;
textfont = xctx->text[i].font;
if( (textfont && textfont[0]) ||
(xctx->text[i].flags & (TEXT_BOLD | TEXT_OBLIQUE | TEXT_ITALIC))) {
cairo_font_slant_t slant;
cairo_font_weight_t weight;
textfont = (xctx->text[i].font && xctx->text[i].font[0]) ?
xctx->text[i].font : tclgetvar("cairo_font_name");
weight = ( xctx->text[i].flags & TEXT_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
slant = CAIRO_FONT_SLANT_NORMAL;
if(xctx->text[i].flags & TEXT_ITALIC) slant = CAIRO_FONT_SLANT_ITALIC;
if(xctx->text[i].flags & TEXT_OBLIQUE) slant = CAIRO_FONT_SLANT_OBLIQUE;
cairo_save(xctx->cairo_ctx);
cairo_save(xctx->cairo_save_ctx);
xctx->cairo_font =
cairo_toy_font_face_create(textfont, slant, weight);
cairo_set_font_face(xctx->cairo_ctx, xctx->cairo_font);
cairo_set_font_face(xctx->cairo_save_ctx, xctx->cairo_font);
cairo_font_face_destroy(xctx->cairo_font);
}
#endif
txt_ptr = get_text_floater(i);
dbg(1, "draw(): drawing string %d = %s\n",i, txt_ptr);
draw_string(textlayer, ADD, txt_ptr,
xctx->text[i].rot, xctx->text[i].flip, xctx->text[i].hcenter, xctx->text[i].vcenter,
xctx->text[i].x0,xctx->text[i].y0,
xctx->text[i].xscale, xctx->text[i].yscale);
#if HAS_CAIRO==1
if( (textfont && textfont[0]) ||
(xctx->text[i].flags & (TEXT_BOLD | TEXT_OBLIQUE | TEXT_ITALIC))) {
cairo_restore(xctx->cairo_ctx);
cairo_restore(xctx->cairo_save_ctx);
}
#endif
#if HAS_CAIRO!=1
drawrect(textlayer, END, 0.0, 0.0, 0.0, 0.0, 0, -1, -1);
drawline(textlayer, END, 0.0, 0.0, 0.0, 0.0, 0, NULL);
#endif
} /* for(i=0;i<xctx->texts; ++i) */
} /* if(xctx->draw_single_layer ==-1 || xctx->draw_single_layer==TEXTLAYER) */
cairo_save(xctx->cairo_ctx);
cairo_save(xctx->cairo_save_ctx);
xctx->cairo_font =
cairo_toy_font_face_create(textfont, slant, weight);
cairo_set_font_face(xctx->cairo_ctx, xctx->cairo_font);
cairo_set_font_face(xctx->cairo_save_ctx, xctx->cairo_font);
cairo_font_face_destroy(xctx->cairo_font);
}
#endif
txt_ptr = get_text_floater(i);
dbg(1, "draw(): drawing string %d = %s\n",i, txt_ptr);
draw_string(textlayer, ADD, txt_ptr,
xctx->text[i].rot, xctx->text[i].flip, xctx->text[i].hcenter, xctx->text[i].vcenter,
xctx->text[i].x0,xctx->text[i].y0,
xctx->text[i].xscale, xctx->text[i].yscale);
#if HAS_CAIRO==1
if( (textfont && textfont[0]) ||
(xctx->text[i].flags & (TEXT_BOLD | TEXT_OBLIQUE | TEXT_ITALIC))) {
cairo_restore(xctx->cairo_ctx);
cairo_restore(xctx->cairo_save_ctx);
}
#endif
#if HAS_CAIRO!=1
drawrect(textlayer, END, 0.0, 0.0, 0.0, 0.0, 0, -1, -1);
drawline(textlayer, END, 0.0, 0.0, 0.0, 0.0, 0, NULL);
#endif
} /* for(i=0;i<xctx->texts; ++i) */
if(xctx->only_probes) build_colors(1.0, 0);
if(xctx->only_probes) {
xctx->save_lw = xctx->lw;

View File

@ -69,9 +69,13 @@ ctrl Enter Confirm closing dialog boxes
- Up Move up
ctrl Left Previous tab (if tabbed interface enabled)
ctrl Right Next tab (if tabbed interface enabled)
- ':' Toggle flat netlist
- '\' Toggle fullscreen
- '!' Break selected wires at any wire or component pin
connection
shift '<' Show all layers
shift '>' Show only current set layer
- '/' Show fullscreen image of bindkeys
- ' ' Pan schematic
- ' ' When drawing lines or wires toggle between
manhattan H-V, manhattan V-H or oblique path.
@ -204,4 +208,3 @@ ctrl '+' Test mode: change line width
ctrl '=' Toggle fill rectangles
- '$' Toggle pixmap saving
ctrl '$' Toggle use XCopyArea vs drawing primitives for drawing the screen
- ':' Toggle flat netlist

View File

@ -1242,7 +1242,7 @@ int preview_window(const char *what, const char *win_path, const char *fname)
}
}
else if(!strcmp(what, "draw") ) {
int i;
int i, save_grid = tclgetboolvar("draw_grid");
for(i = 0; i < 10; i++) {
if(Tk_NameToWindow(interp, win_path, mainwindow) == tkpre_window[i] && tkpre_window[i]) break;
}
@ -1269,7 +1269,9 @@ int preview_window(const char *what, const char *win_path, const char *fname)
} else {
if(xctx) resetwin(1, 1, 0, 0, 0); /* resetwin(create_pixmap, clear_pixmap, force) */
}
Tcl_SetVar(interp, "draw_grid", "0", TCL_GLOBAL_ONLY);
zoom_full(1, 0, 1 + 2 * tclgetboolvar("zoom_full_center"), 0.97); /* draw */
Tcl_SetVar(interp, "draw_grid", save_grid ? "1" : "0", TCL_GLOBAL_ONLY);
xctx = save_xctx;
result = 1;
}

View File

@ -8530,6 +8530,28 @@ proc switch_window {parent topwin event window} {
}
}
}
proc show_bindkeys {} {
global dark_colorscheme dim_value dim_bg
if {[winfo exists .bk]} {return}
toplevel .bk -bg {}
wm attributes .bk -fullscreen 1
set save $dark_colorscheme
set dark_colorscheme 0
set dim_value 0.0
set dim_bg 0.0
xschem build_colors
xschem preview_window create .bk
xschem preview_window draw .bk [abs_sym_path bindkeys_cheatsheet.sym]
set dark_colorscheme $save
xschem build_colors
bind .bk <ButtonPress> {xschem preview_window destroy .bk }
bind .bk <KeyPress> {xschem preview_window destroy .bk }
bind .bk <Expose> {xschem preview_window draw .bk }
}
proc set_bindings {topwin} {
global env has_x OS autofocus_mainwindow
@ -8584,17 +8606,6 @@ global env has_x OS autofocus_mainwindow
bind $topwin <ButtonRelease> "xschem callback %W %T %x %y 0 %b 0 %s"
#### test: show keybindings
# bind $topwin <KeyPress-slash> "
# if {!\[info exists bindkeys\]} {
# set bindkeys 1
# xschem preview_window create $topwin
# xschem preview_window draw $topwin [abs_sym_path bindkeys_cheatsheet.sym]
# } else {
# unset bindkeys
# xschem preview_window $topwin close
# xschem redraw
# }
# "
bind $topwin <KeyPress> "
if {{%K} eq {Escape}} { destroy .ctxmenu }
xschem callback %W %T %x %y %N 0 0 %s"
@ -8618,7 +8629,6 @@ global env has_x OS autofocus_mainwindow
"
}
bind $topwin <Unmap> " wm withdraw .infotext; set show_infowindow 0 "
bind $topwin "?" {textwindow "${XSCHEM_SHAREDIR}/xschem.help"}
# on Windows Alt key mask is reported as 131072 (1<<17) so build masks manually with values passed from C code
if {$OS == "Windows" } {
@ -8811,6 +8821,7 @@ proc build_widgets { {topwin {} } } {
$topwin.menubar.help add command -label "Help" -command "textwindow \"${XSCHEM_SHAREDIR}/xschem.help\" ro" \
-accelerator {?}
$topwin.menubar.help add command -label "Keys" -command "textwindow \"${XSCHEM_SHAREDIR}/keys.help\" ro"
$topwin.menubar.help add command -label "Show Keybindings" -command "show_bindkeys"
$topwin.menubar.help add command -label "About XSCHEM" -command "about"
$topwin.menubar.file add command -label "Clear Schematic" -accelerator Ctrl+N\

View File

@ -109,8 +109,7 @@ T {F11} 882.5 -477.5 0 0 0.4 0.4 {lock=0}
T {F12} 962.5 -477.5 0 0 0.4 0.4 {lock=0}
T {Ins} 1042.5 -477.5 0 0 0.4 0.4 {lock=0}
T {Del} 1122.5 -477.5 0 0 0.4 0.4 {lock=0}
T {~
\\} 2.5 -397.5 0 0 0.4 0.4 {lock=0}
T {`} 2.5 -397.5 0 0 0.4 0.4 {lock=0}
T {Q} 122.5 -317.5 0 0 0.4 0.4 {lock=0}
T {W} 202.5 -317.5 0 0 0.4 0.4 {lock=0}
T {E} 282.5 -317.5 0 0 0.4 0.4 {lock=0}
@ -120,12 +119,9 @@ T {U} 602.5 -317.5 0 0 0.4 0.4 {lock=0}
T {I} 682.5 -317.5 0 0 0.4 0.4 {lock=0}
T {O} 762.5 -317.5 0 0 0.4 0.4 {lock=0}
T {P} 842.5 -317.5 0 0 0.4 0.4 {lock=0}
T {\{
[} 922.5 -317.5 0 0 0.4 0.4 {lock=0}
T {\}
]} 1002.5 -317.5 0 0 0.4 0.4 {lock=0}
T {|
\\} 1082.5 -317.5 0 0 0.4 0.4 {lock=0}
T {\{} 922.5 -317.5 0 0 0.4 0.4 {lock=0}
T {\}} 1002.5 -317.5 0 0 0.4 0.4 {lock=0}
T {\\} 1082.5 -317.5 0 0 0.4 0.4 {lock=0}
T {Tab} 2.5 -317.5 0 0 0.4 0.4 {lock=0}
T {Caps Lock} 2.5 -237.5 0 0 0.4 0.4 {lock=0}
T {A} 162.5 -237.5 0 0 0.4 0.4 {lock=0}
@ -137,10 +133,8 @@ T {H} 562.5 -237.5 0 0 0.4 0.4 {lock=0}
T {J} 642.5 -237.5 0 0 0.4 0.4 {lock=0}
T {K} 722.5 -237.5 0 0 0.4 0.4 {lock=0}
T {L} 802.5 -237.5 0 0 0.4 0.4 {lock=0}
T {:
;} 882.5 -237.5 0 0 0.4 0.4 {lock=0}
T {"
'} 962.5 -237.5 0 0 0.4 0.4 {lock=0}
T {;} 882.5 -237.5 0 0 0.4 0.4 {lock=0}
T {'} 962.5 -237.5 0 0 0.4 0.4 {lock=0}
T {Enter} 1042.5 -237.5 0 0 0.4 0.4 {lock=0}
T {Shift} 2.5 -157.5 0 0 0.4 0.4 {layer=12
lock=0}
@ -151,12 +145,9 @@ T {V} 442.5 -157.5 0 0 0.4 0.4 {lock=0}
T {B} 522.5 -157.5 0 0 0.4 0.4 {lock=0}
T {N} 602.5 -157.5 0 0 0.4 0.4 {lock=0}
T {M} 682.5 -157.5 0 0 0.4 0.4 {lock=0}
T {<
,} 762.5 -157.5 0 0 0.4 0.4 {lock=0}
T {>
.} 842.5 -157.5 0 0 0.4 0.4 {lock=0}
T {?
/} 922.5 -157.5 0 0 0.4 0.4 {lock=0}
T {,} 762.5 -157.5 0 0 0.4 0.4 {lock=0}
T {.} 842.5 -157.5 0 0 0.4 0.4 {lock=0}
T {/} 922.5 -157.5 0 0 0.4 0.4 {lock=0}
T {Shift} 1002.5 -157.5 0 0 0.4 0.4 {layer=12
lock=0}
T {Ctrl} 2.5 -77.5 0 0 0.4 0.4 {layer=4
@ -181,10 +172,8 @@ T {7} 562.5 -397.5 0 0 0.4 0.4 {lock=0}
T {8} 642.5 -397.5 0 0 0.4 0.4 {lock=0}
T {9} 722.5 -397.5 0 0 0.4 0.4 {lock=0}
T {0} 802.5 -397.5 0 0 0.4 0.4 {lock=0}
T {_
-} 882.5 -397.5 0 0 0.4 0.4 {lock=0}
T {+
=} 962.5 -397.5 0 0 0.4 0.4 {lock=0}
T {-} 882.5 -397.5 0 0 0.4 0.4 {lock=0}
T {=} 962.5 -397.5 0 0 0.4 0.4 {lock=0}
T {Backspace} 1042.5 -397.5 0 0 0.4 0.4 {lock=0}
T {Abort oper.} 2.5 -415 0 0 0.18 0.18 {}
T {Select all} 162.5 -195 0 0 0.18 0.18 {layer=4}
@ -348,7 +337,7 @@ T {Set layer 1} 82.5 -355 0 0 0.18 0.18 {layer=4}
T {Break wires} 82.5 -343.75 0 0 0.18 0.18 {layer=12}
T {Set logic to 1} 82.5 -332.5 0 0 0.18 0.18 {}
T {-} 82.5 -366.25 0 0 0.18 0.18 {layer=7}
T {-} 82.5 -377.5 0 0 0.18 0.18 {layer=6}
T {Brk & rm wires} 82.5 -377.5 0 0 0.18 0.18 {layer=6}
T {Set layer 2} 162.5 -355 0 0 0.18 0.18 {layer=4}
T {-} 162.5 -343.75 0 0 0.18 0.18 {layer=12}
T {Set logic to X} 162.5 -332.5 0 0 0.18 0.18 {}
@ -384,11 +373,11 @@ T {-} 722.5 -343.75 0 0 0.18 0.18 {layer=12}
T {-} 722.5 -332.5 0 0 0.18 0.18 {}
T {-} 722.5 -366.25 0 0 0.18 0.18 {layer=7}
T {-} 722.5 -377.5 0 0 0.18 0.18 {layer=6}
T {-} 1102.5 -275 0 0 0.18 0.18 {layer=4}
T {Reserved} 1102.5 -263.75 0 0 0.18 0.18 {layer=12}
T {Toggle fullscreen} 1102.5 -252.5 0 0 0.18 0.18 {}
T {-} 1102.5 -286.25 0 0 0.18 0.18 {layer=7}
T {-} 1102.5 -297.5 0 0 0.18 0.18 {layer=6}
T {-} 1082.5 -275 0 0 0.18 0.18 {layer=4}
T {Reserved} 1082.5 -263.75 0 0 0.18 0.18 {layer=12}
T {Toggle fullscreen} 1082.5 -252.5 0 0 0.18 0.18 {}
T {-} 1082.5 -286.25 0 0 0.18 0.18 {layer=7}
T {-} 1082.5 -297.5 0 0 0.18 0.18 {layer=6}
T {-} 412.5 -35 0 0 0.18 0.18 {layer=4}
T {-} 412.5 -23.75 0 0 0.18 0.18 {layer=12}
T {Toggle manhattan drawing / pan schematic} 412.5 -12.5 0 0 0.18 0.18 {}
@ -405,12 +394,12 @@ T {Del selection} 1122.5 -412.5 0 0 0.18 0.18 {}
T {-} 1122.5 -446.25 0 0 0.18 0.18 {layer=7}
T {-} 1122.5 -457.5 0 0 0.18 0.18 {layer=6}
T {Help} 922.5 -103.75 0 0 0.18 0.18 {layer=12}
T {-} 922.5 -92.5 0 0 0.18 0.18 {}
T {Show bindkeys} 922.5 -92.5 0 0 0.18 0.18 {}
T {Flat netlist} 882.5 -183.75 0 0 0.18 0.18 {layer=12}
T {Reserved} 882.5 -172.5 0 0 0.18 0.18 {}
T {Incr line width} 962.5 -355 0 0 0.18 0.18 {layer=4}
T {Toggle fill style} 962.5 -355 0 0 0.18 0.18 {layer=4}
T {-} 962.5 -343.75 0 0 0.18 0.18 {layer=12}
T {Toggle fill style} 962.5 -332.5 0 0 0.18 0.18 {}
T {-} 962.5 -332.5 0 0 0.18 0.18 {}
T {Decr line width} 882.5 -355 0 0 0.18 0.18 {layer=4}
T {Change line w.} 882.5 -343.75 0 0 0.18 0.18 {layer=12}
T {-} 882.5 -332.5 0 0 0.18 0.18 {}
@ -423,4 +412,36 @@ T {-} 1042.5 -446.25 0 0 0.18 0.18 {layer=7}
T {-} 1042.5 -457.5 0 0 0.18 0.18 {layer=6}
T {Reserved} 2.5 -343.75 0 0 0.18 0.18 {layer=12}
T {-} 2.5 -332.5 0 0 0.18 0.18 {}
T {BINDKEYS CHEATSHEET} 0 -630 0 0 2 2 {}
T {BINDKEYS CHEATSHEET} 250 -560 0 0 1.2 1.2 {}
T {~} 77.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {[} 997.5 -317.5 0 1 0.4 0.4 {lock=0 layer=12}
T {]} 1077.5 -317.5 0 1 0.4 0.4 {lock=0 layer=12}
T {|} 1157.5 -317.5 0 1 0.4 0.4 {lock=0 layer=12}
T {:} 957.5 -237.5 0 1 0.4 0.4 {lock=0 layer=12}
T {"} 1037.5 -237.5 0 1 0.4 0.4 {lock=0 layer=12}
T {<} 837.5 -157.5 0 1 0.4 0.4 {lock=0 layer=12}
T {>} 917.5 -157.5 0 1 0.4 0.4 {lock=0 layer=12}
T {?} 997.5 -157.5 0 1 0.4 0.4 {lock=0 layer=12}
T {!} 157.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {@} 237.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {#} 317.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {$} 397.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {%} 477.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {^} 557.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {&} 637.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {*} 717.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {(} 797.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {)} 877.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {_} 957.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {+} 1037.5 -397.5 0 1 0.4 0.4 {lock=0 layer=12}
T {-} 762.5 -115 0 0 0.18 0.18 {layer=4}
T {Draw all layers} 762.5 -103.75 0 0 0.18 0.18 {layer=12}
T {-} 762.5 -92.5 0 0 0.18 0.18 {}
T {-} 762.5 -126.25 0 0 0.18 0.18 {layer=7}
T {-} 762.5 -137.5 0 0 0.18 0.18 {layer=6}
T {-} 842.5 -115 0 0 0.18 0.18 {layer=4}
T {Draw cur. layer} 842.5 -103.75 0 0 0.18 0.18 {layer=12}
T {-} 842.5 -92.5 0 0 0.18 0.18 {}
T {-} 842.5 -126.25 0 0 0.18 0.18 {layer=7}
T {-} 842.5 -137.5 0 0 0.18 0.18 {layer=6}
T {Incr line width} 962.5 -366.25 0 0 0.18 0.18 {layer=6}