gccxml

package module
v0.0.0-...-669bcdf Latest Latest
Warning

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

Go to latest
Published: May 18, 2023 License: BSD-2-Clause Imports: 13 Imported by: 4

README

go-gccxml: Go binding and extension to gccxml

go-gccxml is a Go binding to gccxml (http://gccxml.github.io). Its main purpose is to parse C headers, and contains some extentions to make C declarations easier to process.

Castxml is also supported as a dropin replacement of gccxml.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Modify this variable if gccxml is in another path.
	GccXmlCmd  = "gccxml"
	GccCmd     = "gcc"
	CastXmlCmd = "castxml"
)

Functions

func IncludeFiles

func IncludeFiles(file string) (fs []string, err error)

func IsCString

func IsCString(t Type) bool

func IsFuncPtr

func IsFuncPtr(t Type) bool

func IsFuncType

func IsFuncType(t Type) bool

func IsPointer

func IsPointer(t Type) bool

func IsStruct

func IsStruct(t Type) bool

func IsTypedef

func IsTypedef(t Type) bool

func IsUnion

func IsUnion(t Type) bool

func IsVoid

func IsVoid(t Type) bool

func IsVoidPtr

func IsVoidPtr(t Type) bool

func NumCgoNameFromGccName

func NumCgoNameFromGccName(gccName string) string

func TypeDecl

func TypeDecl(ty Type, v string) string

TODO: find a way to merge with CDecl, the differnces are: 1. CDecl include const 2. CDecl does not include parameter name of functype.

func Wrap

func Wrap(err error) error

func Wrapf

func Wrapf(err error, format string, v ...interface{}) error

Types

type Access__

type Access__ struct {
	Access_ string `xml:"access,attr"`
}

func (Access__) Access

func (s Access__) Access() string

type Aliased

type Aliased interface {
	Base() Type
	Root() Type
}

type Align__

type Align__ struct {
	Align_ int `xml:"align,attr"`
}

func (Align__) Align

func (s Align__) Align() int

type Argument

type Argument struct {
	Name__
	Type__
	Location__
	File__
	Line__
	// contains filtered or unexported fields
}

func (*Argument) CName

func (v *Argument) CName() string

func (*Argument) CType

func (a *Argument) CType() Type

func (*Argument) Doc

func (v *Argument) Doc() *XmlDoc

func (*Argument) Id

func (v *Argument) Id() string

func (*Argument) IsCString

func (a *Argument) IsCString() bool

func (*Argument) PtrKind

func (a *Argument) PtrKind() PtrKind

func (*Argument) SetKind

func (a *Argument) SetKind(k PtrKind)

type Arguments

type Arguments []*Argument

type ArrayType

type ArrayType struct {
	Id__
	Min__
	Max__
	Type__
	Size__
	Align__
	// contains filtered or unexported fields
}

func (*ArrayType) CDecl

func (t *ArrayType) CDecl(v string) string

func (*ArrayType) Doc

func (v *ArrayType) Doc() *XmlDoc

func (*ArrayType) ElementType

func (t *ArrayType) ElementType() Type

func (*ArrayType) Len

func (a *ArrayType) Len() int

type ArrayTypes

type ArrayTypes []*ArrayType

type Artificial__

type Artificial__ struct {
	Artificial_ string `xml:"artificial,attr"`
}

func (Artificial__) Artificial

func (s Artificial__) Artificial() string

type Attributes__

type Attributes__ struct {
	Attributes_ string `xml:"attributes,attr"`
}

func (Attributes__) Attributes

func (s Attributes__) Attributes() string

type Bases__

type Bases__ struct {
	Bases_ string `xml:"bases,attr"`
}

func (Bases__) Bases

func (s Bases__) Bases() string

type Bits__

type Bits__ struct {
	Bits_ string `xml:"bits,attr"`
}

func (Bits__) Bits

func (s Bits__) Bits() string

type CallbackInfo

type CallbackInfo struct {
	CName     string // Type name of the function pointer
	CType     *FunctionType
	DataIndex int // index of void* argument in callback func type
	ArgIndex  int // index of argument of callback ptr
}

type Composite

type Composite interface {
	Named
	Members() string
	Bases() string
}

Struct or Union

func ToComposite

func ToComposite(t Type) (Composite, bool)

