commit with package.sh
This commit is contained in:
		
							parent
							
								
									1d46a23824
								
							
						
					
					
						commit
						1d295276c4
					
				
							
								
								
									
										50
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								README.md
									
									
									
									
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | # Scut-Reminder  | ||||||
|  | 
 | ||||||
|  | Scut-Reminder est un petit utilitaire en ligne de commande pour gérer et lister vos raccourcis d'application favoris. | ||||||
|  | 
 | ||||||
|  | ## Usage | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | scut					// Affiche la liste des applications  | ||||||
|  | scut -c MaConfig.json -a "nevim"  	// Affiche liste des raccourcis de nevim de MaConfig.json | ||||||
|  | scut -a "Visual Studio Code" 		// Affiche liste des raccourcis de vscode | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Options | ||||||
|  | 
 | ||||||
|  | - `-c NomDuFichierConfig`  Utiliser ce fichier de configuration au lieu de `config.json` (par défaut) | ||||||
|  | - `-a Nom Application`   	Afficher les raccourcis de l'application spécifiée | ||||||
|  | - `-h` 	     		Afficher l'aide | ||||||
|  | 
 | ||||||
|  | ## Installation | ||||||
|  | 
 | ||||||
|  | Téléchargez le fichier binaire pour votre plateforme à partir de la section Releases. | ||||||
|  | 
 | ||||||
