Skip to content

Commit

Permalink
Merge branch 'main' into pet-main-knqyf263-views-size
Browse files Browse the repository at this point in the history
  • Loading branch information
RamiAwar authored Feb 28, 2024
2 parents b1337a9 + 4e7458f commit 9f134e1
Show file tree
Hide file tree
Showing 18 changed files with 452 additions and 154 deletions.
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Community Support
url: https://github.com/knqyf263/pet/discussions
about: Please ask and answer questions here.
27 changes: 27 additions & 0 deletions .github/ISSUE_TEMPLATE/privileged.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Privileged
description: You were directed from Github discussions to create an issue in Pet 👇
body:
- type: markdown
attributes:
value: |
## Thanks!
Thanks for your interest in Pet! 🚀
If you are were not directed to create an issue here, please start the conversation in a [Question in GitHub Discussions](https://github.com/knqyf263/pet/discussions/categories/questions) instead!
## Got a PR?
If you want to create a PR, share the idea first in [Github discussions](https://github.com/knqyf263/pet/discussions)! 💬
This will give you ⚡️ quick feedback ⚡️ before you've spent time on it, instead of waiting for a much longer review process AFTER you've done the work.
- type: checkboxes
id: privileged
attributes:
label: Privileged issue
description: Confirm that you were directed to create an issue here.
options:
- label: I've been directed through Discussions to create an issue here.
required: true
- type: textarea
id: content
attributes:
label: Issue Content
description: Add the content of the issue here.

82 changes: 82 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
analyze:
name: Analyze
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
# required for all workflows
security-events: write

# only required for workflows in private repositories
actions: read
contents: read

strategy:
fail-fast: false
matrix:
language: [ 'go' ]
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

steps:
- name: Checkout repository
uses: actions/checkout@v4

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.

# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality


# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3

# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ jobs:
uses: goreleaser/goreleaser-action@v5
with:
version: v1.18.2
args: release --rm-dist
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.PET_PAT }}
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ So I made it possible to register snippets with description and search them easi
- [bash](#bash-prev-function)
- [zsh](#zsh-prev-function)
- [fish](#fish)
- [Select snippets at the current line (like C-r)](#select-snippets-at-the-current-line-like-c-r)
- [Select snippets at the current line (like C-r) (RECOMMENDED)](#select-snippets-at-the-current-line-like-c-r-recommended)
- [bash](#bash)
- [zsh](#zsh)
- [fish](#fish-1)
Expand Down Expand Up @@ -107,10 +107,12 @@ https://github.com/otms61/fish-pet

<img src="doc/pet02.gif" width="700">

## Select snippets at the current line (like C-r)
## Select snippets at the current line (like C-r) (RECOMMENDED)

### bash
By adding the following config to `.bashrc`, you can search snippets and output on the shell.
This will also allow you to execute the commands yourself, which will add them to your shell history! This is basically the only way we can manipulate shell history.
This also allows you to *chain* commands! [Example here](https://github.com/knqyf263/pet/discussions/266)

```
$ cat .bashrc
Expand Down
5 changes: 5 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## Reporting a Vulnerability

If you discover a potential security issue in this project we ask that you notify our maintainers via email to rami.awar.ra {at} gmail.com or knqyf263 {at} gmail.com

Please do **not** create a public github issue.
13 changes: 4 additions & 9 deletions cmd/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"os"
"strings"

"github.com/fatih/color"
"github.com/knqyf263/pet/config"
"github.com/spf13/cobra"
"gopkg.in/alessio/shellescape.v1"
Expand All @@ -32,12 +31,10 @@ func execute(cmd *cobra.Command, args []string) (err error) {
return err
}
command := strings.Join(commands, "; ")
if config.Flag.Debug {
fmt.Printf("Command: %s\n", command)
}
if config.Flag.Command {
fmt.Printf("%s: %s\n", color.YellowString("Command"), command)
}

// Show final command before executing it
fmt.Printf("> %s\n", command)

return run(command, os.Stdin, os.Stdout)
}

Expand All @@ -49,6 +46,4 @@ func init() {
`Initial value for query`)
execCmd.Flags().StringVarP(&config.Flag.FilterTag, "tag", "t", "",
`Filter tag`)
execCmd.Flags().BoolVarP(&config.Flag.Command, "command", "c", false,
`Show the command with the plain text before executing`)
}
12 changes: 6 additions & 6 deletions cmd/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,32 +41,32 @@ func list(cmd *cobra.Command, args []string) error {
// make sure multiline command printed as oneline
command = strings.Replace(command, "\n", "\\n", -1)
fmt.Fprintf(color.Output, "%s : %s\n",
color.GreenString(description), color.YellowString(command))
color.HiGreenString(description), color.HiYellowString(command))
} else {
fmt.Fprintf(color.Output, "%12s %s\n",
color.GreenString("Description:"), snippet.Description)
color.HiGreenString("Description:"), snippet.Description)
if strings.Contains(snippet.Command, "\n") {
lines := strings.Split(snippet.Command, "\n")
firstLine, restLines := lines[0], lines[1:]
fmt.Fprintf(color.Output, "%12s %s\n",
color.YellowString(" Command:"), firstLine)
color.HiYellowString(" Command:"), firstLine)
for _, line := range restLines {
fmt.Fprintf(color.Output, "%12s %s\n",
" ", line)
}
} else {
fmt.Fprintf(color.Output, "%12s %s\n",
color.YellowString(" Command:"), snippet.Command)
color.HiYellowString(" Command:"), snippet.Command)
}
if snippet.Tag != nil {
tag := strings.Join(snippet.Tag, " ")
fmt.Fprintf(color.Output, "%12s %s\n",
color.CyanString(" Tag:"), tag)
color.HiCyanString(" Tag:"), tag)
}
if snippet.Output != "" {
output := strings.Replace(snippet.Output, "\n", "\n ", -1)
fmt.Fprintf(color.Output, "%12s %s\n",
color.RedString(" Output:"), output)
color.HiRedString(" Output:"), output)
}
fmt.Println(strings.Repeat("-", 30))
}
Expand Down
43 changes: 28 additions & 15 deletions cmd/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import (
"fmt"
"io"
"os"
"path/filepath"
"runtime"
"strings"

"github.com/chzyer/readline"
Expand All @@ -25,20 +23,29 @@ var newCmd = &cobra.Command{
RunE: new,
}

func scan(message string) (string, error) {
tempFile := "/tmp/pet.tmp"
if runtime.GOOS == "windows" {
tempDir := os.Getenv("TEMP")
tempFile = filepath.Join(tempDir, "pet.tmp")
func CanceledError() error {
return errors.New("canceled")
}

func scan(message string, out io.Writer, in io.ReadCloser, allowEmpty bool) (string, error) {
f, err := os.CreateTemp("", "pet-")
if err != nil {
return "", err
}
defer os.Remove(f.Name()) // clean up temp file
tempFile := f.Name()

l, err := readline.NewEx(&readline.Config{
Stdout: out,
Stdin: in,
Prompt: message,
HistoryFile: tempFile,
InterruptPrompt: "^C",
EOFPrompt: "exit",

HistorySearchFold: true,
})

if err != nil {
return "", err
}
Expand All @@ -56,13 +63,16 @@ func scan(message string) (string, error) {
break
}

// If empty string, just ignore tags
line = strings.TrimSpace(line)
if line == "" {
if line == "" && !allowEmpty {
continue
} else if line == "" {
return "", nil
}
return line, nil
}
return "", errors.New("canceled")
return "", CanceledError()
}

func new(cmd *cobra.Command, args []string) (err error) {
Expand All @@ -77,29 +87,32 @@ func new(cmd *cobra.Command, args []string) (err error) {

if len(args) > 0 {
command = strings.Join(args, " ")
fmt.Fprintf(color.Output, "%s %s\n", color.YellowString("Command>"), command)
fmt.Fprintf(color.Output, "%s %s\n", color.HiYellowString("Command>"), command)
} else {
command, err = scan(color.YellowString("Command> "))
command, err = scan(color.HiYellowString("Command> "), os.Stdout, os.Stdin, false)
if err != nil {
return err
}
}
description, err = scan(color.GreenString("Description> "))
description, err = scan(color.HiGreenString("Description> "), os.Stdout, os.Stdin, false)
if err != nil {
return err
}

if config.Flag.Tag {
var t string
if t, err = scan(color.CyanString("Tag> ")); err != nil {
if t, err = scan(color.HiCyanString("Tag> "), os.Stdout, os.Stdin, true); err != nil {
return err
}
tags = strings.Fields(t)

if t != "" {
tags = strings.Fields(t)
}
}

for _, s := range snippets.Snippets {
if s.Description == description {
return fmt.Errorf("Snippet [%s] already exists", description)
return fmt.Errorf("snippet [%s] already exists", description)
}
}

Expand Down
Loading

0 comments on commit 9f134e1

Please sign in to comment.