type Const__

type Const__ struct {
	Const_ string `xml:"const,attr"`
}

func (Const__) Const

func (s Const__) Const() string

type Constructor

type Constructor struct {
	Id__
	Name__
	Artificial__
	Throw__
	Context__
	Access__
	Mangled__
	Demangled__
	Location__
	File__
	Line__
	Endline__
	Inline__
	// contains filtered or unexported fields
}

func (*Constructor) Doc

func (v *Constructor) Doc() *XmlDoc

type Constructors

type Constructors []*Constructor

type Context__

type Context__ struct {
	Context_ string `xml:"context,attr"`
}

func (Context__) Context

func (s Context__) Context() string

type CvQualifiedType

type CvQualifiedType struct {
	Id__
	Type__
	Restrict__
	Const__
	Volatile__
	// contains filtered or unexported fields
}

func (*CvQualifiedType) Align

func (d *CvQualifiedType) Align() int

func (*CvQualifiedType) Base

func (t *CvQualifiedType) Base() Type

func (*CvQualifiedType) CDecl

func (t *CvQualifiedType) CDecl(v string) string

func (*CvQualifiedType) Doc

func (v *CvQualifiedType) Doc() *XmlDoc

func (*CvQualifiedType) Root

func (t *CvQualifiedType) Root() Type

func (*CvQualifiedType) Size

func (d *CvQualifiedType) Size() int

type CvQualifiedTypes

type CvQualifiedTypes []*CvQualifiedType

type CvsRevision__

type CvsRevision__ struct {
	CvsRevision_ string `xml:"cvs_revision,attr"`
}

func (CvsRevision__) CvsRevision

func (s CvsRevision__) CvsRevision() string

type Demangled__

type Demangled__ struct {
	Demangled_ string `xml:"demangled,attr"`
}

func (Demangled__) Demangled

func (s Demangled__) Demangled() string

type Destructor

type Destructor struct {
	Id__
	Name__
	Artificial__
	Throw__
	Context__
	Access__
	Mangled__
	Demangled__
	Location__
	File__
	Line__
	Endline__
	Inline__
	// contains filtered or unexported fields
}

func (*Destructor) Doc

func (v *Destructor) Doc() *XmlDoc

type Destructors

type Destructors []*Destructor

type Ellipses

type Ellipses []*Ellipsis

type Ellipsis

type Ellipsis struct {
}

type Endline__

type Endline__ struct {
	Endline_ string `xml:"endline,attr"`
}

func (Endline__) Endline

func (s Endline__) Endline() string

type EnumValue

type EnumValue struct {
	Name__
	Init__
	// contains filtered or unexported fields
}

func (*EnumValue) Doc

func (v *EnumValue) Doc() *XmlDoc

func (*EnumValue) File

func (v *EnumValue) File() string

func (*EnumValue) Id

func (v *EnumValue) Id() string

func (*EnumValue) Line

func (v *EnumValue) Line() string

func (*EnumValue) Location

func (v *EnumValue) Location() string

type EnumValues

type EnumValues []*EnumValue

type Enumeration

type Enumeration struct {
	Id__
	Name__
	Context__
	Location__
	File__
	Line__
	Size__
	Align__
	Artificial__

	EnumValues EnumValues `xml:"EnumValue"`
	// contains filtered or unexported fields
}

func ToEnum

func ToEnum(t Type) (*Enumeration, bool)

func (*Enumeration) Doc

func (v *Enumeration) Doc() *XmlDoc

type Enumerations

type Enumerations []*Enumeration

func (Enumerations) Len

func (s Enumerations) Len() int

func (Enumerations) Less

func (s Enumerations) Less(i, j int) bool

func (Enumerations) Swap

func (s Enumerations) Swap(i, j int)

type Error

type Error struct {
	// contains filtered or unexported fields
}

func (*Error) Error

func (e *Error) Error() string

func (*Error) Format

func (e *Error) Format(f fmt.State, verb rune)

Format implements fmt.Formatter

func (*Error) FormatError

func (e *Error) FormatError(p xerrors.Printer) error

FormatError implements xerrors.Formatter

func (*Error) Unwrap

func (e *Error) Unwrap() error

Unwrap implements xerrors.Wrapper

type Extern__

type Extern__ struct {
	Extern_ string `xml:"extern,attr"`
}

