gosc

package module
v0.0.0-...-65b2f5c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 30, 2018 License: MIT Imports: 18 Imported by: 0

README

GOsc - Simplify your waste-bytes helper functions

Travis CI build GitHub version GoDoc GoReport

GOsc is an helper package for Go, written to be user friendly with alias and simple examples.

If you need a new helper, please open an issue and if you have already the code, thank you!

Installation

Install the package from your terminal with go get github.com/danilopolani/gosc and then import it in your project: import "github.com/danilopolani/gosc".

Available helpers

Slices

  • Some / Any - Check if at least one item of the given slice satisfies the given function.
  • Every / All - Check if all items of the given slice satisfy the given function.
  • Map - Apply the given function to the given slice.
  • Filter - Filter out to the given slice the items that don't satisfy the given function.
  • Index - Find the index of an item in the given slice.
  • Indexi - Find the index of an item in the given slice. (Case Insenstive)
  • Delete - Delete an item from a slice.
  • Rsort - Reverse the order (desc) of an ordered slice.
  • EqSlices - Check if two slices are equal.
  • SliceRand - Retrieve a random item from the given slice.
  • InSlice - Check if a value is in the given slice.

Strings

  • ToBytes - Convert a string into a bytes slice.
  • ByteToString - Convert a bytes slice into a string.
  • Rstring - Reverse a string (every character).
  • LcFirst - Convert the first character to the string to LowerCase.
  • UcFirst - Convert the first character to the string to UpperCase.
  • ToSnake - Convert a string to snake_case.
  • ToCamel - Convert a string to camelCase.
  • ToPascal - Convert a string to PascalCase.
  • ToKebab - Convert a string to kebab-case (aka slug).
  • ToInt - Convert a string to an int.
  • ToInt64 - Convert a string to an int64.
  • ToUint - Convert a string to a uint.
  • ToBase64 - Encode a string in base64.
  • FromBase64 - Decode a string from base64.
  • IsBool - Check if a string is a boolean.
  • IsEmail - Check if a string is an email address.
  • IsURL - Check if a string is a valid URL.
  • IsJSON - Check if a string is a valid JSON document.
  • IsIP - Check if a string is an IPv4.
  • IsHexColor - Check if a string is a hex color.
  • IsRGBColor - Check if a string is a RGB color.
  • IsCreditCard - Check if a string is a valid credit card.
  • IsOnlyDigits - Check if a string contains only numbers.
  • IsOnlyLetters - Check if a string contains only letters.
  • IsOnlyAlphaNumeric - Check if a string contains only letters and numbers.
  • Uniq - Generate a unique token based on current time and hashed in sha256.
  • StrRand - Generate a random string of the given size.
  • UUID - Generate a UUID v4 according to RFC 4122.

Numbers

  • IsInt - Check if a string is an integer.
  • IsFloat - Check if a string is a float number and numbers.
  • Utoa - Transform a uint into a string.
  • Rand - Pick a random int from the given range.

To do

  • Slice reduce
  • Slice unique
  • Slice shuffle
  • Map key exists
  • Map keys
  • Map values

Helpers

The detailed list of helpers with examples.

Some / Any

Check if at least one item of the given slice satisfies the given function.
Methods: SomeString, SomeInt, SomeFloat
Alias: AnyString, AnyInt, AnyFloat

slice1 := []string{"foo", "bar", "baz"}
slice2 := []int{3, 5}

fmt.Println(SomeString(slice1, func(s string) bool {
  return strings.HasPrefix(s, "ba")
})) // true
fmt.Println(AnyInt(slice2, func(i int) bool {
  return i%2 == 0
})) // false
Every / All

Check if all items of the given slice satisfy the given function.
Methods: EveryString, EveryInt, EveryFloat
Alias: AllString, AllInt, AllFloat

slice1 := []string{"bar", "baz"}
slice2 := []int{0, 2, 5}

fmt.Println(EveryString(slice1, func(s string) bool {
  return strings.HasPrefix(s, "ba")
})) // true
fmt.Println(AllInt(slice2, func(i int) bool {
  return i%2 == 0
})) // false
Map

Apply the given function to the given slice.
Methods: MapString, MapInt, MapFloat

slice1 := []string{"foo", "bar", "baz"}
slice2 := []int{3, 5}