|  | Ou bien compilez le code source Go: | ||||||
|  | ``` | ||||||
|  | go build | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Configuration | ||||||
|  | 
 | ||||||
|  | Le fichier `config.json` doit respecter ce format : | ||||||
|  | 
 | ||||||
|  | ```json | ||||||
|  | { | ||||||
|  |   "apps": [ | ||||||
|  |     { | ||||||
|  |       "name": "neovim", | ||||||
|  |       "shortcuts": { | ||||||
|  |         "ctrl+alt+n": "Open neovim", | ||||||
|  |         "ctrl+n": "Split neovim horizontally"  | ||||||
|  |       }        | ||||||
|  |     }, | ||||||
|  |     {   | ||||||
|  |       "name": "vscode",    | ||||||
|  |       "shortcuts": {    | ||||||
|  |         "ctrl+shift+p": "Command palette"    | ||||||
|  |       }        | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  | ``` | ||||||
							
								
								
									
										23
									
								
								config.json
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								config.json
									
									
									
									
									
								
							| @ -1,23 +0,0 @@ | |||||||
| { |  | ||||||
|      "apps": [ |  | ||||||
|           { |  | ||||||
|                "name": "neovim", |  | ||||||
|                "shortcuts": { |  | ||||||
|                     "ctrl+alt+n": "Open neovim", |  | ||||||
|                     "ctrl+n": "Split neovim horizontally" |  | ||||||
|                } |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|                "name": "vscode", |  | ||||||
|                "shortcuts": { |  | ||||||
|                     "ctrl+shift+p": "Command palette" |  | ||||||
|                } |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|                "name": "Kitty", |  | ||||||
|                "shortcuts": { |  | ||||||
|                     "ctrl+shift+e": "Open new terminal" |  | ||||||
|                } |  | ||||||
|           } |  | ||||||
|      ] |  | ||||||
| } |  | ||||||
							
								
								
									
										41
									
								
								configuration/gnome.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								configuration/gnome.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | { | ||||||
|  |      "name": "GNOME", | ||||||
|  |      "shortcuts": { | ||||||
|  |           "ctrl+alt+t": "Terminal", | ||||||
|  |           "ctrl+alt+d": "Show Desktop", | ||||||
|  |           "super": "Activities Overview", | ||||||
|  |           "super+a": "Applications", | ||||||
|  |           "super+f": "Files", | ||||||
|  |           "super+t": "Terminal", | ||||||
|  |           "super+l": "Lock Screen", | ||||||
|  |           "super+shift+q": "Log Out", | ||||||
|  |           "super+shift+d": "Show Applications", | ||||||
|  |           "super+page up": "Switch Workspace on the right", | ||||||
|  |           "super+page down": "Switch Workspace on the left", | ||||||
|  |           "super+1-9": "Switch to Workspace 1-9", | ||||||
|  |           "ctrl+alt+arrow": "Switch Workspace", | ||||||
|  |           "ctrl+alt+up": "Maximize Window", | ||||||
|  |           "ctrl+alt+down": "Unmaximize Window", | ||||||
|  |           "alt+tab": "Switch Applications", | ||||||
|  |           "alt+`": "Switch Windows of the Same Application", | ||||||
|  |           "alt+f2": "Run Command", | ||||||
|  |           "ctrl+alt+delete": "Log Out/Power Off/Restart", | ||||||
|  |           "ctrl+c": "Copy", | ||||||
|  |           "ctrl+v": "Paste", | ||||||
|  |           "ctrl+x": "Cut", | ||||||
|  |           "ctrl+z": "Undo", | ||||||
|  |           "ctrl+shift+z": "Redo", | ||||||
|  |           "ctrl+a": "Select All", | ||||||
|  |           "ctrl+f": "Find", | ||||||
|  |           "ctrl+s": "Save", | ||||||
|  |           "ctrl+o": "Open", | ||||||
|  |           "ctrl+n": "New", | ||||||
|  |           "ctrl+p": "Print", | ||||||
|  |           "ctrl+q": "Quit", | ||||||
|  |           "ctrl+w": "Close Window", | ||||||
|  |           "ctrl+shift+w": "Close All Windows", | ||||||
|  |           "ctrl+shift+t": "Reopen Closed Tab/Window", | ||||||
|  |           "ctrl+plus": "Zoom In", | ||||||
|  |           "ctrl+minus": "Zoom Out" | ||||||
|  |      } | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								configuration/kitty.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								configuration/kitty.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | { | ||||||
|  |      "name": "Kitty Terminal", | ||||||
|  |      "shortcuts": { | ||||||
|  |           "Ctrl+Shift+T": "New tab", | ||||||
|  |           "Ctrl+Shift+W": "Close tab", | ||||||
|  |           "Ctrl+Shift+H": "Move focus to left tab", | ||||||
|  |           "Ctrl+Shift+L": "Move focus to right tab", | ||||||
|  |           "Ctrl+Shift+PageUp": "Move to previous tab", | ||||||
|  |           "Ctrl+Shift+PageDown": "Move to next tab", | ||||||
|  |           "Ctrl+Shift+C": "Copy selected text to clipboard", | ||||||
|  |           "Ctrl+Shift+V": "Paste from clipboard", | ||||||
|  |           "Ctrl+Shift+N": "New Kitty instance", | ||||||
|  |           "Ctrl+Shift+Q": "Quit Kitty", | ||||||
|  |           "Ctrl+Shift+R": "Reload configuration file", | ||||||
|  |           "Ctrl+Shift+F": "Find", | ||||||
|  |           "Ctrl+Shift+G": "Find next", | ||||||
|  |           "Ctrl+Shift+J": "Scroll down one line", | ||||||
|  |           "Ctrl+Shift+K": "Scroll up one line", | ||||||
|  |           "Ctrl+Shift+U": "Scroll up one page", | ||||||
|  |           "Ctrl+Shift+D": "Scroll down one page", | ||||||
|  |           "Ctrl+Shift+Home": "Scroll to top", | ||||||
|  |           "Ctrl+Shift+End": "Scroll to bottom", | ||||||
|  |           "Ctrl+Shift+S": "Save session", | ||||||
|  |           "Ctrl+Shift+O": "Open saved session", | ||||||
|  |           "Ctrl+Shift+X": "Clear scrollback buffer", | ||||||
|  |           "Ctrl+Shift+Z": "Toggle zoom", | ||||||
|  |           "Ctrl+Shift+I": "Inspect current terminal", | ||||||
|  |           "Ctrl+Shift+Tab": "Switch to previous window", | ||||||
|  |           "Ctrl+Shift+Num+": "Increase font size", | ||||||
|  |           "Ctrl+Shift+Num-": "Decrease font size", | ||||||
|  |           "Ctrl+Shift+Num*": "Reset font size", | ||||||
|  |           "Ctrl+Shift+Num/": "Toggle ligatures", | ||||||
|  |           "Ctrl+Shift+Num0": "Reset all settings to default", | ||||||
|  |           "Ctrl+Shift+Num1": "Switch to profile 1", | ||||||
|  |           "Ctrl+Shift+Num2": "Switch to profile 2", | ||||||
|  |           "Ctrl+Shift+Num3": "Switch to profile 3", | ||||||
|  |           "Ctrl+Shift+Num4": "Switch to profile 4", | ||||||
|  |           "Ctrl+Shift+Num5": "Switch to profile 5" | ||||||
|  |      } | ||||||
|  | } | ||||||
							
								
								
									
										39
									
								
								configuration/neovim.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								configuration/neovim.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | |||||||
|  | { | ||||||
|  |      "name": "Neovim", | ||||||
|  |      "shortcuts": { | ||||||
|  |           "i": "Insert mode", | ||||||
|  |           "esc": "Normal mode", | ||||||
|  |           "gg": "Go to first line", | ||||||
|  |           "G": "Go to last line", | ||||||
|  |           "dd": "Delete current line", | ||||||
|  |           "yy": "Yank/copy current line", | ||||||
|  |           "p": "Paste yanked/cut text", | ||||||
|  |           "u": "Undo", | ||||||
|  |           "Ctrl-r": "Redo", | ||||||
|  |           "w": "Save changes", | ||||||
|  |           "q": "Quit", | ||||||
|  |           "Ctrl-w": "Close current window", | ||||||
|  |           "Ctrl-n": "Open new empty buffer", | ||||||
|  |           "Ctrl-o": "Open last closed buffer", | ||||||
|  |           "Ctrl-^": "Switch between the current and previous buffer", | ||||||
|  |           "Ctrl-]": "Jump to the definition of a symbol", | ||||||
|  |           "Ctrl-t": "Jump back from the definition of a symbol", | ||||||
|  |           "Ctrl-p": "Open fuzzy finder", | ||||||
|  |           "Ctrl-x Ctrl-f": "Open file explorer", | ||||||
|  |           "Ctrl-x Ctrl-b": "Open buffer explorer", | ||||||
|  |           "Ctrl-g": "Show file information", | ||||||
|  |           "Ctrl-a": "Select all", | ||||||
|  |           "Ctrl-v": "Paste in visual mode", | ||||||
|  |           "v": "Enter visual mode", | ||||||
|  |           "V": "Enter line visual mode", | ||||||
|  |           "Ctrl-c": "Copy in visual mode", | ||||||
|  |           "y": "Yank in visual mode", | ||||||
|  |           "d": "Delete in visual mode", | ||||||
|  |           "c": "Change in visual mode", | ||||||
|  |           "r": "Replace in visual mode", | ||||||
|  |           "s": "Substitute in visual mode", | ||||||
|  |           "Ctrl-l": "Clear search highlight", | ||||||
|  |           "n": "Next search result", | ||||||
|  |           "N": "Previous search result" | ||||||
|  |      } | ||||||
|  | } | ||||||
							
								
								
									
										41
									
								
								configuration/vscode.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								configuration/vscode.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | { | ||||||
|  |      "name": "Visual Studio Code", | ||||||
|  |      "shortcuts": { | ||||||
|  |           "Ctrl+Shift+P": "Command Palette", | ||||||
|  |           "Ctrl+Shift+N": "New Window", | ||||||
|  |           "Ctrl+Shift+W": "Close Window", | ||||||
|  |           "Ctrl+Shift+T": "Reopen Closed Editor", | ||||||
|  |           "Ctrl+Tab": "Switch Editor", | ||||||
|  |           "Ctrl+Shift+Tab": "Switch Editor in Reverse Order", | ||||||
|  |           "Ctrl+Shift+M": "Toggle Problems Panel", | ||||||
|  |           "Ctrl+Shift+G": "Toggle Source Control", | ||||||
|  |           "Ctrl+Shift+D": "Toggle Debug", | ||||||
|  |           "Ctrl+Shift+X": "Toggle Extensions", | ||||||
|  |           "Ctrl+Shift+V": "Open Markdown Preview", | ||||||
|  |           "Ctrl+K V": "Open Markdown Preview to the Side", | ||||||
|  |           "Ctrl+Shift+F": "Find in Files", | ||||||
|  |           "Ctrl+F": "Find", | ||||||
|  |           "Ctrl+H": "Replace", | ||||||
|  |           "F12": "Go to Definition", | ||||||
|  |           "Ctrl+F12": "Go to Definition (in the same file)", | ||||||
|  |           "Alt+F12": "Peek Definition", | ||||||
|  |           "Ctrl+Shift+O": "Go to Symbol", | ||||||
|  |           "Ctrl+Shift+M": "Show Problems", | ||||||
|  |           "Ctrl+Shift+J": "Toggle Search Details", | ||||||
|  |           "Ctrl+Shift+D": "Duplicate Line or Selection", | ||||||
|  |           "Alt+Up": "Move Line Up", | ||||||
|  |           "Alt+Down": "Move Line Down", | ||||||
|  |           "Ctrl+Shift+K": "Delete Line", | ||||||
|  |           "Ctrl+D": "Add Selection to Next Find Match", | ||||||
|  |           "Ctrl+K Ctrl+D": "Move Last Selection to Next Find Match", | ||||||
|  |           "Alt+Left": "Go Back", | ||||||
|  |           "Alt+Right": "Go Forward", | ||||||
|  |           "Ctrl+Shift+U": "Change Case", | ||||||
|  |           "Ctrl+K Z": "Toggle Zen Mode", | ||||||
|  |           "Ctrl+K S": "Toggle Editor Group Layout", | ||||||
|  |           "Ctrl+K Ctrl+W": "Close All Editors", | ||||||
|  |           "Ctrl+Shift+E": "Show Explorer", | ||||||
|  |           "Ctrl+Shift+H": "Replace in Workspace", | ||||||
|  |           "Ctrl+K Ctrl+X": "Trim Trailing Whitespace" | ||||||
|  |      } | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								package.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								package.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | # Build le script scut.go  | ||||||
|  | go build scut.go | ||||||
|  | 
 | ||||||
|  | # Créer l'archive zip | ||||||
|  | zip -r scut.zip scut README.md configuration | ||||||
|  | 
 | ||||||
|  | # Renommer l'archive | ||||||
|  | mv scut.zip scut-$(date +%Y%m%d).zip | ||||||
							
								
								
									
										
											BIN
										
									
								
								scut-20230725.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								scut-20230725.zip
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										99
									
								
								scut.go
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								scut.go
									
									
									
									
									
								
							| @ -5,6 +5,11 @@ import ( | |||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
|  | 	"os" | ||||||
|  | 	"path/filepath" | ||||||
|  | 	"strings" | ||||||
|  | 	"text/tabwriter" | ||||||
|  | 	"unicode" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type App struct { | type App struct { | ||||||
| @ -16,46 +21,108 @@ type Config struct { | |||||||
| 	Apps []App `json:"apps"` | 	Apps []App `json:"apps"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func loadConfig(dir string) Config { | ||||||
|  | 	apps := []App{} | ||||||
|  | 
 | ||||||
|  | 	// Ouvre le répertoire config | ||||||
|  | 	files, err := ioutil.ReadDir(dir) | ||||||
|  | 	if err != nil { | ||||||
|  | 		//panic(err) | ||||||
|  | 		fmt.Println("Le répertoire config est inexistant !") | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Lis tous les fichiers .json | ||||||
|  | 	for _, file := range files { | ||||||
|  | 		if filepath.Ext(file.Name()) == ".json" { | ||||||
|  | 			data, _ := ioutil.ReadFile(dir + "/" + file.Name()) | ||||||
|  | 			var app App | ||||||
|  | 			json.Unmarshal(data, &app) | ||||||
|  | 			apps = append(apps, app) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	config := Config{ | ||||||
|  | 		Apps: apps, | ||||||
|  | 	} | ||||||
|  | 	return config | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func main() { | func main() { | ||||||
| 
 | 
 | ||||||
|  | 	underline := "- -- - -- - -- - -- - -- - -- - -- - -- - -- - --" | ||||||
|  | 
 | ||||||
| 	flag.Usage = func() { | 	flag.Usage = func() { | ||||||
| 		fmt.Println("") | 		fmt.Println("") | ||||||
| 		fmt.Println("- -- - -- - -- - -- - -- - -- - -- - --") | 		fmt.Println(underline) | ||||||
| 		fmt.Println("  Scut-Reminder : Gestion des raccourcis") | 		fmt.Println("  Scut-Reminder : Gestion des raccourcis") | ||||||
| 		fmt.Println("- -- - -- - -- - -- - -- - -- - -- - --") | 		fmt.Println(underline) | ||||||
| 		fmt.Println("Options :") | 		fmt.Println("\n     Options :") | ||||||
| 		fmt.Printf(" -c NomDuFichierConfig     		Utiliser ce fichier de configuration au lieu de config.json (par défaut)\n") | 		fmt.Println(underline) | ||||||
| 		fmt.Printf(" -a Nom Application        		Afficher les raccourcis de l'application spécifiée\n") | 		fmt.Printf(" -c PathDuDossierConfig     	|| Path du dossier de configuration au lieu du répertoire ./config (par défaut)\n") | ||||||
| 		fmt.Printf(" -h                        		Afficher cette aide\n") | 		fmt.Printf(" -a Nom Application        	|| Afficher les raccourcis de l'application spécifiée\n") | ||||||
|  | 		fmt.Printf(" -f fitre        		|| Filtrer les raccourcis qui contiennent le filtre\n") | ||||||
|  | 		fmt.Printf(" -h                        	|| Afficher cette aide\n") | ||||||
| 		fmt.Println("") | 		fmt.Println("") | ||||||
| 		fmt.Println("     Example :") | 		fmt.Println("     Example :") | ||||||
| 		fmt.Printf(" scut					// Affiche la liste des applications\n\n") | 		fmt.Println(underline) | ||||||
| 		fmt.Printf(" scut -c MaConfig.json -a \"nevim\" 	// Affiche liste des raccourcis de nevim de MaConfig.json \n\n") | 		fmt.Printf(" scut				  || Affiche la liste des applications\n\n") | ||||||
| 		fmt.Printf(" scut -a \"Visual Studio Code\" 		//Affiche liste des raccourcis de vscode \n\n") | 		fmt.Printf(" scut -c MaConfig.json -a \"nevim\" || Affiche liste des raccourcis de nevim de MaConfig.json \n\n") | ||||||
|  | 		fmt.Printf(" scut -a \"Visual Studio Code\" 	  || Affiche liste des raccourcis de vscode \n\n") | ||||||
|  | 		fmt.Printf(" scut -a \"Kitty\" -f quit 	  || Affiche liste des raccourcis qui contient 'quit' \n\n") | ||||||
| 		fmt.Println("") | 		fmt.Println("") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	configFile := flag.String("c", "config.json", "Config file") | 	configDir := flag.String("c", "config", "Config directory") | ||||||
|  | 
 | ||||||
| 	appName := flag.String("a", "", "Application name") | 	appName := flag.String("a", "", "Application name") | ||||||
|  | 
 | ||||||
|  | 	filter := flag.String("f", "", "Filter") | ||||||
| 	flag.Parse() | 	flag.Parse() | ||||||
| 
 | 
 | ||||||
| 	data, _ := ioutil.ReadFile(*configFile) | 	config := loadConfig(*configDir) | ||||||
| 	var config Config | 
 | ||||||
| 	json.Unmarshal(data, &config) | 	cleanFilter := strings.TrimFunc(*filter, func(r rune) bool { | ||||||
|  | 		return !unicode.IsGraphic(r) | ||||||
|  | 	}) | ||||||
| 
 | 
 | ||||||
| 	if *appName == "" { | 	if *appName == "" { | ||||||
| 		// List all applications | 		// List all applications | ||||||
|  | 		fmt.Println(underline) | ||||||
|  | 		fmt.Println("          A P P L I C A T I O N S") | ||||||
|  | 		fmt.Println(underline) | ||||||
| 		for _, app := range config.Apps { | 		for _, app := range config.Apps { | ||||||
| 			fmt.Printf("%s\n", app.Name) | 			fmt.Printf("%s\n", app.Name) | ||||||
| 		} | 		} | ||||||
|  | 		fmt.Println() | ||||||
| 	} else { | 	} else { | ||||||
| 		// List shortcuts for application | 		w := tabwriter.NewWriter(os.Stdout, 0, 0, 10, '.', 0) | ||||||
|  | 		if *filter != "" { | ||||||
| 			for _, app := range config.Apps { | 			for _, app := range config.Apps { | ||||||
| 			if app.Name == *appName { | 				if strings.ToUpper(app.Name) == strings.ToUpper(*appName) { | ||||||
|  | 					fmt.Println(underline) | ||||||
|  | 					fmt.Fprintln(w, "          S H O R T C U T S : "+app.Name) | ||||||
|  | 					fmt.Println(underline) | ||||||
| 					for shortcut, desc := range app.Shortcuts { | 					for shortcut, desc := range app.Shortcuts { | ||||||
| 					fmt.Printf("%s: %s\n", shortcut, desc) | 						if strings.Contains(strings.ToUpper(shortcut), strings.ToUpper(cleanFilter)) || strings.Contains(strings.ToUpper(desc), strings.ToUpper(cleanFilter)) { | ||||||
|  | 							fmt.Fprintf(w, "%s \t %s\n", shortcut, desc) | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | 			w.Flush() | ||||||
|  | 		} else { | ||||||
|  | 			for _, app := range config.Apps { | ||||||
|  | 				if strings.ToUpper(app.Name) == strings.ToUpper(*appName) { | ||||||
|  | 					fmt.Println(underline) | ||||||
|  | 					fmt.Fprintln(w, "          S H O R T C U T S : "+app.Name) | ||||||
|  | 					fmt.Println(underline) | ||||||
|  | 					for shortcut, desc := range app.Shortcuts { | ||||||
|  | 						fmt.Fprintf(w, "%s \t %s\n", shortcut, desc) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			w.Flush() | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user