func (Extern__) Extern

func (s Extern__) Extern() string

type Field

type Field struct {
	Id__
	Name__
	Type__
	Offset__
	Context__
	Access__
	Location__
	File__
	Line__
	Bits__
	// contains filtered or unexported fields
}

func (*Field) CType

func (f *Field) CType() Type

func (*Field) Doc

func (v *Field) Doc() *XmlDoc

type Fields

type Fields []*Field

type File

type File struct {
	Id__
	Name__
	// contains filtered or unexported fields
}

func (*File) Doc

func (v *File) Doc() *XmlDoc

type File__

type File__ struct {
	File_ string `xml:"file,attr"`
}

func (File__) File

func (s File__) File() string

type Files

type Files []*File

type Function

type Function struct {
	Id__
	Name__
	Returns__
	Throw__
	Context__
	Mangled__
	Location__
	File__
	Line__
	Extern__
	Attributes__
	Demangled__
	Endline__
	Inline__
	Static__
	Arguments Arguments `xml:"Argument"`
	Ellipses  Ellipses  `xml:"Ellipsis"`
	// contains filtered or unexported fields
}

func (*Function) Doc

func (v *Function) Doc() *XmlDoc

func (*Function) HasCallback

func (f *Function) HasCallback() (*CallbackInfo, bool)

func (*Function) ReturnType

func (f *Function) ReturnType() Type

type FunctionType

type FunctionType struct {
	Id__
	Arguments Arguments `xml:"Argument"`
	Returns__
	// contains filtered or unexported fields
}

func ToFuncType

func ToFuncType(t Type) (*FunctionType, bool)

func (*FunctionType) Align

func (f *FunctionType) Align() int

func (*FunctionType) CDecl

func (f *FunctionType) CDecl(v string) string

func (*FunctionType) Doc

func (v *FunctionType) Doc() *XmlDoc

func (*FunctionType) ReturnType

func (f *FunctionType) ReturnType() Type

func (*FunctionType) Size

func (f *FunctionType) Size() int

func (*FunctionType) WriteCDecl

func (f *FunctionType) WriteCDecl(w io.Writer, funcName string)

func (*FunctionType) WriteCallbackStub

func (f *FunctionType) WriteCallbackStub(w io.Writer, funcName, stubName string)

type FunctionTypes

type FunctionTypes []*FunctionType

type Functions

type Functions []*Function

func (Functions) Len

func (s Functions) Len() int

func (Functions) Less

func (s Functions) Less(i, j int) bool

func (Functions) Swap

func (s Functions) Swap(i, j int)

type FundamentalType

type FundamentalType struct {
	Id__
	Name__
	Size__
	Align__
	// contains filtered or unexported fields
}

func ToFundamental

func ToFundamental(t Type) (*FundamentalType, bool)

func (*FundamentalType) Doc

func (v *FundamentalType) Doc() *XmlDoc

type FundamentalTypes

type FundamentalTypes []*FundamentalType

type Id__

type Id__ struct {
	Id_ string `xml:"id,attr"`
}

func (Id__) Id

func (s Id__) Id() string

type Incomplete__

type Incomplete__ struct {
	Incomplete_ string `xml:"incomplete,attr"`
}

func (Incomplete__) Incomplete

func (s Incomplete__) Incomplete() string

type Init__

type Init__ struct {
	Init_ int `xml:"init,attr"`
}

func (Init__) Init

func (s Init__) Init() int

type Inline__

type Inline__ struct {
	Inline_ string `xml:"inline,attr"`
}

func (Inline__) Inline

func (s Inline__) Inline() string

type Line__

type Line__ struct {
	Line_ string `xml:"line,attr"`
}

func (Line__) Line

func (s Line__) Line() string

type Location__

type Location__ struct {
	Location_ string `xml:"location,attr"`
}

func (Location__) Location

func (s Location__) Location() string

type Macro

type Macro struct {
	Name string
	Body string
}

func (Macro) ContainsNum

func (m Macro) ContainsNum() bool

func (Macro) ContainsOthers

func (m Macro) ContainsOthers(ms Macros) bool

func (Macro) IsString

func (m Macro) IsString() bool

func (Macro) NoArg

func (m Macro) NoArg() bool

type Macros

type Macros []Macro

func DecodeMacros

func DecodeMacros(r io.Reader) (ms Macros, err error)

func (Macros) Constants

func (ms Macros) Constants(pat string) (fms Macros)

func (Macros) Len

func (s Macros) Len() int

func (Macros) Less

func (s Macros) Less(i, j int) bool

func (Macros) Swap

func (s Macros) Swap(i, j int)

type Mangled

type Mangled interface {
	Mangled() string
	Demangled() string
}

type Mangled__

type Mangled__ struct {
	Mangled_ string `xml:"mangled,attr"`
}

func (Mangled__) Mangled

func (s Mangled__) Mangled() string

type Max__

type Max__ struct {
	Max_ string `xml:"max,attr"`
}

func (Max__) Max

func (s Max__) Max() string

type Members__

type Members__ struct {
	Members_ string `xml:"members,attr"`
}

func (Members__) Members

func (s Members__) Members() string

type Min__

type Min__ struct {
	Min_ string `xml:"min,attr"`
}

func (Min__) Min

func (s Min__) Min() string

type Name__

type Name__ struct {
	Name_ string `xml:"name,attr"`
}

func (Name__) CDecl

func (t Name__) CDecl(v string) string

func (Name__) CName

func (s Name__) CName() string

type Named

type Named interface {
	Id() string
	CName() string
	File() string
	Line() string
	Location() string
}

type Namespace

type Namespace struct {
	Id__
	Name__
	Members__
	Mangled__
	Demangled__
	Context__
	// contains filtered or unexported fields
}

func (*Namespace) Doc

func (v *Namespace) Doc() *XmlDoc

type Namespaces

type Namespaces []*Namespace

type Node__

type Node__ struct {
	Node_ string `xml:"node,attr"`
}

func (Node__) Node

func (s Node__) Node() string

type NumInfo

type NumInfo struct {
	Kind NumKind
	Bits int
}

func GetNumInfo

func GetNumInfo(v interface{}) (t NumInfo)

func NumInfoFromGccName

func NumInfoFromGccName(gccName string) NumInfo

type NumKind

type NumKind int
const (
	SignedInt NumKind = iota
	UnsignedInt
	Float
	Complex
)

type Offset__

type Offset__ struct {
	Offset_ string `xml:"offset,attr"`
}

func (Offset__) Offset

func (s Offset__) Offset() string

type OperatorMethod

type OperatorMethod struct {
	Id__
	Name__
	Returns__
	Artificial__
	Throw__
	Context__
	Access__
	Mangled__
	Demangled__
	Location__
	File__
	Line__
	Endline__
	Inline__
	// contains filtered or unexported fields
}

func (*OperatorMethod) Doc

func (v *OperatorMethod) Doc() *XmlDoc

type OperatorMethods

type OperatorMethods []*OperatorMethod

type PointerType

type PointerType struct {
	Id__
	Type__
	Size__
	Align__
	// contains filtered or unexported fields
}

func ToPointer

func ToPointer(t Type) (*PointerType, bool)

func (*PointerType) CDecl

func (t *PointerType) CDecl(v string) string

func (*PointerType) Doc

func (v *PointerType) Doc() *XmlDoc

func (*PointerType) PointedType

func (t *PointerType) PointedType() Type

type PointerTypes

type PointerTypes []*PointerType

type PtrKind

type PtrKind int
const (
	NotSet       PtrKind = iota
	PtrArray             // including input array, and output buffer to write.
	PtrString            // like PtrArray, but type is char*
	PtrReference         // ptr to struct/union
	PtrTypedef           // Typedef a pointer
	PtrReturn            // return a value through the pointer
	PtrFunction
	PtrArrayArray  //
	PtrStringArray //
	PtrGeneral
)

Type conversion rules:

             (Num)
			 (Bool)
             (Struct)
|--- C.f(T p) ------------------ f(p T)
|
|                                           char*
|                                           (String)
|                                         ----------------- f(p string)
|                                         |
|                 In/InOut                | [1]T
|                 (Slice)                 | (PtrWrapper)
|               --------------- f(p []T) ------------------ f(p *T)
|               |
|               | Out                        [1]T
|               | (SliceReturn)              (CPtrReturn)
| --- C.f(T *p) ---------------- f() (p []T) --------------- f() (p T)
|               |
|               | void*
|               | (PtrWrapper)
|               --------------- f(p uintptr)
|
| --- C.f() *p
| --- C.f(T **p)