fmt.Println(MapString(slice1, strings.ToUpper) // [FOO BAR BAZ]
fmt.Println(MapInt(slice2, func(i int) int {
  return i*2
})) // [6 10]
Filter

Filter out to the given slice the items that don't satisfy the given function.
Methods: FilterString, FilterInt, FilterFloat

slice1 := []string{"foo", "bar", "baz"}
slice2 := []int{3, 5}

fmt.Println(FilterString(slice1, func(s string) bool {
  return strings.HasPrefix(s, "ba")
})) // [bar baz]
fmt.Println(FilterInt(slice2, func(i int) bool {
  return i%2 == 0
})) // []
Index

Find the index of an item in the given slice.
Return: int (-1 if not found)

slice1 := []string{"foo", "bar", "baz"}
slice2 := []int{3, 5}

fmt.Println(Index(&slice1, "baz")) // 2
fmt.Println(Index(&slice2, 6) // -1
Indexi

Find the index of an item in the given slice. (Case Insensitive)
Return: int (-1 if not found)

slice1 := []string{"foo", "BAR", "baz"}

fmt.Println(Index(&slice1, "BaR")) // 1
Delete

Delete an item from a slice.
Supported types: string, int, float64

slice1 := []string{"foo", "bar", "lazy", "dog"}
slice2 := []int{5, -3, 64}

Delete(&slice1, 2)
Delete(&slice2, 0)

fmt.Println(slice1) // [foo bar dog]
fmt.Println(slice2) // [-3 64]
Rsort

Reverse the order (desc) of an ordered slice.
Alias: ReverseSort

slice1 := []string{"foo", "bar", "lazy", "dog"}
slice2 := []int{5, -3, 64}

Rsort(&slice1)
ReverseSort(&slice2)

fmt.Println(slice1) // [lazy foo dog bar]
fmt.Println(slice2) // [64 5 -3]
EqSlices

Check if two slices are equal (not in depth, use reflect.DeepEqual for that).
Return: bool

slice1 := []string{"foo", "bar"}
slice2 := []int{5, -3, 64}

fmt.Println(EqSlices(&slice1, &[]string{"foo","bar"})) // true
fmt.Println(EqSlices(&slice2, &slice1)) // false
fmt.Println(EqSlices(&slice2, &[]int{-3, 5, 64})) // false
fmt.Println(EqSlices(&slice2, &[]int{5, -3, 64})) // true
SliceRand

Retrieve a random item from the given slice. If you don't want to assign it to a variable, please look the other functions at the end.

slice1 := []string{"foo", "bar", "lazy", "dog"}
slice2 := []int{5, -3, 64, 777}

var randomString string
var randomInt int

SliceRand(&slice1, &randomString)
SliceRand(&slice2, &randomInt)

fmt.Println(randomString) // My output: bar
fmt.Println(randomInt) // My output: -3
InSlice

Check if a value is in the given slice.

slice1 := []string{"foo", "bar", "lazy", "dog"}
slice2 := []int{5, -3, 64, 777}

fmt.Println(InSlice("lazy", &slice1)) // frue
fmt.Println(InSlice(55, &slice2)) // false

Strings

ToBytes

Convert a string into a bytes slice.
Return: []byte

fmt.Println(gosc.ToBytes("Foo")) // [70 111 111]
ByteToString

Convert a bytes slice into a string.
Return: string

fmt.Println(gosc.ByteToString([]byte{70, 111, 111})) // Foo
Rstring

Reverse a string (every character).
alias: ReverseString
Return: string

fmt.Println(gosc.Rstring("foo")) // oof
fmt.Println(gosc.ReverseString("소주")) // 주소
LcFirst

Convert the first character to the string to LowerCase.
alias: LowerFirst
Return: string

fmt.Println(gosc.LcFirst("Foo")) // foo
fmt.Println(gosc.LowerFirst("소주")) // 소주
UcFirst

Convert the first character to the string to UpperCase.
alias: UpperFirst
Return: string

fmt.Println(gosc.UcFirst("foo")) // Foo
fmt.Println(gosc.UpperFirst("소주")) // 소주
ToSnake

Convert a string to snake_case.
alias: ToSnakeCase
Return: string

fmt.Println(gosc.ToSnake("Foo 123")) // foo_123
fmt.Println(gosc.ToSnakeCase("camelCase")) // camel_case
ToCamel

Convert a string to camelCase.
alias: ToCamelCase
Return: string
Known bugs:

  • [] Doesn't lowercase the string
fmt.Println(gosc.ToCamel("foo bar")) // fooBar
fmt.Println(gosc.ToCamelCase("kebab-case")) // kebabCase
ToPascal

Convert a string to PascalCase.
alias: ToPascalCase
Return: string
Known bugs:

  • [] Doesn't lowercase the string
fmt.Println(gosc.ToPascal("foo bar")) // FooBar
fmt.Println(gosc.ToPascalCase("kebab-case")) // KebabCase
ToKebab

Convert a string to kebab-case.
alias: ToKebabCase
Return: string

fmt.Println(gosc.ToKebab("Foo bAr")) // foo-bar
fmt.Println(gosc.ToKebabCase("snake_case")) // snake-case
ToInt

Convert a string to an int.
Return: int

fmt.Println(gosc.ToInt("-53")) // -53
fmt.Println(gosc.ToInt("542.8")) // 542
fmt.Println(gosc.ToInt("foo")) // 0
ToInt64

Convert a string to an int64. Return: int64

fmt.Println(gosc.ToInt64("-53")) // -53
fmt.Println(gosc.ToInt64("542.8")) // 542
fmt.Println(gosc.ToInt64("foo")) // 0
ToUint

Convert a string to a uint.
Return: uint

fmt.Println(gosc.ToUint("2")) // 2
fmt.Println(gosc.ToUint("-53")) // 0
fmt.Println(gosc.ToUint("542.8")) // 542
fmt.Println(gosc.ToUint("foo")) // 0
ToBase64

Encode a string in base64.
Return: string

fmt.Println(gosc.ToBase64("abc〩")) // YWJj44Cp
FromBase64

Decode a string from base64.
Return: string

fmt.Println(gosc.FromBase64("YWJj44Cp")) // abc〩
fmt.Println(gosc.FromBase64("fake")) // ""
IsBool

Check if a string is a boolean.
Return: bool

fmt.Println(gosc.IsBool("false")) // true
fmt.Println(gosc.IsBool("foo")) // false
fmt.Println(gosc.IsBool("5")) // false
fmt.Println(gosc.IsBool("1")) // true
IsEmail

Check if a string is an email address.
Return: bool

fmt.Println(gosc.IsEmail("me@example.com")) // true
fmt.Println(gosc.IsEmail("foo")) // false
fmt.Println(gosc.IsEmail("")) // false
IsURL

Check if a string is a valid URL.
Return: bool
Known bugs:

  • [] Other protocols (such as FTP) return true
  • [] Just the procotol returns true
fmt.Println(gosc.IsURL("https://github.com")) // true
fmt.Println(gosc.IsURL("https://github")) // false
fmt.Println(gosc.IsURL("https://github.com?q=gosc")) // true
IsJSON

Check if a string is a valid JSON document.
Return: bool

fmt.Println(gosc.IsJSON("{\"foo\":\"bar\"}")) // true
fmt.Println(gosc.IsJSON("")) // false
fmt.Println(gosc.IsJSON("[1]")) // true
IsIP

Check if a string is an IPv4.
Return: bool

fmt.Println(gosc.IsIP("127.0.0.1")) // true
fmt.Println(gosc.IsIP("")) // false
fmt.Println(gosc.IsIP("127.0.0.1.1")) // false
fmt.Println(gosc.IsIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334")) // false
fmt.Println(gosc.IsIP("D8-D3-85-EB-12-E3")) // false
IsHexColor

Check if a string is a hex color.
Return: bool

fmt.Println(gosc.IsHexColor("#fff")) // true
fmt.Println(gosc.IsHexColor("fff")) // true
fmt.Println(gosc.IsHexColor("#ffff")) // false
fmt.Println(gosc.IsHexColor("#ggg")) // false
fmt.Println(gosc.IsHexColor("rgb(255, 255, 255)")) // false
IsRGBColor

Check if a string is a RGB color.
alias: IsRGB
Return: bool

fmt.Println(gosc.IsRGBColor("rgb(255, 255, 255)")) // true
fmt.Println(gosc.IsRGBColor("rgb(255, 255, 256)")) // false (out of range)
fmt.Println(gosc.IsRGBColor("rgb(255, 255)")) // false
fmt.Println(gosc.IsRGB("rgba(255, 255, 255, 1)")) // false
fmt.Println(gosc.IsRGB("#fff")) // false
IsCreditCard

Check if a string is a valid credit card.
Return: bool

fmt.Println(gosc.IsCreditCard("4653 0343 2480 9848")) // true (Visa)
fmt.Println(gosc.IsCreditCard("4653-0343-2480-9848")) // true
fmt.Println(gosc.IsCreditCard("1111-0343-2480-9848")) // false (not valid vendor)
fmt.Println(gosc.IsCreditCard("5321 7873 3201 8954")) // true (Mastercard)
fmt.Println(gosc.IsCreditCard("3421-941266-26371")) // true (American Express)
fmt.Println(gosc.IsCreditCard("주주주주-주주주주-주주주주-주주주주")) // false
IsOnlyDigits

Check if a string contains only numbers.
alias: IsOnlyNumbers Return: bool

fmt.Println(gosc.IsOnlyDigits("1234")) // true
fmt.Println(gosc.IsOnlyDigits("-1")) // false
fmt.Println(gosc.IsOnlyNumbers("foo")) // false
IsOnlyLetters

Check if a string contains only letters.
alias: IsOnlyAlpha Return: bool

fmt.Println(gosc.IsOnlyLetters("foo")) // true
fmt.Println(gosc.IsOnlyLetters("foo3")) // false
fmt.Println(gosc.IsOnlyAlpha("주")) // false
fmt.Println(gosc.IsOnlyAlpha("")) // false
IsOnlyAlphaNumeric

Check if a string contains only letters and numbers.
alias: IsOnlyLettersNumbers, IsOnlyAlphaNum
Return: bool

fmt.Println(gosc.IsOnlyAlphaNumeric("foo")) // true
fmt.Println(gosc.IsOnlyAlphaNumeric("foo3")) // true
fmt.Println(gosc.IsOnlyAlpha("주")) // false
fmt.Println(gosc.IsOnlyAlpha("")) // false
Uniq

Generate a unique token based on current time and hashed in sha256.
alias: Unique
Return: string

fmt.Println(gosc.Uniq()) // My output: 839079123b9223727c31982cedc4e63f880a91a26591532f08185453d20db497
StrRand

Generate a random string of the given size.
alias: RandStr, RandomString
Return: string

fmt.Println(gosc.StrRand(12)) // My output: BbikfUNZdXCS
UUID

Generate a UUID v4 according to RFC 4122.
Return: string

fmt.Println(gosc.UUID()) // My output: 8e67e7ae-d674-4470-9345-35511fed974a

Numbers

IsInt

Check if a string is an integer.
Return: bool

fmt.Println(gosc.IsInt("5")) // true
fmt.Println(gosc.IsInt("-3")) // true
fmt.Println(gosc.IsInt("76.9")) // false
fmt.Println(gosc.IsInt("foo")) // false
IsFloat

Check if a string is a float number.
Return: bool

fmt.Println(gosc.IsFloat("76.9")) // true
fmt.Println(gosc.IsFloat("5")) // true
fmt.Println(gosc.IsFloat("foo")) // false
Utoa

Transform a uint into a string.
Return: string

var i uint = 5
fmt.Println(gosc.Utoa(i)) // "5"
Rand

Pick a random int from the given range.
Return: int

fmt.Println(Rand(1, 999)) // My output: 508

Documentation

Overview

Package gosc is an helper package for Go, written to be user friendly with alias and inspired by Lodash.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AllFloat

func AllFloat(s []float64, f func(float64) bool) bool

AllFloat returns true if all of the float64s in the slice satisfy the predicate f

func AllInt

func AllInt(s []int, f func(int) bool) bool

AllInt returns true if all of the ints in the slice satisfy the predicate f

func AllString

func AllString(s []string, f func(string) bool) bool

AllString returns true if all of the strings in the slice satisfy the predicate f

func AnyFloat

func AnyFloat(s []float64, f func(float64) bool) bool

AnyFloat returns true if one of the float64s in the slice satisfies the predicate f

func AnyInt

func AnyInt(s []int, f func(int) bool) bool

AnyInt returns true if one of the ints in the slice satisfies the predicate f

func AnyString

func AnyString(s []string, f func(string) bool) bool

AnyString returns true if one of the strings in the slice satisfies the predicate f

func ByteToString

func ByteToString(b []byte) string

ByteToString converts a bytes slice to a string

func Delete

func Delete(s interface{}, i int)

Delete an item from a slice

func EqSlices

func EqSlices(a, b interface{}) bool

EqSlices returns true if two slices are equal (not in-depth, for that use reflect.DeepEqual)

func EveryFloat

func EveryFloat(s []float64, f func(float64) bool) bool

EveryFloat returns true if all of the float64s in the slice satisfy the predicate f

func EveryInt

func EveryInt(s []int, f func(int) bool) bool

EveryInt returns true if all of the ints in the slice satisfy the predicate f

func EveryString

func EveryString(s []string, f func(string) bool) bool

EveryString returns true if all of the strings in the slice satisfy the predicate f

func FilterFloat

func FilterFloat(s []float64, f func(float64) bool) []float64

FilterFloat returns a new slice containing all float64s in the slice that satisfy the predicate f.

func FilterInt

func FilterInt(s []int, f func(int) bool) []int

FilterInt returns a new slice containing all ints in the slice that satisfy the predicate f.

func FilterString

func FilterString(s []string, f func(string) bool) []string

FilterString returns a new slice containing all strings in the slice that satisfy the predicate f.

func FromBase64

func FromBase64(s string) string

FromBase64 decodes a string from base64

func InSlice

func InSlice(v interface{}, s interface{}) bool

InSlice returns a boolean if the value is in the slice v = value to find s = slice

func Index

func Index(s interface{}, t interface{}) int

Index returns the index of an element in a slice or -1 if not found

func Indexi

func Indexi(s []string, t string) int

Indexi returns the index of a string in a slice or -1 if not found. Case Insentive.

func IsBool

func IsBool(s string) bool

IsBool checks if a string is a boolean

func IsCreditCard

func IsCreditCard(s string) bool

IsCreditCard returns true if the provided string is a valid credit card

func IsEmail

func IsEmail(s string) bool

IsEmail returns true if the provided string is a valid email address

func IsFloat

func IsFloat(s string) bool

IsFloat checks if a string is a float number

func IsHexColor

func IsHexColor(s string) bool

IsHexColor returns true if the provided string is a valid HEX color

func IsIP

func IsIP(s string) bool

IsIP returns true if the provided string is a valid IPv4

func IsInt

func IsInt(s string) bool

IsInt checks if a string is an integer

func IsJSON

func IsJSON(s string) bool

IsJSON returns true if the provided string is a valid JSON document

func IsOnlyAlpha

func IsOnlyAlpha(s string) bool

IsOnlyAlpha is an alias of IsOnlyLetters

func IsOnlyAlphaDigits

func IsOnlyAlphaDigits(s string) bool

IsOnlyAlphaDigits is an alias of IsOnlyAlphaNumeric

func IsOnlyAlphaNum

func IsOnlyAlphaNum(s string) bool

IsOnlyAlphaNum is an alias of IsOnlyAlphaNumeric

func IsOnlyAlphaNumeric

func IsOnlyAlphaNumeric(s string) bool

IsOnlyAlphaNumeric returns true if the provided string is composed only by letters and numbers

func IsOnlyDigits

func IsOnlyDigits(s string) bool

IsOnlyDigits returns true if the provided string is composed only by numbers

func IsOnlyLetters

func IsOnlyLetters(s string) bool

IsOnlyLetters returns true if the provided string is composed only by letters

func IsOnlyLettersNumbers

func IsOnlyLettersNumbers(s string) bool

IsOnlyLettersNumbers is an alias of IsOnlyAlphaNumeric

func IsOnlyNumbers

func IsOnlyNumbers(s string) bool

IsOnlyNumbers is an alias of IsOnlyDigits

func IsRGB

func IsRGB(s string) bool

IsRGB is an alias of IsRGBColor

func IsRGBColor

func IsRGBColor(s string) bool

IsRGBColor returns true if the provided string is a valid RGB color

func IsURL

func IsURL(s string) bool

IsURL returns true if the provided string is a valid url

func LcFirst

func LcFirst(s string) string

LcFirst returns a string with the first character lowercased

func LowerFirst

func LowerFirst(s string) string

LowerFirst is an alias of LcFirst

func MapFloat

func MapFloat(s []float64, f func(float64) float64) []float64

MapFloat a new slice containing the results of applying the function f to each float64 in the original slice.

func MapInt

func MapInt(s []int, f func(int) int) []int

MapInt a new slice containing the results of applying the function f to each int in the original slice.

func MapString

func MapString(s []string, f func(string) string) []string

MapString a new slice containing the results of applying the function f to each string in the original slice.

func Rand

func Rand(min, max int) int

Rand returns a random int from the given range

func RandStr

func RandStr(n int) string

RandStr is an alias of StrRand

func RandomString

func RandomString(n int) string

RandomString is an alias of StrRand

func ReverseSort

func ReverseSort(s interface{})

ReverseSort is an alias of Rsort

func ReverseString

func ReverseString(s string) string

ReverseString is an alias of Rstring

func Rsort

func Rsort(s interface{})

Rsort reverses the order (desc) of a slice

func Rstring

func Rstring(s string) string

Rstring returns the string reversed

func SliceRand

func SliceRand(s interface{}, r interface{})

SliceRand assign a random value from a string to the "r" arg

func SliceRandF

func SliceRandF(s []float64) float64

SliceRandF is an alias of SliceRandFloat

func SliceRandFloat

func SliceRandFloat(s []float64) float64

SliceRandFloat returns a random value from a float64 slice

func SliceRandI

func SliceRandI(s []int) int

SliceRandI is an alias of SliceRandInt

func SliceRandInt

func SliceRandInt(s []int) int

SliceRandInt returns a random value from an int slice

func SliceRandS

func SliceRandS(s []string) string

SliceRandS is an alias of SliceRandString

func SliceRandString

func SliceRandString(s []string) string

SliceRandString returns a random value from a string slice

func SomeFloat

func SomeFloat(s []float64, f func(float64) bool) bool

SomeFloat returns true if one of the float64s in the slice satisfies the predicate f

func SomeInt

func SomeInt(s []int, f func(int) bool) bool

SomeInt returns true if one of the ints in the slice satisfies the predicate f

func SomeString

func SomeString(s []string, f func(string) bool) bool

SomeString returns true if one of the strings in the slice satisfies the predicate f

func StrRand

func StrRand(n int) string

StrRand returns a random string

func ToBase64

func ToBase64(s string) string

ToBase64 encodes a string in base64

func ToBytes

func ToBytes(s string) []byte

ToBytes converts a string to bytes slice

func ToCamel

func ToCamel(s string) string

ToCamel converts a string to camelCase

func ToCamelCase

func ToCamelCase(s string) string

ToCamelCase is an alias of ToCamel

func ToInt

func ToInt(s string) int

ToInt returns an int from a string

func ToInt64

func ToInt64(s string) int64

ToInt64 returns an int64 from a string

func ToKebab

func ToKebab(s string) string

ToKebab converts a string to kebab-case

func ToKebabCase

func ToKebabCase(s string) string

ToKebabCase is an alias of ToKebab

func ToPascal

func ToPascal(s string) string

ToPascal converts a string to PascalCase

func ToPascalCase

func ToPascalCase(s string) string

ToPascalCase is an alias of ToPascal

func ToSnake

func ToSnake(s string) string

ToSnake converts a string to snake_case

func ToSnakeCase

func ToSnakeCase(s string) string

ToSnakeCase is an alias of ToSnake

func ToUint

func ToUint(s string) uint

ToUint returns a uint from a string

func UUID

func UUID() string

UUID generates a random UUID according to RFC 4122

func UcFirst

func UcFirst(s string) string

UcFirst returns a string with the first character uppercased

func Uniq

func Uniq() string

Uniq returns a unique token based on current time and crypted in sha256

func Unique

func Unique() string

Unique is an alias of Uniq

func UpperFirst

func UpperFirst(s string) string

UpperFirst is an alias of UcFirst

func Utoa

func Utoa(u uint) string

Utoa transforms a uint into a string

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL