Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
howtos:using_with_tcl_tk [2018/04/15 06:38] – simplified separator aplsimplehowtos:using_with_tcl_tk [2019/09/15 14:30] (current) – links updated aplsimple
Line 26: Line 26:
   * passing a selected text to the menu commands to process   * passing a selected text to the menu commands to process
  
-  * the selection can be passed as underlined ("_" instead " ")+  * the selection can be passed as underlined ("_" instead of " "), 'plused' ("+" instead of " ") or stripped of special symbols (", $, %, {}, [], <>, *)
  
   * commands can be run by itself and by shell in console box   * commands can be run by itself and by shell in console box
Line 32: Line 32:
   * commands can be run with or without waiting their completion   * commands can be run with or without waiting their completion
  
-  * internal command //%%s// means "edit/create in Geany a file(s) with name(s) = selected text" \\ (opens/creates in Geany //f1 f2 f3// files if //%s="f1 f2 f3"//+  * internal command //%%s// means "edit/create in Geany a file(s) with name(s) = selected text" \\ (opens/creates in Geany //f1 f2 f3// files if //%s="f1 f2 f3"//
-  * internal command //%"%s"// means "browse an internet link = selected text" +  * internal command //%"%s"// means "browse an internet link = selected text" 
-  * internal command //%"title" "message %s"// means "ask a confirmation, possibly with selected text"+  * internal command //%"title" "message %s"// means "ask a confirmation, possibly with selected text"
  
-  * a batch of commands can be under one menu item+  * a batch of commands can be united under a single menu item
  
   * any command can be confirmed, with message box of title and text including Geany selection   * any command can be confirmed, with message box of title and text including Geany selection
Line 45: Line 45:
  
   * a child menu can be called with or without waiting it, with or without closing its parent menu   * a child menu can be called with or without waiting it, with or without closing its parent menu
 +
 +  * a child menu can be called with closing its parent and calling back the parent after closing the child
  
   * menus can be called (or made afterwards) as 'stayed on the top'   * menus can be called (or made afterwards) as 'stayed on the top'
Line 64: Line 66:
   * any menu item can be assigned to 'autorun' at start of [[using_with_tcl_tk|e_menu]] (submenus including)   * any menu item can be assigned to 'autorun' at start of [[using_with_tcl_tk|e_menu]] (submenus including)
  
-  * to 'autorun' may be assigned commands that are invisible in menu (submenus excluding)+  * commands that are invisible in menu may be assigned to 'autorun' (submenus including)
  
-  * any Tcl command(s) can be assigned to 'autorun' at start of [[using_with_tcl_tk|e_menu]]+  * Tcl command(s) can be assigned to 'autorun' at start of [[using_with_tcl_tk|e_menu]]
  
   * menus can be edited in Geany 'on fly' and then re-read   * menus can be edited in Geany 'on fly' and then re-read
Line 78: Line 80:
   * items can be run repeatedly at intervals set in seconds   * items can be run repeatedly at intervals set in seconds
  
-  * [[using_with_tcl_tk|e_menu]] neighboring applications can be killed with two keystrokes (well fit to clear+  * [[using_with_tcl_tk|e_menu]] neighboring applications can be killed with two keystrokes (sort of clearance)
  
-  * there are a lot of 'look and feel' options (inc. highlighting 'master' or 'dangerous' menus)+  * there are a lot of 'look and feel' options (incl. highlighting 'master' or 'dangerous' menus)
  
   * the options may be set at calling of [[using_with_tcl_tk|e_menu]] and/or in [OPTIONS] section of a menu   * the options may be set at calling of [[using_with_tcl_tk|e_menu]] and/or in [OPTIONS] section of a menu
Line 86: Line 88:
   * parent menu options are inherited by child menu and can be overridden by its [OPTIONS]   * parent menu options are inherited by child menu and can be overridden by its [OPTIONS]
  
-  * as an example, [[https://git-scm.com/|git]] support of Geany IDE can be easily implemented with [[using_with_tcl_tk|e_menu]]+  * for an easy exercise, [[https://git-scm.com/|git]] as well as [[http://fossil-scm.org|fossil]] support of Geany IDE can be implemented with [[using_with_tcl_tk|e_menu]]
  
   * encoding of menus is utf-8   * encoding of menus is utf-8
Line 94: Line 96:
 ===== Context action of Geany IDE ===== ===== Context action of Geany IDE =====
  
-I try and show how the Geany context command can be used with all its beauty.+I try and show how the Geany context command can be used in all its beauty.
  
 Imagine we have a Python module under testing in Geany. And it is called with parameters. And the parameters are changed from time to time. Imagine we have a Python module under testing in Geany. And it is called with parameters. And the parameters are changed from time to time.
Line 130: Line 132:
 1. If you do not have [[http://www.tcl.tk|Tcl/Tk]] on your system, install it from [[http://www.tcl.tk|www.tcl.tk]]. Linux users have it preinstalled, most likely. Though in Linux it may be necessary to install //tklib, tcl-tls// packages or even to update Tcl to 8.6 version. On Mac [[using_with_tcl_tk|e_menu]] hasn't been tested. 1. If you do not have [[http://www.tcl.tk|Tcl/Tk]] on your system, install it from [[http://www.tcl.tk|www.tcl.tk]]. Linux users have it preinstalled, most likely. Though in Linux it may be necessary to install //tklib, tcl-tls// packages or even to update Tcl to 8.6 version. On Mac [[using_with_tcl_tk|e_menu]] hasn't been tested.
  
-2. Unpack the below attached zip to save files:+2. Unpack the below attached zip to save: 
 + 
 +    e_menu 
 +    menus directory 
 +    src directory
  
-    emenu 
-    ehelp 
-    rarrow.png 
-    run_pause.bat 
-    run_pause.sh 
-    ...etc... 
 into some directory, e.g. /home/me/UTILS/e_menu (for Windows it may be C:\Users\me\UTILS\e_menu). into some directory, e.g. /home/me/UTILS/e_menu (for Windows it may be C:\Users\me\UTILS\e_menu).
  
 3. Go to Geany's menu 'Edit/Settings', then to 'Tools' page and enter in the 'Context action' field: 3. Go to Geany's menu 'Edit/Settings', then to 'Tools' page and enter in the 'Context action' field:
  
-    wish /home/me/UTILS/e_menu/emenu "s=%s"+    wish /home/me/UTILS/e_menu/e_menu "s=%s"
  
 Uff. Now you should be able to call the context help. While editing your [[http://www.tcl.tk|Tcl/Tk]] script, select a [[http://www.tcl.tk|Tcl/Tk]] command or simply place the caret on it and call "Context action" from popup menu. You should see something like: Uff. Now you should be able to call the context help. While editing your [[http://www.tcl.tk|Tcl/Tk]] script, select a [[http://www.tcl.tk|Tcl/Tk]] command or simply place the caret on it and call "Context action" from popup menu. You should see something like:
Line 170: Line 170:
 **// **//
  
-    wish emenu [s=%s] [m=menufile] [options]+    wish e_menu [s=%s] [m=menufile] [options]
  
 //** //**
Line 209: Line 209:
 |// fs=number //|size of fonts used in menu| fs=9| |// fs=number //|size of fonts used in menu| fs=9|
 |// "f1=font" //|name of font used in menu header| "f1=Liberation Sans" | |// "f1=font" //|name of font used in menu header| "f1=Liberation Sans" |
-|// "f2=font" //|name of font used in menu entries| "f1=Liberation Mono"|+|// "f2=font" //|name of font used in menu entries| "f2=Liberation Mono"|
 |// w=number //|width of menu items (in characters)| w=30 | |// w=number //|width of menu items (in characters)| w=30 |
-|// c=number //|index of color scheme (0 through 11)| c=1 |+|// c=number //|index of color scheme (0 through 12)| c=1 |
 |// o=number //|'ornament' (view mode)|o=0 - no header, no prompts shown \\ o=1 - header only shown (default) \\ o=2 - prompts only shown \\ o=3 - both prompts and header shown| |// o=number //|'ornament' (view mode)|o=0 - no header, no prompts shown \\ o=1 - header only shown (default) \\ o=2 - prompts only shown \\ o=3 - both prompts and header shown|
 |//bd=number //|sets a border width of menu items|bd=0 - minimum \\ bd=1| |//bd=number //|sets a border width of menu items|bd=0 - minimum \\ bd=1|
Line 221: Line 221:
 |// g=+x+y //|sets (x,y) screen coordinates of menu| g=+700+200| |// g=+x+y //|sets (x,y) screen coordinates of menu| g=+700+200|
 |// wc=1 // |centers a menu on screen|wc=1| |// wc=1 // |centers a menu on screen|wc=1|
-|// "h=path" //|path to offline Tcl/Tk help (e.g. "h=/home/me/Tcl/tcl8.6")|<nowiki>"h=/home/me/DOC/www.tcl.tk/man/tcl8.6"</nowiki>+|// "h=path" //|path to offline Tcl/Tk help|<nowiki>"h=/home/me/DOC/www.tcl.tk/man/tcl8.6"</nowiki>
-|// "b=browser" //|a browser to be used for viewing Tcl/Tk help (also used in a menu command "%link")|b=/usr/bin/epiphany|+|// "b=browser" //|a browser to be used for viewing Tcl/Tk help (also used in a menu command "%link")|b=/usr/bin/epiphany|
 |// "u=string" //|value of string that is underscored|"u=%s"| |// "u=string" //|value of string that is underscored|"u=%s"|
 |// "qq=string" //|value of string with quotes (") escaped|"qq=%s"| |// "qq=string" //|value of string with quotes (") escaped|"qq=%s"|
Line 236: Line 236:
 |// ah=list //|sets a list of hotkeys of autorun menu items of [HIDDEN] section to be run at start of [[using_with_tcl_tk|e_menu]]|ah=1,2,3| |// ah=list //|sets a list of hotkeys of autorun menu items of [HIDDEN] section to be run at start of [[using_with_tcl_tk|e_menu]]|ah=1,2,3|
 |// "a2=Tcl command(s)" //|sets Tcl command(s) to be run at start of [[using_with_tcl_tk|e_menu]] __after__ processing //a=list// (see above)|"a2=d {Hello! \n\n Today is [clock format [set systime [clock seconds]] -format {%A %d-%m-%Y %H:%M}] \n\n Current dir: [pwd]}"| |// "a2=Tcl command(s)" //|sets Tcl command(s) to be run at start of [[using_with_tcl_tk|e_menu]] __after__ processing //a=list// (see above)|"a2=d {Hello! \n\n Today is [clock format [set systime [clock seconds]] -format {%A %d-%m-%Y %H:%M}] \n\n Current dir: [pwd]}"|
-|// P=syms // |sets a symbol(s) used instead of "%" in the  [[using_with_tcl_tk|e_menu]] call|It's important if the caller of  [[using_with_tcl_tk|e_menu]] (Geany, shell) uses % literals conflicting with  [[using_with_tcl_tk|e_menu]]'s parameters. \\ Example of overcoming Geany's %d substitution: \\ wish emenu "s=%s" P=# "t2=#A #d-#m-#Y #H:#M"|+|// P=syms // |sets a symbol(s) used instead of "%" in the  [[using_with_tcl_tk|e_menu]] call|It's important if the caller of  [[using_with_tcl_tk|e_menu]] (Geany, shell) uses % literals conflicting with  [[using_with_tcl_tk|e_menu]]'s parameters. \\ Example of overcoming Geany's %d substitution: \\ wish e_menu "s=%s" P=# "t2=#A #d-#m-#Y #H:#M"|
 |// pa=number //|sets a pause (in milliseconds) to suspend [[using_with_tcl_tk|e_menu]] before starting it; sometimes it may be desirable|pa=500| |// pa=number //|sets a pause (in milliseconds) to suspend [[using_with_tcl_tk|e_menu]] before starting it; sometimes it may be desirable|pa=500|
 |// "x*=string" //| e_menu wildcard %x* of commands|"x=%s" "x0=%s" "xz=%s"| |// "x*=string" //| e_menu wildcard %x* of commands|"x=%s" "x0=%s" "xz=%s"|
Line 262: Line 262:
     R:  R: 6     R:  R: 6
     R: Firefox search for "%s" R: firefox -search "%s"     R: Firefox search for "%s" R: firefox -search "%s"
-    R: Wikipedia for "%s" R:%https://en.wikipedia.org/w/index.php?cirrusUserTesting=classic-explorer-i&search=%+ +    R: Wikipedia for "%s" R:%https://en.wikipedia.org/w/index.php?cirrusUserTesting=classic-explorer-i&search=%+ 
-    R: Open/create file(s) "%s" R:%%s+    R: Open/create file(s) "%s" R:%%s
     R: geany: edit all          R: geany readme.md wiki.txt e_help.tcl e_menu.tcl     R: geany: edit all          R: geany readme.md wiki.txt e_help.tcl e_menu.tcl
          
Line 302: Line 302:
  ** 1. **  ** 1. **
  
-    wish /home/me/e_menu/emenu "s=%s" "m=menus/menu.mnu" \+    wish /home/me/e_menu/e_menu "s=%s" "m=menus/menu.mnu" \
       "h=/home/me/DOC/Tcl/tcl8.6" c=1 fs=11 \       "h=/home/me/DOC/Tcl/tcl8.6" c=1 fs=11 \
       "PD=/home/me/PG/projects/e_menu" b=/usr/bin/epiphany a=6,b       "PD=/home/me/PG/projects/e_menu" b=/usr/bin/epiphany a=6,b
Line 336: Line 336:
     cd $DIR     cd $DIR
          
-    wish ./emenu "s0=$PROJECT" "s1=$THEME" "s2=$SUBJ" "b=$BROWSER" "PD=$DIR" \+    wish ./e_menu "s0=$PROJECT" "s1=$THEME" "s2=$SUBJ" "b=$BROWSER" "PD=$DIR" \
       m=menus/git.mnu g=$LEFT+30 t=1 o=0 w=21 fs=10 pa=100 &       m=menus/git.mnu g=$LEFT+30 t=1 o=0 w=21 fs=10 pa=100 &
          
-    wish ./emenu "b=$BROWSER" "PD=$DIR" \+    wish ./e_menu "b=$BROWSER" "PD=$DIR" \
       m=menus/wiki.mnu g=$LEFT+465 t=1 o=0 w=21 fs=10 pa=100 &       m=menus/wiki.mnu g=$LEFT+465 t=1 o=0 w=21 fs=10 pa=100 &
          
-    wish ./emenu "b=$BROWSER" "PD=$DIR" \+    wish ./e_menu "b=$BROWSER" "PD=$DIR" \
       m=menus/templates.mnu g=$LEFT+808 t=1 o=0 w=21 fs=10 pa=100 a=1 &       m=menus/templates.mnu g=$LEFT+808 t=1 o=0 w=21 fs=10 pa=100 a=1 &
          
Line 349: Line 349:
     cd $curdir     cd $curdir
  
-Notice that all three menus are called as topmost independent applications (t=1, &) without 'ornament' (o=0), the last menu running 1st item at start (//tkcon// to be exact). Geany IDE is run with project files as passed parameters. This would result in the picture shown below. All menus share some options defined with environment variables (BROWSER, DIR, LEFT) while others (PROJECT, THEME, SUBJ) are supplied to //git.mnu// only for use in git commands as %s0, %s1 and %s2 wildcards.+Notice that all three menus are called as topmost independent applications (t=1, &) without 'ornament' (o=0), the last menu running 1st item at start (//tkcon// to be exact). Geany IDE is run with project files as passed parameters. This would result in the picture shown somewhere below. All menus share some options defined with environment variables (BROWSER, DIR, LEFT) while others (PROJECT, THEME, SUBJ) are supplied to //git.mnu// only for use in git commands as %s0, %s1 and %s2 wildcards.
  
 \\ \\
Line 443: Line 443:
 A //menu item name// can begin with //F1// through //F12// which means a hotkey F1...F12 for this name. By default, items have hotkeys //1// through //9// and //a// through //z//. For example: A //menu item name// can begin with //F1// through //F12// which means a hotkey F1...F12 for this name. By default, items have hotkeys //1// through //9// and //a// through //z//. For example:
  
-    RE: F1 Geany's help RE:%file:///usr/share/doc/geany/html/index.html+    RE: F1 Geany's help RE:%file:///usr/share/doc/geany/html/index.html
  
 - this would display [[using_with_tcl_tk|e_menu]] that would display (after second F1) the help of Geany IDE and close. - this would display [[using_with_tcl_tk|e_menu]] that would display (after second F1) the help of Geany IDE and close.
Line 481: Line 481:
 |// %u0 \\  %u1 \\ -"-"- \\ %u9 //| //u0=// parameter of [[using_with_tcl_tk|e_menu]] \\ //u1=// parameter of [[using_with_tcl_tk|e_menu]] \\ -"-"- \\  //u9=// parameter of [[using_with_tcl_tk|e_menu]]| |// %u0 \\  %u1 \\ -"-"- \\ %u9 //| //u0=// parameter of [[using_with_tcl_tk|e_menu]] \\ //u1=// parameter of [[using_with_tcl_tk|e_menu]] \\ -"-"- \\  //u9=// parameter of [[using_with_tcl_tk|e_menu]]|
 |// %i0 \\  %i1  \\ -"-"- \\  %i9  //| 0th counter of runs (it may be initialized with //i0=// parameter of [[using_with_tcl_tk|e_menu]]) \\  1st counter of runs (it may be initialized with //i1=// parameter of [[using_with_tcl_tk|e_menu]]) \\ -"-"- \\  9th counter of runs (it may be initialized with //i9=// parameter of [[using_with_tcl_tk|e_menu]])| |// %i0 \\  %i1  \\ -"-"- \\  %i9  //| 0th counter of runs (it may be initialized with //i0=// parameter of [[using_with_tcl_tk|e_menu]]) \\  1st counter of runs (it may be initialized with //i1=// parameter of [[using_with_tcl_tk|e_menu]]) \\ -"-"- \\  9th counter of runs (it may be initialized with //i9=// parameter of [[using_with_tcl_tk|e_menu]])|
-|// %"link" //| calls a browser with passed //link//; here //%b// corresponds to //b=// parameter of [[using_with_tcl_tk|e_menu]]| +|// %"link" //| calls a browser with passed //link//; here //%B// corresponds to //b=// parameter of [[using_with_tcl_tk|e_menu]]| 
-|// %"title" "message" //| puts out a query with //title// and //message// asking "OK" or "Cancel"; if answered "Cancel", cancels next commands of batch| +|// %"title" "message" //| puts out a query with //title// and //message// asking "OK" or "Cancel"; if answered "Cancel", cancels next commands of batch| 
-|// %file1 [file2 ...] //| calls Geany editor to edit/create //file(s)// e.g.: \\  ... to edit file(s) of Geany's selection: \\     //%%s// \\  ... to edit/create all files of project by one click: \\     // %mod1.c mod2.c mod3.c mod4.c mod1.h mod2.h mod3.h mod4.h etc.//|+|// %file1 [file2 ...] //| calls Geany editor to edit/create //file(s)// e.g.: \\  ... to edit file(s) of Geany's selection: \\     //%%s// \\  ... to edit/create all files of project by one click: \\     // %mod1.c mod2.c mod3.c mod4.c mod1.h mod2.h mod3.h mod4.h etc.//|
 |// ''<nowiki>%%</nowiki>'' //| % symbol| |// ''<nowiki>%%</nowiki>'' //| % symbol|
 |// %d //| Geany's wildcard %d (reserved)| |// %d //| Geany's wildcard %d (reserved)|
Line 558: Line 558:
          
      R: Firefox search for "%s" R: firefox -search "%s"      R: Firefox search for "%s" R: firefox -search "%s"
-     R: Wikipedia for "%s"      R: %https://en.wikipedia.org/w/index.php?cirrusUserTesting=classic-explorer-i&search=%++     R: Wikipedia for "%s"      R: %https://en.wikipedia.org/w/index.php?cirrusUserTesting=classic-explorer-i&search=%+
          
     MW/ Git menu               MW/ "m=menus\gitmenu.txt" o=0 "PD=%d" "s=%s"     MW/ Git menu               MW/ "m=menus\gitmenu.txt" o=0 "PD=%d" "s=%s"
Line 578: Line 578:
 The wildcard //%s// refers to Geany's selection. The wildcard //%dd// is the same as //%s// but it's used to get rid of special symbols as ", $, %, {, }, [, ], <, >, *. The wildcard //%s// refers to Geany's selection. The wildcard //%dd// is the same as //%s// but it's used to get rid of special symbols as ", $, %, {, }, [, ], <, >, *.
  
-The wildcard //%q// is a query with 'title' and 'query text'. Being answered 'Cancel' it cancels the execution of batch.+The wildcard //%Q// is a query with 'title' and 'query text'. Being answered 'Cancel' it cancels the execution of batch.
  
-In // %// command you should use edging double quotes and internal single quotes in a title and a message. Symbol \//n// stands for an empty line.+In // %// command you should use edging double quotes and internal single quotes in a title and a message. Symbol \//n// stands for an empty line.
  
     # git menu for e_menu     # git menu for e_menu
Line 593: Line 593:
     S:git add * S: git add *      S:git add * S: git add * 
          
-    R:git commit -m "%dd" R: %"Committing changes" "Commit with message\n\n'%dd' ?"+    R:git commit -m "%dd" R: %"Committing changes" "Commit with message\n\n'%dd' ?"
     R:git commit -m "%dd" R: cd %PD     R:git commit -m "%dd" R: cd %PD
     S:git commit -m "%dd" S: git commit -m "%dd"     S:git commit -m "%dd" S: git commit -m "%dd"
          
-    R:git commit -am "%s" R: %"Committing changes" "Add and commit with message\n\n'%s' ?"+    R:git commit -am "%s" R: %"Committing changes" "Add and commit with message\n\n'%s' ?"
     R:git commit -am "%s" R: cd %PD     R:git commit -am "%s" R: cd %PD
     S:git commit -am "%s" S: git commit -am "%s"     S:git commit -am "%s" S: git commit -am "%s"
          
-    R:git log --since="1 day ago" R: cd %PD +    R:git log "--since=1 day ago" R: cd %PD 
-    S:git log --since="1 day ago" S: git log --since="1 day ago"+    S:git log "--since=1 day ago" S: git log "--since=1 day ago"
          
-    R:git log -p --since="1 day ago" R: cd %PD +    R:git log -p "--since=1 day ago" R: cd %PD 
-    S:git log -p --since="1 day ago" S: git log -p --since="1 day ago"+    S:git log -p "--since=1 day ago" S: git log -p "--since=1 day ago"
          
     MW: Others MW: m=menus/git2.mnu w=40     MW: Others MW: m=menus/git2.mnu w=40
Line 659: Line 659:
 It's also assumed in the next sections that [[using_with_tcl_tk|e_menu]] has been unpacked into //C:\UTILS\e_menu// directory. It's also assumed in the next sections that [[using_with_tcl_tk|e_menu]] has been unpacked into //C:\UTILS\e_menu// directory.
  
-Try [[using_with_tcl_tk|e_menu]] now. Set the caret on a word of your text edited in Geany IDE. You may also select a piece of text. Call //'Context action'// from popup menu or by a hotkey mapped to it.+Try [[using_with_tcl_tk|e_menu]] now. Set the caret on a word of your text edited in Geany IDE. You may also select a piece of text. Call //'Context action'// from popup menu or with a hotkey mapped to it.
  
 You should see the following: You should see the following:
Line 676: Line 676:
   * include the h= parameter into Geany context action:   * include the h= parameter into Geany context action:
  
-    wish C:\UTILS\e_menu\emenu "s=%s" h=C:\DOC\www.tcl.tk\man\tcl8.6+    wish C:\UTILS\e_menu\e_menu "s=%s" h=C:\DOC\www.tcl.tk\man\tcl8.6
  
   * download the [[http://www.tcl.tk|Tcl/Tk]] help to C:\DOC directory with commands:   * download the [[http://www.tcl.tk|Tcl/Tk]] help to C:\DOC directory with commands:
Line 686: Line 686:
     wget -r -k -l 2 -p --accept-regex=.+/man/tcl8\.6.+ https://www.tcl.tk/man/tcl8.6/     wget -r -k -l 2 -p --accept-regex=.+/man/tcl8\.6.+ https://www.tcl.tk/man/tcl8.6/
  
-Now the offline help should be ready to call. If not, check the version of your //wget// utility. You may also check //C:\UTILS\e_menu\e_help.tcl// for the strings containing //htm// links to the offline help.+Now the offline help should be ready to call. If not, check the version of your //wget// utility.
  
 Retry [[http://www.tcl.tk|Tcl/Tk]] help calling. Select in your text (or place the caret on), for example, //package// and call Geany's context action. You should see something like: Retry [[http://www.tcl.tk|Tcl/Tk]] help calling. Select in your text (or place the caret on), for example, //package// and call Geany's context action. You should see something like:
Line 699: Line 699:
 Let's try and create a simple menu of 2 commands that would be available from Geany's context. Let's try and create a simple menu of 2 commands that would be available from Geany's context.
  
-The menu file will be //C:\UTILS\e_menu\test1.mnu//. We shall use commands that process Geany's selected text to:+The menu file will be //C:\UTILS\e_menu\menus\test1.mnu//. We shall use commands that process Geany's selected text to:
  
   * seek the selected internet pages   * seek the selected internet pages
   * view the selected words in a dictionary   * view the selected words in a dictionary
  
-Fill the //C:\UTILS\e_menu\test1.mnu// with the following:+Fill the //C:\UTILS\e_menu\menus\test1.mnu// with the following:
  
     R/ Firefox search for "%s" R/ ""C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -search "%s"     R/ Firefox search for "%s" R/ ""C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -search "%s"
Line 715: Line 715:
 After that include the menu file into the call string of Geany's context, for example: After that include the menu file into the call string of Geany's context, for example:
  
-    wish C:\UTILS\e_menu\emenu "s=%s" h=C:\DOC\www.tcl.tk\man\tcl8.6 m=menus/test1.mnu+    wish C:\UTILS\e_menu\e_menu "s=%s" h=C:\DOC\www.tcl.tk\man\tcl8.6 m=menus/test1.mnu
  
 NOTE: if you dislike to have the HELP/EXEC/SHELL commands in your menu though the context would be desirable, you can use: NOTE: if you dislike to have the HELP/EXEC/SHELL commands in your menu though the context would be desirable, you can use:
Line 724: Line 724:
 For example, you can write Geany's context command as: For example, you can write Geany's context command as:
  
-    wish C:\UTILS\e_menu\emenu "s0=%s" m=menus/test1.mnu+    wish C:\UTILS\e_menu\e_menu "s0=%s" m=menus/test1.mnu
  
 ... and //test1.mnu// as: ... and //test1.mnu// as:
Line 786: Line 786:
     SW: echo %%PD is %PD SW: echo %%PD is %PD     SW: echo %%PD is %PD SW: echo %%PD is %PD
          
-    R: git init R: %"Init GIT" "Are you sure to init git in\n\n%PD ?"+    R: git init R: %"Init GIT" "Are you sure to init git in\n\n%PD ?"
     R: git init R: cd %PD     R: git init R: cd %PD
     S: git init S: git init     S: git init S: git init
Line 799: Line 799:
     S: git add * S: git add *      S: git add * S: git add * 
          
-    R: git commit -am '%s0' R: %"Committing changes" "Do you really want to commit with message\n'%s0' ?"+    R: git commit -am '%s0' R: %"Committing changes" "Do you really want to commit with message\n'%s0' ?"
     R: git commit -am '%s0' R: cd %PD     R: git commit -am '%s0' R: cd %PD
     S: git commit -am '%s0' S: git commit -am "%s0"     S: git commit -am '%s0' S: git commit -am "%s0"
Line 850: Line 850:
 Let me remind you how [[using_with_tcl_tk|e_menu]] is called: Let me remind you how [[using_with_tcl_tk|e_menu]] is called:
  
-    wish /home/me/UTILS/e_menu/emenu "s=%s" [options]+    wish /home/me/UTILS/e_menu/e_menu "s=%s" [options]
  
 The following call options of [[using_with_tcl_tk|e_menu]] can influence on menus' look and feel: The following call options of [[using_with_tcl_tk|e_menu]] can influence on menus' look and feel:
Line 872: Line 872:
   * c=0   - sets an index of color scheme; 0 is default.   * c=0   - sets an index of color scheme; 0 is default.
  
-The following colors are available from c=0 to c=11:+The following colors are available from c=0 to c=12:
  
-{{:howtos:e_menu:c0.png?70|}} {{:howtos:e_menu:c1.png?70|}} {{:howtos:e_menu:c2.png?70|}} {{:howtos:e_menu:c3.png?70|}} {{:howtos:e_menu:c4.png?70|}} {{:howtos:e_menu:c5.png?70|}} {{:howtos:e_menu:c6.png?70|}} {{:howtos:e_menu:c7.png?70|}} {{:howtos:e_menu:c8.png?70|}} {{:howtos:e_menu:c9.png?70|}} {{:howtos:e_menu:c10.png?70|}} {{:howtos:e_menu:c11.png?70|}}+{{:howtos:e_menu:c0.png?70|}} {{:howtos:e_menu:c1.png?70|}} {{:howtos:e_menu:c2.png?70|}} {{:howtos:e_menu:c3.png?70|}} {{:howtos:e_menu:c4.png?70|}} {{:howtos:e_menu:c5.png?70|}} {{:howtos:e_menu:c6.png?70|}} {{:howtos:e_menu:c7.png?70|}} {{:howtos:e_menu:c8.png?70|}} {{:howtos:e_menu:c9.png?70|}} {{:howtos:e_menu:c10.png?70|}} {{:howtos:e_menu:c11.png?70|}} {{:howtos:e_menu:c3.png?70|}}
  
 and their shadowed counterparts (3rd scheme is of special highlight as you see): and their shadowed counterparts (3rd scheme is of special highlight as you see):
  
-{{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c3h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c5h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}}+{{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c3h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c5h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}} {{:howtos:e_menu:c0h.png?70|}}
  
 5th color scheme can be used to open a potentially dangerous menu, e.g. containing some irrevocable commands. 5th color scheme can be used to open a potentially dangerous menu, e.g. containing some irrevocable commands.
Line 910: Line 910:
 Here the Tcl commands are used to exit and close the dangerous menu possibly open by mistake. Q is a query with "head" and "message" that can contain the above mentioned wildcards. Q returns 'false' if answered 'Cancel' so that 'exit' Tcl command closes the menu. Here the Tcl commands are used to exit and close the dangerous menu possibly open by mistake. Q is a query with "head" and "message" that can contain the above mentioned wildcards. Q returns 'false' if answered 'Cancel' so that 'exit' Tcl command closes the menu.
  
-When calling a menu item, you can use //%"head" "message"// in a command batch. It's the same query with that difference that [[using_with_tcl_tk|e_menu]] stops the batch of commands after answering 'Cancel'. For example:+When calling a menu item, you can use //%"head" "message"// in a command batch. It's the same query with the difference that [[using_with_tcl_tk|e_menu]] stops the batch of commands after answering 'Cancel'. For example:
  
-    R:git reset --hard HEAD R: %"RESET" "This cancels the last uncommitted changes and resets to the last commited state!\n\nDo you want to RESET ?\n\n(VERY LIKELY IT'S CANNOT BE UNDONE)"+    R:git reset --hard HEAD R: %"RESET" "This cancels the last uncommitted changes and resets to the last commited state!\n\nDo you want to RESET ?\n\n(VERY LIKELY IT'S CANNOT BE UNDONE)"
     R:git reset --hard HEAD R: cd %PD     R:git reset --hard HEAD R: cd %PD
     S:git reset --hard HEAD S: git reset --hard HEAD     S:git reset --hard HEAD S: git reset --hard HEAD
Line 933: Line 933:
   * // %i9 // - are counters of item runs   * // %i9 // - are counters of item runs
  
-It's useful feature for commands that are logging or marking their data (files, directories etc.) with a current time, date and/or counter. There are 10 run counters per a menu and time/date formats that can be set at call.+It's useful feature for commands that are logging or marking their data (files, directories etc.) with a current time, date and/or counter. There are 10 run counters per a menu and 10 time/date formats that can be set at call.
  
 Here is a typical example: Here is a typical example:
Line 965: Line 965:
  
     cd %DIR%     cd %DIR%
-    start wish %EMDIR%/emenu "m=menus/gitmenu.mnu" +    start wish %EMDIR%/e_menu "m=menus/gitmenu.mnu" 
-    start wish %EMDIR%/emenu "m=menus/menu.mnu"+    start wish %EMDIR%/e_menu "m=menus/menu.mnu"
     start cmd.exe /c "C:\Program Files (x86)\Geany\bin\geany.exe" readme.md wiki.txt e_help.tcl e_menu.tcl     start cmd.exe /c "C:\Program Files (x86)\Geany\bin\geany.exe" readme.md wiki.txt e_help.tcl e_menu.tcl
  
Line 991: Line 991:
 Insert into "menus/menu.mnu" the following line (it will be useful by itself in future): Insert into "menus/menu.mnu" the following line (it will be useful by itself in future):
  
-    R: Open all R: %readme.md wiki.txt e_help.tcl e_menu.tcl+    R: Open all R: %readme.md wiki.txt e_help.tcl e_menu.tcl
  
 ... and assuming that "Open all" entry is number 8 in menu.mnu, change its call so: ... and assuming that "Open all" entry is number 8 in menu.mnu, change its call so:
  
-    start wish %EMDIR%/emenu "m=menus/menu.mnu" a=8+    start wish %EMDIR%/e_menu "m=menus/menu.mnu" a=8
  
 That's all. Minus a special start of Geany in batch file. Plus a useful menu command that allows __to restore your project file list__ in Geany IDE. That's all. Minus a special start of Geany in batch file. Plus a useful menu command that allows __to restore your project file list__ in Geany IDE.
Line 1022: Line 1022:
          
     R: Run periodic reminding of rest at 45 min interval R: ?-45*60/-15*60? stopwork_arbeiten %TI     R: Run periodic reminding of rest at 45 min interval R: ?-45*60/-15*60? stopwork_arbeiten %TI
-    R: Run batches of commands periodically R: ?60*60-2/-1:a=4,5/-1:ah=1,2? begin_of_batch 
  
-The last two tasks should be explained in details. The common format of periodic command is following:+The last task should be explained in details. The common format of periodic command is following:
  
     ?NSEC/NSEC1:a=n1,n2/NSEC2:ah=n3,n4/.../TN=X:ah=n5/? TASK_COMMAND %TI     ?NSEC/NSEC1:a=n1,n2/NSEC2:ah=n3,n4/.../TN=X:ah=n5/? TASK_COMMAND %TI
Line 1099: Line 1098:
  
     cd /home/me/PG/projects/my_best_project     cd /home/me/PG/projects/my_best_project
-    wish /home/me/UTILS/emenu ... (run common menus)+    wish /home/me/UTILS/e_menu ... (run common menus)
     geany ...                     (run Geany IDE)     geany ...                     (run Geany IDE)
  
Line 1110: Line 1109:
 So, you can have a lot of menus in "%PN" subdirectory of [[using_with_tcl_tk|e_menu]] that are specific for your current project and the one and only Geany context command for all projects like that: So, you can have a lot of menus in "%PN" subdirectory of [[using_with_tcl_tk|e_menu]] that are specific for your current project and the one and only Geany context command for all projects like that:
  
-    wish /home/me/UTILS/emenu "s=%s" "m=%PN/main.mnu" ...+    wish /home/me/UTILS/e_menu "s=%s" "m=%PN/main.mnu" ...
  
 It would open the main menu of your current project as Geany's context command. It would open the main menu of your current project as Geany's context command.
  
 Also you can set in the calling string of [[using_with_tcl_tk|e_menu]] "PN=projectname" parameter that would override a value of %PN wildcard taken from a working directory. It may be suitable when your different projects are named equally (e.g. /.../Java/Project1 and /.../JavaScript/Project1). Also you can set in the calling string of [[using_with_tcl_tk|e_menu]] "PN=projectname" parameter that would override a value of %PN wildcard taken from a working directory. It may be suitable when your different projects are named equally (e.g. /.../Java/Project1 and /.../JavaScript/Project1).
 +
 +The environment variable E_MENU_PN has the highest priority in setting the project name. E.g., in Linux you can call [[using_with_tcl_tk|e_menu]] this way:
 +
 +    export E_MENU_PN=myproject
 +    wish /home/me/UTILS/e_menu "s=%s" "m=%PN/main.mnu" ...
  
 It would be convenient to have a batch of common menus that are not related to Geany's context and are called just before starting Geany IDE. Using g=+X+Y (geometry) and t=1 (stay on top) parameters you can dispose the common menus at left or right side of screen to have them at hand. And while coding in Geany IDE, you are free to use a project specific menu bound to Geany context command. It would be convenient to have a batch of common menus that are not related to Geany's context and are called just before starting Geany IDE. Using g=+X+Y (geometry) and t=1 (stay on top) parameters you can dispose the common menus at left or right side of screen to have them at hand. And while coding in Geany IDE, you are free to use a project specific menu bound to Geany context command.
Line 1176: Line 1180:
 [[using_with_tcl_tk|e_menu]]'s zip file is available here: [[using_with_tcl_tk|e_menu]]'s zip file is available here:
  
-{{ :howtos:e_menu:tcl_geany.zip |}}+[[https://github.com/aplsimple/e_menu/archive/master.zip|github.com/aplsimple/e_menu]]
  
 or here: or here:
  
-[[http://aplsimple.ucoz.ru/misc/tcl_geany.zip|aplsimple.ucoz.ru]]+[[https://chiselapp.com/user/aplsimple/repository/e_menu/zip/trunk/e_menu.zip|chiselapp.com]]
  
-Notice that [[using_with_tcl_tk|e_menu]] is still disposed to update. At least I would try and support its [[http://aplsimple.ucoz.ru#e_menu|aplsimple.ucoz.ru]] version in a working state.+Home page: 
 + 
 +[[https://aplsimple.github.io/en/tcl/e_menu/|aplsimple.github.io]] 
 + 
 +Notice that [[using_with_tcl_tk|e_menu]] is still disposed to update. I would try and support its [[https://aplsimple.github.io/en/tcl/e_menu/|aplsimple.github.io]] version in a working state.
  
 \\ \\
Line 1195: Line 1203:
  
 Also, the applied tool, namely the great and awful Tcl/Tk would never stop to amaze as well. Though the first impression of Tcl is 'What a s...!' Second, third, fourth and ..th impressions are the same till one day this thing begins to tease your brains and make to wonder. Also, the applied tool, namely the great and awful Tcl/Tk would never stop to amaze as well. Though the first impression of Tcl is 'What a s...!' Second, third, fourth and ..th impressions are the same till one day this thing begins to tease your brains and make to wonder.
 +
 +An unexpected and pleasant discovery had occurred while me coding [[using_with_tcl_tk|e_menu]], namely the wonderful [[http://fossil-scm.org|Fossil VCS]]. Somehow its power and lightweight resemble Geany's.
  
 And these wonders tend to become //a movable feast//. And these wonders tend to become //a movable feast//.
Line 1204: Line 1214:
  
 ===== See also ===== ===== See also =====
 +
 +Home page: [[https://aplsimple.github.io/en/tcl/e_menu/|aplsimple.github.io]]
  
 More screenshots of [[using_with_tcl_tk|e_menu]]: More screenshots of [[using_with_tcl_tk|e_menu]]:
   * https://github.com/geany/geany/issues/1808   * https://github.com/geany/geany/issues/1808
 +
 +A sort of proposal:
 +  * https://github.com/geany/geany/issues/1836
  
 A sort of conversation: A sort of conversation:
Print/export