📄 gspk.volume
字号:
#!/usr/local/bin/wish# Config info:# prefixset Online 0set FileName "$env(HOME)/.phone_nums"proc AddNumber { Nam Num } { global ListOfNumbers lappend ListOfNumbers "$Nam $Num"# puts "$Nam $Num" DumpNumList }## Read File with user's stored numbers#set ListOfNumbers {}if { [file readable $FileName]} { set f [open $FileName r] while {[gets $f line] >= 0} { if { [string compare "NUMBER" [lindex $line 0]] == 0 } { lappend ListOfNumbers [lrange $line 1 end] } elseif { [string compare "PREFIX" [lindex $line 0]] == 0 } { global prefix set prefix [lindex $line 1] } } close $f}proc DumpNumList {} { global prefix global FileName global ListOfNumbers set f [open $FileName w] if { [string length $prefix] > 0 } { puts $f [concat "PREFIX" $prefix] } if { [llength $ListOfNumbers] > 0 } { set Rest $ListOfNumbers while { 1 } { set line [lindex $Rest 0] set Rest [lrange $Rest 1 end] if { [string length $line] == 0 } { break } puts $f [concat "NUMBER" $line] } } close $f}proc GetPrefix { w } { global prefix global GPbtn global GPentry set GPentry $prefix set GPbtn "CANCEL" toplevel $w -class Dialog wm title $w "Selecting a new prefix:" wm iconname $w "Selecting a new prefix:" frame $w.top -relief raised -bd 1 pack $w.top -side top -fill both frame $w.bot -relief raised -bd 1 pack $w.bot -side bottom -fill both label $w.top.l -text "Type a new prefix:" entry $w.top.e -relief sunken -bd 2 -textvariable GPentry pack $w.top.l $w.top.e -side top -expand 1 -fill x -padx 3m -pady 2m button $w.bot.ok -text "OK" -command { global GPentry global prefix set prefix $GPentry set GPbtn "OK" } button $w.bot.cancel -text "Cancel" -command { set GPbtn "CANCEL" } pack $w.bot.ok $w.bot.cancel -side left -expand 1 -padx 3m -pady 2m \ -in $w.bot bind $w <Key-Return> { global GPentry global prefix set prefix $GPentry set GPbtn "OK" } bind $w <Key-Escape> { set GPbtn "CANCEL" } set oldFocus [focus] grab set $w focus $w.top.e tkwait variable GPbtn grab release $w focus $oldFocus}## Create a new number for storing in the list#proc AddNewNumber { w Name Num } { global ANNbtn global ANNassoc global ANNumber set ANNumber $Num set ANNassoc $Name toplevel $w -class Dialog wm title $w "Adding Number to the Save List" wm iconname $w "Adding Number to the Save List" frame $w.top -relief raised -bd 1 pack $w.top -side top -fill both frame $w.bot -relief raised -bd 1 pack $w.bot -side bottom -fill both label $w.top.l -text "Type associated name for $ANNumber:" entry $w.top.e -relief sunken -bd 2 -textvariable ANNassoc pack $w.top.l $w.top.e -side top -expand 1 -fill x -padx 3m -pady 2m button $w.bot.ok -text "Add" -command { if { [string length $ANNassoc] != 0 } { global ANNassoc ANNumber AddNumber $ANNassoc $ANNumber set ANNbtn "OK" } } button $w.bot.cancel -text "Cancel" -command { set ANNbtn "CANCEL" } pack $w.bot.ok $w.bot.cancel -side left -expand 1 -padx 3m -pady 2m \ -in $w.bot bind $w <Key-Return> { if { [string length $ANNassoc] != 0 } { global ANNassoc ANNumber AddNumber $ANNassoc $ANNumber set ANNbtn "OK" } } bind $w <Key-Escape> { set ANNbtn "CANCEL" } set oldFocus [focus] grab set $w focus $w.top.e tkwait variable ANNbtn grab release $w focus $oldFocus return $ANNbtn}proc GetNumberFromList { w } { global GNFLbtn global ListOfNumbers global GNFSelection set GNFSelection {} # # Retreive a number from the list # toplevel $w -class Dialog wm title $w "Select a number to dial" wm iconname $w "Selection List" frame $w.top -relief raised -bd 1 pack $w.top -side top -fill both -expand 1 frame $w.bot -relief raised -bd 1 pack $w.bot -side bottom -fill both -expand 1 label $w.top.l -text "Select Number to Dial:" listbox $w.top.lb -relief sunken -bd 2 if { [llength $ListOfNumbers] != 0 } { foreach lbitem [lsort $ListOfNumbers] { $w.top.lb insert end $lbitem } } bind $w.top.lb <ButtonRelease-1> { global GNFSelection set GNFSelection [selection get] } bind $w.top.lb <Double-1> { set GNFLbtn "ADD" } pack $w.top.l $w.top.lb -side top -expand 1 -fill both -padx 3m -pady 2m button $w.bot.ok -text "Use" -command { set GNFLbtn "ADD" } global GNFw set GNFw $w button $w.bot.del -text "Delete" -command { global GNFSelection global GNFw set rmindex 0 if { [ string length $GNFSelection ] > 0 } { foreach lbitem $ListOfNumbers { if { [string compare $lbitem $GNFSelection ] == 0 } { break } incr rmindex } set GNFSelection {} if { $rmindex < [llength $ListOfNumbers] } { set ListOfNumbers [lreplace $ListOfNumbers $rmindex $rmindex] DumpNumList $GNFw.top.lb delete 0 end if { [llength $ListOfNumbers] != 0 } { foreach lbitem [lsort $ListOfNumbers] { $GNFw.top.lb insert end $lbitem } } } } } button $w.bot.cancel -text "Cancel" -command { global GNFSelection set GNFSelection {} set GNFLbtn "CANCEL" } pack $w.bot.ok $w.bot.del $w.bot.cancel \ -side left -expand 1 -padx 3m -pady 2m -in $w.bot bind $w <Key-Return> { set GNFLbtn "ADD" } bind $w <Key-Escape> { set GNFLbtn "CANCEL" } set oldFocus [focus] grab set $w focus $w.top.lb tkwait variable GNFLbtn grab release $w focus $oldFocus return $GNFSelection }## Write/read info into the user's list of numbers#proc StoredNumbers { w Num } { global SNNumber set SNNumber $Num if { [string length $SNNumber] != 0 } { AddNewNumber $w {} $SNNumber return "" } else { set retval [GetNumberFromList $w] set leng [llength $retval] if { $leng >= 1 } { set retval [lindex $retval [expr $leng - 1]] return $retval } } return ""}# # Add a character to the display#proc buttonpress { num } { global Online if { $Online == 0 } { global number set number ${number}${num} if { [string length $number] > 0 } { .main.btnlist configure -text "Save" } } else { dial $num }}## Clear display#proc clearline { } { global number set number {} .main.btnlist configure -text "List"}## Delete a character from the display#proc delchar {} { global number set len [string length $number] if { [string index $number [expr $len - 1]] == "]" } { set number [string range $number 0 \ [expr [string last "\[" $number ] - 1]] } else { set number [string range $number 0 [expr $len - 2]] } if { [string length $number ] == 0 } { .main.btnlist configure -text "List" }}## Dial or hangup the line depending on the state of the modem#proc DialHangup {} { global Online if { $Online == 0 } { global Online global number global prefix if { [string length $number] == 0 } { dial {} } else { dial ${prefix}${number} } .main.btndial configure -text "Hangup" -bg Red set Online 1 } else { global Online clearline hangup .main.btndial configure -text "Dial" -bg Green set Online 0 }}proc TerminateApp {} { global Online if { $Online == 1 } { hangup } exit}## Create widgets#set padsize 1mwm title . "SuperPhone"frame .mainframe .main.col1 -bg DarkGrayframe .main.col2 -bg DarkGray -relief raised -borderwidth 2frame .main.col3 -bg DarkGray -relief raised -borderwidth 2frame .main.row0 -bg Gray60 -relief raised -borderwidth 3frame .main.row00 -bg DarkGrayframe .main.row1 -bg DarkGrayframe .main.row2 -bg DarkGrayframe .main.row3 -bg DarkGrayframe .main.row4 -bg DarkGraybutton .main.btn1 -width 7 -height 2 -text "1\n " -command { buttonpress 1 }button .main.btn2 -width 7 -height 2 -text "2\n A B C " -command { buttonpress 2 }button .main.btn3 -width 7 -height 2 -text "3\n D E F " -command { buttonpress 3 }button .main.btn4 -width 7 -height 2 -text "4\n G H I " -command { buttonpress 4 }button .main.btn5 -width 7 -height 2 -text "5\n J K L " -command { buttonpress 5 }button .main.btn6 -width 7 -height 2 -text "6\n M N O " -command { buttonpress 6 }button .main.btn7 -width 7 -height 2 -text "7\nP Q R S" -command { buttonpress 7 }button .main.btn8 -width 7 -height 2 -text "8\n T U V " -command { buttonpress 8 }button .main.btn9 -width 7 -height 2 -text "9\nW X Y Z" -command { buttonpress 9 }button .main.btn0 -width 7 -height 2 -text "0" -command {buttonpress 0 }button .main.btnstar -width 7 -height 2 -text "*" -command {buttonpress "*" }button .main.btnpound -width 7 -height 2 -text "#" -command {buttonpress # }button .main.btnexit -text "Exit" -command TerminateApp button .main.btnclear -text "Clear" -command clearlinebutton .main.btnflash -text "Flash" -command { buttonpress "\[FLASH\]" }button .main.btnpause -text "Pause" -command { buttonpress "\[PAUSE\]" }button .main.btnmsgs -text "Messages" -command TerminateApp button .main.btndial -width 7 -height 2 -bg Green -text "Dial" -command DialHangup button .main.btnlist -text "List" -command { buttonpress [ StoredNumbers .s $number ] destroy .s}entry .main.entry -relief sunken -bd 2 -textvariable numberentry .main.prefix -relief sunken -bd 2 -width 2 -textvariable prefixscale .main.volume -from 0 -to 255 -orient verticalscale .main.microfone -from 0 -to 255 -orient vertical## Assign key accelerators#foreach evnt { { 0 } { 1 } { 2 a b c A B C } { 3 d e f D E F } { 4 g h i G H I } { 5 j k l J K L } { 6 m n o M N O } { 7 p q r s P Q R S } { 8 t u v T U V } { 9 w x y z W X Y Z } } { set btn [ lindex $evnt 0 ] foreach bnd $evnt { set scrpt [ concat \{ buttonpress [expr $btn] \}] bind . <Key-$bnd> [ expr $scrpt] }}bind . <KP_Insert> {buttonpress "0"}bind . <KP_End> {buttonpress "1"}bind . <KP_Down> {buttonpress "2"}bind . <KP_Next> {buttonpress "3"}bind . <KP_Left> {buttonpress "4"}bind . <KP_Begin> {buttonpress "5"}bind . <KP_Right> {buttonpress "6"}bind . <KP_Home> {buttonpress "7"}bind . <KP_Up> {buttonpress "8"}bind . <KP_Prior> {buttonpress "9"}bind . <KP_Multiply> {buttonpress "*"}bind . <KP_Add> {buttonpress "#"}bind . <KP_Enter> {DialHangup }bind . <KP_Delete> {buttonpress "\[FLASH\]"}bind . <KP_Subtract> {buttonpress "\[PAUSE\]"}bind . <Key-exclam> {buttonpress "\[FLASH\]"}bind . <Key-comma> {buttonpress "\[PAUSE\]"}bind . <Key-at> {buttonpress "\[DIALTONE\]"}bind . <Key-period> {buttonpress "\[SILENCE\]"}bind . <Key-asterisk> { buttonpress * }bind . <Key-plus> { buttonpress * }bind . <Key-numbersign> { buttonpress # }bind . <Key-Return> { DialHangup }bind . <Key-Escape> { clearline }bind . <Key-BackSpace> { delchar }bind . <Key-Delete> { delchar }#bind . <Any-KeyPress> { buttonpress %K }bind all <Control-c> { TerminateApp }bind .main.prefix <ButtonRelease-1> { GetPrefix .s destroy .s focus .main.btndial DumpNumList }bind .main.entry <ButtonRelease-1> { focus .main.btndial }# # Finally display all the stuff in the window#pack .main .main.col3 -side left -fill both -expand 1pack .main.row0 .main.row00 -side top -fill both -in .mainpack .main.col1 .main.col2 -side left -fill both -expand 1 \ -in .main.row00pack .main.volume .main.microfone -side left -fill both -expand 1 \ -in .main.col3pack .main.btnexit .main.btnclear .main.btnflash .main.btnpause .main.btnmsgs \ -side top -padx $padsize -pady $padsize -fill x -in .main.col2pack .main.btndial -side bottom -padx $padsize -pady $padsize -fill x \ -in .main.col2#pack .main.row0 -side top -fill both -in .main.col1pack .main.row4 .main.row3 .main.row2 .main.row1 -side bottom -fill both \ -in .main.col1 -expand 1pack .main.btnlist -side right -padx $padsize -pady $padsize -in .main.row0pack .main.prefix -side left -fill both -padx $padsize \ -pady $padsize -in .main.row0pack .main.entry -side left -fill both -padx $padsize \ -pady $padsize -expand 1 -in .main.row0pack .main.btn1 .main.btn2 .main.btn3 -in .main.row1 -side left \ -fill both -padx $padsize -pady $padsize -expand 1pack .main.btn4 .main.btn5 .main.btn6 -in .main.row2 -side left \ -fill both -padx $padsize -pady $padsize -expand 1pack .main.btn7 .main.btn8 .main.btn9 -in .main.row3 -side left \ -fill both -padx $padsize -pady $padsize -expand 1pack .main.btnstar .main.btn0 .main.btnpound -in .main.row4 -side left \ -fill both -padx $padsize -pady $padsize -expand 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -