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/14 07:29] – ornaments aplsimplehowtos:using_with_tcl_tk [2019/09/15 14:30] (current) – links updated aplsimple
Line 20: Line 20:
   * calling a context help for [[http://www.tcl.tk|Tcl/Tk]] during Geany seance   * calling a context help for [[http://www.tcl.tk|Tcl/Tk]] during Geany seance
  
-  * [[http://www.tcl.tk|Tcl/Tk]] help pages can be made and called offline for quicker response+  * [[http://www.tcl.tk|Tcl/Tk]] help pages can be made and called offline for faster response
  
   * opening any number of menus containing any commands (programs) to run   * opening any number of menus containing any commands (programs) to run
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 54: Line 56:
   * menu items can be bound to hotkeys F1-F12 (by default they are bound to 1-9a-z)   * menu items can be bound to hotkeys F1-F12 (by default they are bound to 1-9a-z)
  
-  * menu items and their underlying commands can include up to counters of runs per a menu+  * menu items and their underlying commands can include up to 10 counters of runs per a menu
  
   * menu items and their underlying commands can be supplied with current date/time   * menu items and their underlying commands can be supplied with current date/time
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 76: Line 78:
   * [[using_with_tcl_tk|e_menu]] can be started with a pause to delay its initialization   * [[using_with_tcl_tk|e_menu]] can be started with a pause to delay its initialization
  
-  * items can be run repeatedly with an interval 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)
  
-  * menu text font and font size may be set at calling +  * there are a lot of 'look and feel' options (incl. highlighting 'master' or 'dangerous' menus)
- +
-  * there are a lot of 'look and feel' options (inc. 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
  
-  * parent menu options are inherited by child menu and are overridden by its [OPTIONS]+  * parent menu options are inherited by child menu and can be overridden by its [OPTIONS]
  
-  * [[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 96: 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 130:
 Please try this: Please try this:
  
-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 tcl-tls package 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:
  
-2. Unpack the below attached zip to save files:+    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 172: Line 170:
 **// **//
  
-    wish emenu [s=%s] [m=menufile] [options]+    wish e_menu [s=%s] [m=menufile] [options]
  
 //** //**
Line 211: 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 223: 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 238: 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 250: Line 248:
 |// "om=0" //| om=0 overrides the [OPTIONS] menu options \\ (by default [OPTIONS] options overcome the options defined in the call string of [[using_with_tcl_tk|e_menu]])|om=0| |// "om=0" //| om=0 overrides the [OPTIONS] menu options \\ (by default [OPTIONS] options overcome the options defined in the call string of [[using_with_tcl_tk|e_menu]])|om=0|
  
-Note: options s0..s9 and u0..u9 can include wildcards used in menu commands, e.g.:+Note: options s0..s9u0..u9, x*, y*, z* can include wildcards used in menu commands, e.g.:
  
     "s0= run #%i0 at %t2"     "s0= run #%i0 at %t2"
Line 262: Line 260:
 Most options of a call string can be set in [OPTIONS] section of a menu file, e.g. : Most options of a call string can be set in [OPTIONS] section of a menu file, e.g. :
  
-    R:?6?  Firefox search for "%s" R: firefox -search "%s" +    R:  R: 6 
-    R: Wikipedia for "%s" R:%https://en.wikipedia.org/w/index.php?cirrusUserTesting=classic-explorer-i&search=%+ +    R: Firefox search for "%s" R: firefox -search "%s" 
-    R: Open/create file(s) "%s" R:%%s+    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: 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
          
-    MW?6?  Git  MW: m=%PN/git.mnu "u=%s" o=0 w=50+    R:  R: 6 
 +    MW: Git  MW: m=%PN/git.mnu "u=%s" o=0 w=50
     MW: Tcl/Tk    MW: m=%PN/tcltk.mnu w=20     MW: Tcl/Tk    MW: m=%PN/tcltk.mnu w=20
     MW: Python    MW: m=%PN/python.mnu w=40     MW: Python    MW: m=%PN/python.mnu w=40
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 377: Line 377:
     <marker> name6 <marker> command6     <marker> name6 <marker> command6
     # ...     # ...
 +    
     [OPTIONS]     [OPTIONS]
     # ... options of e_menu call string     # ... options of e_menu call string
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.
- 
-You can use a special form of item name to set a separator before it, namely: 
- 
-    R: ?N? name R: command 
- 
-where ?N? contains a number negative to set a visible separator (e.g. ?-5?) or positive to set a separating empty space (e.g. ?5?). The N number sets a vertical size of separator. 
  
 The dangerous and irrevocable commands may be collected under a red menu as big as a monitor screen, e.g.: The dangerous and irrevocable commands may be collected under a red menu as big as a monitor screen, e.g.:
Line 895: Line 889:
  
 {{:howtos:e_menu:danger2.png|}} {{:howtos:e_menu:danger2.png|}}
 +
 +You can use a special form of menu item name to set a separator, namely:
 +
 +    R:    R: N
 +    
 +       or
 +    
 +    R: -- R: N
 +
 +where N sets a vertical size of separator. If the item name contains "-" symbol(s) it means a visible separator, otherwise it sets a separating blank space.
 +
  
 \\ \\
Line 905: 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 928: 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 960: 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 986: 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 1017: 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 1094: 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 1105: 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 1171: 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|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 1190: 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 1199: 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