| 
									
										
										
										
											2015-12-10 15:19:38 -07:00
										 |  |  | // Copyright 2015 The Hugo Authors. All rights reserved.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							|  |  |  | // http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-16 18:04:56 +02:00
										 |  |  | package commands
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:03:31 -03:00
										 |  |  | 	"io"
 | 
					
						
							|  |  |  | 	"os"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-16 18:04:56 +02:00
										 |  |  | 	"github.com/spf13/cobra"
 | 
					
						
							|  |  |  | 	jww "github.com/spf13/jwalterweatherman"
 | 
					
						
							|  |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | var _ cmder = (*genautocompleteCmd)(nil)
 | 
					
						
							| 
									
										
										
										
											2015-05-16 18:04:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | type genautocompleteCmd struct {
 | 
					
						
							|  |  |  | 	autocompleteTarget string
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:02:53 -03:00
										 |  |  | 	// bash, zsh or fish
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | 	autocompleteType string
 | 
					
						
							| 
									
										
										
										
											2018-04-10 09:19:26 +02:00
										 |  |  | 	*baseCmd
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func newGenautocompleteCmd() *genautocompleteCmd {
 | 
					
						
							|  |  |  | 	cc := &genautocompleteCmd{}
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-10 09:19:26 +02:00
										 |  |  | 	cc.baseCmd = newBaseCmd(&cobra.Command{
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | 		Use:   "autocomplete",
 | 
					
						
							|  |  |  | 		Short: "Generate shell autocompletion script for Hugo",
 | 
					
						
							|  |  |  | 		Long: `Generates a shell autocompletion script for Hugo.
 | 
					
						
							| 
									
										
										
										
											2015-08-04 03:15:12 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | By default, the file is written directly to /etc/bash_completion.d
 | 
					
						
							|  |  |  | for convenience, and the command may need superuser rights, e.g.:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 13:59:53 +02:00
										 |  |  | 	$ sudo hugo gen autocomplete
 | 
					
						
							| 
									
										
										
										
											2015-08-04 03:15:12 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | Add ` + "`--completionfile=/path/to/file`" + ` flag to set alternative
 | 
					
						
							|  |  |  | file-path and name.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:02:53 -03:00
										 |  |  | Add ` + "`--type={bash, zsh or fish}`" + ` flag to set alternative
 | 
					
						
							| 
									
										
										
										
											2021-01-06 10:19:11 -03:00
										 |  |  | shell type.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 03:15:12 -06:00
										 |  |  | Logout and in again to reload the completion scripts,
 | 
					
						
							|  |  |  | or just source them in directly:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-06 10:19:11 -03:00
										 |  |  | 	$ . /etc/bash_completion or /path/to/file`,
 | 
					
						
							| 
									
										
										
										
											2015-08-04 03:15:12 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | 		RunE: func(cmd *cobra.Command, args []string) error {
 | 
					
						
							| 
									
										
										
										
											2021-01-06 10:19:11 -03:00
										 |  |  | 			var err error
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:03:31 -03:00
										 |  |  | 			var target io.Writer
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if cc.autocompleteTarget == "" {
 | 
					
						
							|  |  |  | 				target = os.Stdout
 | 
					
						
							|  |  |  | 			} else {
 | 
					
						
							|  |  |  | 				target, _ = os.OpenFile(cc.autocompleteTarget, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-06 10:19:11 -03:00
										 |  |  | 			switch cc.autocompleteType {
 | 
					
						
							|  |  |  | 			case "zsh":
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:03:31 -03:00
										 |  |  | 				err = cmd.Root().GenZshCompletion(target)
 | 
					
						
							| 
									
										
										
										
											2021-01-06 10:19:11 -03:00
										 |  |  | 			case "bash":
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:03:31 -03:00
										 |  |  | 				err = cmd.Root().GenBashCompletion(target)
 | 
					
						
							| 
									
										
										
										
											2021-01-06 10:19:11 -03:00
										 |  |  | 			case "fish":
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:03:31 -03:00
										 |  |  | 				err = cmd.Root().GenFishCompletion(target, true)
 | 
					
						
							| 
									
										
										
										
											2021-01-06 10:19:11 -03:00
										 |  |  | 			default:
 | 
					
						
							|  |  |  | 				return newUserError("Unsupported completion type")
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | 			}
 | 
					
						
							| 
									
										
										
										
											2015-12-02 11:42:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | 			if err != nil {
 | 
					
						
							|  |  |  | 				return err
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							| 
									
										
										
										
											2016-03-23 00:06:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:03:31 -03:00
										 |  |  | 			if cc.autocompleteTarget != "" {
 | 
					
						
							|  |  |  | 				jww.FEEDBACK.Println(cc.autocompleteType+" completion file for Hugo saved to", cc.autocompleteTarget)
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | 			return nil
 | 
					
						
							|  |  |  | 		},
 | 
					
						
							| 
									
										
										
										
											2018-04-10 09:19:26 +02:00
										 |  |  | 	})
 | 
					
						
							| 
									
										
										
										
											2015-05-16 18:04:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-02 20:03:31 -03:00
										 |  |  | 	cc.cmd.PersistentFlags().StringVarP(&cc.autocompleteTarget, "completionfile", "f", "", "autocompletion file, defaults to stdout")
 | 
					
						
							|  |  |  | 	cc.cmd.PersistentFlags().StringVarP(&cc.autocompleteType, "type", "t", "bash", "autocompletion type (zsh, bash or fish)")
 | 
					
						
							| 
									
										
										
										
											2018-04-09 22:09:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return cc
 | 
					
						
							| 
									
										
										
										
											2015-05-16 18:04:56 +02:00
										 |  |  | }
 |