OXYGENHUB
◆ main openmsx / share / scripts / _cycle.tcl
1.7 KiB · Tcl · last changed chore(): initial commit 1 month ago source blame history raw
1
namespace eval cycle {
2
3
set help_cycle \
4
{Cycle through the possible values of an enum setting.
5
'cycle_back' does the same as 'cycle', but it goes in the opposite direction.
6
7
Usage:
8
  cycle      <enum_setting> [<cycle_list>]
9
  cycle_back <enum_setting> [<cycle_list>]
10
11
Example:
12
  cycle scale_algorithm
13
  cycle scale_algorithm "hq2x hq2xlite"
14
}
15
16
set_help_text cycle      $help_cycle
17
set_help_text cycle_back $help_cycle
18
set_tabcompletion_proc cycle      [namespace code tab_cycle]
19
set_tabcompletion_proc cycle_back [namespace code tab_cycle]
20
21
proc tab_cycle {args} {
22
	set result [list]
23
	foreach setting [openmsx_info setting] {
24
		set type [lindex [openmsx_info setting $setting] 0]
25
		if {($type eq "enumeration") || ($type eq "boolean")} {
26
			lappend result $setting
27
		}
28
	}
29
	return $result
30
}
31
32
proc cycle {setting {cycle_list {}} {step 1}} {
33
	set setting_info [openmsx_info setting $setting]
34
	set type [lindex $setting_info 0]
35
	if {$type eq "enumeration"} {
36
		if {[llength $cycle_list] == 0} {
37
			set cycle_list [lindex $setting_info 2]
38
		}
39
	} elseif {$type eq "boolean"} {
40
		set cycle_list [list "true" "false"]
41
	} else {
42
		error "Not an enumeration setting: $setting"
43
	}
44
	set cur [lsearch -exact -nocase $cycle_list [set ::$setting]]
45
	set new [expr {($cur + $step) % [llength $cycle_list]}]
46
	set ::$setting [lindex $cycle_list $new]
47
}
48
49
proc cycle_back {setting} {
50
	cycle $setting {} -1
51
}
52
53
set_help_text toggle \
54
{Toggles a boolean setting
55
56
Usage:
57
  toggle <boolean_setting>
58
59
Example:
60
  toggle fullscreen
61
}
62
63
set_tabcompletion_proc toggle [namespace code tab_cycle]
64
65
proc toggle {setting} {
66
        cycle $setting "on off"
67
}
68
69
namespace export cycle
70
namespace export cycle_back
71
namespace export toggle
72
73
} ;# namespace cycle
74
75
namespace import cycle::*