struct (ref/value type)

type ReferenceType

type ReferenceType struct {
	Id__
	Type__
	Size__
	Align__
	// contains filtered or unexported fields
}

func (*ReferenceType) Base

func (t *ReferenceType) Base() Type

func (*ReferenceType) CDecl

func (t *ReferenceType) CDecl(v string) string

func (*ReferenceType) Doc

func (v *ReferenceType) Doc() *XmlDoc

func (*ReferenceType) Root

func (t *ReferenceType) Root() Type

type ReferenceTypes

type ReferenceTypes []*ReferenceType

type Restrict__

type Restrict__ struct {
	Restrict_ string `xml:"restrict,attr"`
}

func (Restrict__) Restrict

func (s Restrict__) Restrict() string

type Returns__

type Returns__ struct {
	Returns_ string `xml:"returns,attr"`
}

func (Returns__) Returns

func (s Returns__) Returns() string

type SSet

type SSet struct {
	// contains filtered or unexported fields
}

func NewSSet

func NewSSet() SSet

func (*SSet) Add

func (m *SSet) Add(ss ...string)

func (*SSet) Del

func (m *SSet) Del(s string)

func (*SSet) Has

func (m *SSet) Has(s string) bool

func (*SSet) IsNil

func (m *SSet) IsNil() bool

func (*SSet) Slice

func (m *SSet) Slice() []string

type Size__

type Size__ struct {
	Size_ int `xml:"size,attr"`
}

func (Size__) Bits

func (s Size__) Bits() int

func (Size__) Size

func (s Size__) Size() int

type Static__

type Static__ struct {
	Static_ string `xml:"static,attr"`
}

func (Static__) Static

func (s Static__) Static() string

type Struct

func (*Struct) CDecl

func (t *Struct) CDecl(v string) string

func (*Struct) CName

func (s *Struct) CName() string

func (*Struct) Doc

func (v *Struct) Doc() *XmlDoc

func (*Struct) Fields

func (s *Struct) Fields() []*Field

type Structs

type Structs []*Struct

func (Structs) Len

func (s Structs) Len() int

func (Structs) Less

func (s Structs) Less(i, j int) bool

func (Structs) Swap

func (s Structs) Swap(i, j int)

type Throw__

type Throw__ struct {
	Throw_ string `xml:"throw,attr"`
}

func (Throw__) Throw

func (s Throw__) Throw() string

type TreeCodeName__

type TreeCodeName__ struct {
	TreeCodeName_ string `xml:"tree_code_name,attr"`
}

func (TreeCodeName__) TreeCodeName

func (s TreeCodeName__) TreeCodeName() string

type TreeCode__

type TreeCode__ struct {
	TreeCode_ string `xml:"tree_code,attr"`
}

func (TreeCode__) TreeCode

func (s TreeCode__) TreeCode() string

type Type

type Type interface {
	Id() string
	Size() int
	Align() int
	CDecl(v string) string
}

type Type__

type Type__ struct {
	Type_ string `xml:"type,attr"`
}

func (Type__) Type

func (s Type__) Type() string

type Typedef

type Typedef struct {
	Id__
	Name__
	Type__
	Context__
	Location__
	File__
	Line__
	// contains filtered or unexported fields
}

func ToTypedef

func ToTypedef(t Type) (*Typedef, bool)

func (*Typedef) Align

func (d *Typedef) Align() int

func (*Typedef) Base

func (t *Typedef) Base() Type

func (*Typedef) Doc

func (v *Typedef) Doc() *XmlDoc

func (*Typedef) IsComposite

func (t *Typedef) IsComposite() bool

func (*Typedef) IsEnum

func (t *Typedef) IsEnum() bool

func (*Typedef) IsFuncType

func (t *Typedef) IsFuncType() bool

func (*Typedef) IsFundamental

func (t *Typedef) IsFundamental() bool

func (*Typedef) IsPointer

func (t *Typedef) IsPointer() bool

func (*Typedef) IsStructPtr

func (t *Typedef) IsStructPtr() bool

func (*Typedef) IsUnionPtr

func (t *Typedef) IsUnionPtr() bool

func (*Typedef) Root

func (t *Typedef) Root() Type

func (*Typedef) Size

func (d *Typedef) Size() int

type Typedefs

type Typedefs []*Typedef

func (Typedefs) Len

func (s Typedefs) Len() int

func (Typedefs) Less

func (s Typedefs) Less(i, j int) bool

func (Typedefs) Swap

func (s Typedefs) Swap(i, j int)

type Unimplemented

type Unimplemented struct {
	Id__
	TreeCode__
	TreeCodeName__
	Node__
	// contains filtered or unexported fields
}

func (*Unimplemented) Align

func (d *Unimplemented) Align() int

func (*Unimplemented) CDecl

func (t *Unimplemented) CDecl(v string) string

func (*Unimplemented) Doc

func (v *Unimplemented) Doc() *XmlDoc

func (*Unimplemented) Size

func (d *Unimplemented) Size() int

type Unimplementeds

type Unimplementeds []*Unimplemented

type Union

type Union struct {
	Id__
	Name__
	Context__
	Mangled__
	Demangled__
	Location__
	File__
	Line__
	Size__
	Align__
	Members__
	Bases__
	Artificial__
	Access__
	// contains filtered or unexported fields
}

func (*Union) CDecl

func (t *Union) CDecl(v string) string

func (*Union) CName

func (s *Union) CName() string

func (*Union) Doc

func (v *Union) Doc() *XmlDoc

func (*Union) Fields

func (s *Union) Fields() []*Field

type Unions

type Unions []*Union

type Variable

type Variable struct {
	Id__
	Name__
	Type__
	Context__
	Location__
	File__
	Line__
	Extern__
	// contains filtered or unexported fields
}

func (*Variable) CType

func (v *Variable) CType() Type

func (*Variable) Doc

func (v *Variable) Doc() *XmlDoc

type Variables

type Variables []*Variable

type Volatile__

type Volatile__ struct {
	Volatile_ string `xml:"volatile,attr"`
}

func (Volatile__) Volatile

func (s Volatile__) Volatile() string

type Xml

type Xml struct {
	File    string
	Args    []string
	CastXml bool
}

func (Xml) Doc

func (g Xml) Doc() (gccxml *XmlDoc, err error)

func (Xml) Macros

func (g Xml) Macros() (ms Macros, err error)

func (Xml) PrintMacros

func (g Xml) PrintMacros() error

func (Xml) Save

func (g Xml) Save(w io.Writer) error

type XmlDoc

type XmlDoc struct {
	CvsRevision__
	Namespaces       Namespaces       `xml:"Namespace"`
	Functions        Functions        `xml:"Function"`
	Structs          Structs          `xml:"Struct"`
	Typedefs         Typedefs         `xml:"Typedef"`
	FundamentalTypes FundamentalTypes `xml:"FundamentalType"`
	Enumerations     Enumerations     `xml:"Enumeration"`
	Unions           Unions           `xml:"Union"`
	Variables        Variables        `xml:"Variable"`
	PointerTypes     PointerTypes     `xml:"PointerType"`
	FunctionTypes    FunctionTypes    `xml:"FunctionType"`
	ArrayTypes       ArrayTypes       `xml:"ArrayType"`
	Unimplementeds   Unimplementeds   `xml:"Unimplemented"`
	Fields           Fields           `xml:"Field"`
	Destructors      Destructors      `xml:"Destructor"`
	OperatorMethods  OperatorMethods  `xml:"OperatorMethod"`
	Constructors     Constructors     `xml:"Constructor"`
	CvQualifiedTypes CvQualifiedTypes `xml:"CvQualifiedType"`
	ReferenceTypes   ReferenceTypes   `xml:"ReferenceType"`
	Files            Files            `xml:"File"`
	// contains filtered or unexported fields
}

func (*XmlDoc) FindField

func (d *XmlDoc) FindField(id string) *Field

func (*XmlDoc) FindStruct

func (d *XmlDoc) FindStruct(id string) *Struct

func (*XmlDoc) FindUnion

func (d *XmlDoc) FindUnion(id string) *Union

func (*XmlDoc) Print

func (d *XmlDoc) Print(arg ...string) error

func (*XmlDoc) TypeOf

func (d *XmlDoc) TypeOf(id string) Type

Jump to

Keyboard shortcuts

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