inputmethodkit

package
v0.8.0 Latest Latest
Warning

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

Go to latest
Published: Jun 19, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Rendered for darwin/amd64

Overview

Package inputmethodkit provides a fluent Go API over the macOS InputMethodKit framework.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IMKCandidatesOpacityAttributeName added in v0.8.0

func IMKCandidatesOpacityAttributeName() objc.ID

@const IMKCandidatesOpacityAttributeName @abstract The level of opacity. @discussion Value must be a NSNumber with a value from 0 to 1. IMKCandidatesOpacityAttributeName returns the string constant IMKCandidatesOpacityAttributeName as an objc.ID, for use as a dictionary key or selector argument.

func IMKCandidatesSendServerKeyEventFirst added in v0.8.0

func IMKCandidatesSendServerKeyEventFirst() objc.ID

@const IMKCandidatesSendServerKeyEventFirst @abstract Control when key events are sent to a candidate window. @discussion Value is a NSNumber with a boolean value of NO (key events are sent to the candidate window first) or YES (key events are sent to the IMKInputController first). Note that this is only applicable when a candidate window is displayed. The default behavior is to send the key event to the candidate window first, and if it is not processed there, to send it on to the input controller. IMKCandidatesSendServerKeyEventFirst returns the string constant IMKCandidatesSendServerKeyEventFirst as an objc.ID, for use as a dictionary key or selector argument.

func IMKControllerClass added in v0.8.0

func IMKControllerClass() objc.ID

@const IMKControllerClass @abstract Key used to find an input method's input controller class name from the input method's bundle. IMKControllerClass returns the string constant IMKControllerClass as an objc.ID, for use as a dictionary key or selector argument.

func IMKDelegateClass added in v0.8.0

func IMKDelegateClass() objc.ID

@const IMKDelegateClass @abstract Key used to find an input method's delegate class name from the input method's bundle. IMKDelegateClass returns the string constant IMKDelegateClass as an objc.ID, for use as a dictionary key or selector argument.

func IMKModeDictionary added in v0.8.0

func IMKModeDictionary() objc.ID

@const IMKModeDictionary @abstract Key used to obtain an input method's mode dictionary from the input method's bundle. IMKModeDictionary returns the string constant IMKModeDictionary as an objc.ID, for use as a dictionary key or selector argument.

func KIMKCommandClientName added in v0.8.0

func KIMKCommandClientName() objc.ID

@const kIMKCommandClient @abstract A client object that conforms to the IMKInputText and NSObject protocols. @discussion Use as a key to find the client in the infoDictionary. KIMKCommandClientName returns the string constant kIMKCommandClientName as an objc.ID, for use as a dictionary key or selector argument.

func KIMKCommandMenuItemName added in v0.8.0

func KIMKCommandMenuItemName() objc.ID

@const kIMKCommandMenuItem @abstract An NSMenuItem in the infoDictionary passed to menu item actions. @discussion Use as a key to find the NSMenuItem in the infoDictionary. KIMKCommandMenuItemName returns the string constant kIMKCommandMenuItemName as an objc.ID, for use as a dictionary key or selector argument.

Types

type Candidates

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

Candidates wraps raw.IMKCandidates with a fluent Go API.

func CandidatesFromID

func CandidatesFromID(id objc.ID) *Candidates

CandidatesFromID adopts an existing object pointer as a Candidates (nil for 0).

func NewCandidatesWithServerPanelType

func NewCandidatesWithServerPanelType(server *raw.IMKServer, panelType uint) *Candidates

NewCandidatesWithServerPanelType creates a new Candidates.

func NewCandidatesWithServerPanelTypeStyleType

func NewCandidatesWithServerPanelTypeStyleType(server *raw.IMKServer, panelType uint, style uint) *Candidates

NewCandidatesWithServerPanelTypeStyleType creates a new Candidates.

func (*Candidates) AttachChildToCandidateType

func (x *Candidates) AttachChildToCandidateType(child *raw.IMKCandidates, candidateIdentifier int, theType uint)

@method @abstract Attach an IMKCandidates object to the specified selection. @discussion The IMKCandidate can be a sublist or an annotation.

AttachChildToCandidateType calls the underlying AttachChildToCandidateType.

func (*Candidates) Attributes

func (x *Candidates) Attributes() *foundation.NSDictionary[objc.ID, objc.ID]

@method @abstract Returns the attributes dictionary.

Attributes calls the underlying Attributes.

func (*Candidates) CandidateFrame

func (x *Candidates) CandidateFrame() corefoundation.CGRect

CandidateFrame calls the underlying CandidateFrame.

func (*Candidates) CandidateIdentifierAtLineNumber

func (x *Candidates) CandidateIdentifierAtLineNumber(lineNumber int) int

@method @abstract Returns the candidate identifier for a given line in the candidate window display. @discussion Maps the lineNumber to a candidate identifier. Line number 0 corresponds to the candidate in the cell currently in the first (top for vertical) line of the candidate window. This is convienient for input methods that support selecting a candidate by a number key. Line Number values depend on the column arrangement of your candidate. If you are displaying a single column candidate window, lines that have been scrolled out of view will have negative values. For a single row grid line, numbers will correspond to the cell's position in the row (i.e. the first cell will be 0, the second 1, etc). Finally, for a grid, the line numbers correspond to the grid row. If the line number is invalid, NSNotFound is returned. @param lineNumber a number representing a cells position in the candidate window.

CandidateIdentifierAtLineNumber calls the underlying CandidateIdentifierAtLineNumber.

func (*Candidates) CandidateStringIdentifier

func (x *Candidates) CandidateStringIdentifier(candidateString objc.ID) int

@method @abstract Map a candidateString to an identifier. @discussion Beginning with MacOS 10.7, candidate strings are mapped internally to an unique identifier of type NSInteger. Using identifiers to identify a particular candidate is the first stage of enabling data types other than NSString and NSAttributedString for containing the contents of a candidate.

CandidateStringIdentifier calls the underlying CandidateStringIdentifier.

func (*Candidates) ClearSelection

func (x *Candidates) ClearSelection()

ClearSelection calls the underlying ClearSelection.

func (*Candidates) DetachChild

func (x *Candidates) DetachChild(candidateIdentifier int)

@method @abstract Detach the IMKCandidates object attached to candidate

DetachChild calls the underlying DetachChild.

func (*Candidates) DismissesAutomatically

func (x *Candidates) DismissesAutomatically() bool

@method @abstract Returns the dismissesAutomatically flag.

DismissesAutomatically calls the underlying DismissesAutomatically.

func (*Candidates) Hide

func (x *Candidates) Hide()

@method @abstract If the candidate window is visible, hide it.

Hide calls the underlying Hide.

func (*Candidates) HideChild

func (x *Candidates) HideChild()

@method @abstract If the current selection has a child IMKCandidates that is being shown hide it. @discussion Typically a client will not need to call this as IMKCandidates automatically hides and shows children.

HideChild calls the underlying HideChild.

func (*Candidates) ID

func (x *Candidates) ID() objc.ID

ID returns the underlying Objective-C object pointer (objc.ID), for passing to C APIs that take an object or CFTypeRef pointer.

func (*Candidates) IsVisible

func (x *Candidates) IsVisible() bool

@method @abstract Utility method returns YES if a candidate display is visible.

IsVisible calls the underlying IsVisible.

func (*Candidates) LineNumberForCandidateWithIdentifier

func (x *Candidates) LineNumberForCandidateWithIdentifier(candidateIdentifier int) int

@method @abstract Returns the line number for a given CandidateID. @result The line number. NSNotFound if the candidateID is invalid. @param candidateIdentifier - A valid identifier for a candidate. @discussion If the cell that contains the candidate is at the top line of the candidate window, the return value will be 0.

LineNumberForCandidateWithIdentifier calls the underlying LineNumberForCandidateWithIdentifier.

func (*Candidates) PanelType

func (x *Candidates) PanelType() uint

@method @abstract Return the panel type.

PanelType calls the underlying PanelType.

func (*Candidates) SelectCandidate

func (x *Candidates) SelectCandidate(candidateIdentifier int)

SelectCandidate calls the underlying SelectCandidate.

func (*Candidates) SelectCandidateWithIdentifier

func (x *Candidates) SelectCandidateWithIdentifier(candidateIdentifier int) bool

@method @abstract Select the candidate whose identifier matches the identifier parameter. @result YES if the candidateIdentifier is valid an the selection was made. NO if canidateIdentifier is invalid or it was not possible make the selection. @param An identifier for a candidate. You can obtain an identifier by mapping a candidate to an identifier via the [IMKCandidates candidateStringIdentifier:].

SelectCandidateWithIdentifier calls the underlying SelectCandidateWithIdentifier.

func (*Candidates) SelectedCandidate

func (x *Candidates) SelectedCandidate() int

@method @abstract Returns the currently selected candidate identifer. @discussion Attempts to determine the identifier for the selected candidate. If there is no selection the return value will be NSNotFound.

SelectedCandidate calls the underlying SelectedCandidate.

func (*Candidates) SelectedCandidateString

func (x *Candidates) SelectedCandidateString() *foundation.NSAttributedString

@method @abstract Returns the currently selected candidate string. @discussion Attempts to determine the string for the selected candidate. If there is no selection the return value can be nil. The attributed string is an autoreleased object.

SelectedCandidateString calls the underlying SelectedCandidateString.

func (*Candidates) SelectionKeys

func (x *Candidates) SelectionKeys() *foundation.NSArray[objc.ID]

@method @abstract Returns an NSArray of NSNumbers where each NSNumber is a virtual key code. The NSArray is an autoreleased object. Do not release unless it is first retained.

SelectionKeys calls the underlying SelectionKeys.

func (*Candidates) SelectionKeysKeylayout

func (x *Candidates) SelectionKeysKeylayout() unsafe.Pointer

@method @abstract Returns the key layout that is used to map virtual key codes for the selection keys. By default this is the key layout whose source id is com.apple.keylayout.US. This is an autoreleased object. Retain it if you need to keep it.

SelectionKeysKeylayout calls the underlying SelectionKeysKeylayout.

func (*Candidates) SetAttributes

func (x *Candidates) SetAttributes(attributes *foundation.NSDictionary[objc.ID, objc.ID])

@method @abstract Sets the "style" attributes for the candidates window. The keys for the attributes dictionary and the values are: NSFontAttributeName (value = NSFont) Setting the font attribute sets the font that is used to draw Candidates. It does not effect the selection keys which are always drawn in the same font. Note that to set the font size you should use this key/value pair. IMKCandidatesOpacityAttributeName (value = NSNumber with a float value between 0 and 1). Sets the opacity level to transparent (0.0) to completely opaque (1.0). The default opacity is 1.0. This constant is declared above. NSForegroundColorAttributeName (value = NSColor) Sets the text color used for the candidate text. By default it is black. NSBackgroundColorDocumentAttribute (value = NSColor). Set the background color that is drawn behind the candidate text. IMKCandidatesSendServerKeyEventFirst (value = NSNumber). NO (default) gives the candidate window first chance at key events. YES causes events to first be routed to the current IMKInputController. In that case, if the event is not handled, it will then be sent to the candidate window.

SetAttributes calls the underlying SetAttributes.

func (*Candidates) SetCandidateData

func (x *Candidates) SetCandidateData(candidatesArray *foundation.NSArray[objc.ID])

@method @abstract Set the candidates data directly rather than supplying data via [IMKInputContoller candidates:]. @discussion The elements of the array can be strings or attributed strings.

SetCandidateData calls the underlying SetCandidateData.

func (*Candidates) SetCandidateFrameTopLeft

func (x *Candidates) SetCandidateFrameTopLeft(point corefoundation.CGPoint)

@method @abstract Positions the top-left corner of the candidate window’s frame rectangle at a given point in screen coordinates.

SetCandidateFrameTopLeft calls the underlying SetCandidateFrameTopLeft.

func (*Candidates) SetDismissesAutomatically

func (x *Candidates) SetDismissesAutomatically(flag bool)

@method @abstract Setting the dismissesAutomatically flag determines what happens to displayed candidates when the return key or enter key is typed. @discussion By default, if a return or enter key is typed, the candidates are dismissed and a candidateSelected: message is sent to the input controller. However if setDismissesAutomatically is passed a NO flag the candidate display will not be dismissed when a return or enter key is typed. The input controller will still be sent the candidatesSelected: message, but, as stated, the candidates display will not be dismissed. Setting this flag to NO lets an input method process text input while keeping a dynamically changing candidates display in view throughout the text input process. When you set this to NO the candidate display will still be hidden when when a session deactivates.

SetDismissesAutomatically calls the underlying SetDismissesAutomatically.

func (*Candidates) SetPanelType

func (x *Candidates) SetPanelType(panelType uint)

@method @abstract Change the panel type.

SetPanelType calls the underlying SetPanelType.

func (*Candidates) SetSelectionKeys

func (x *Candidates) SetSelectionKeys(keyCodes *foundation.NSArray[objc.ID])

@method @abstract Set the selection keys for the candidates. @discussion Selection keys are an array of NSNumbers where each NSNumber is a virtual key code that the controller will map to characters that are displayed either across the top of the candidates, if the candidates are laid out horizontally, or along the left edge of the candidates, if they are aligned vertically. The number of selection keys determines how many candidates are displayed per page. For example, if you passed an array of 4 key codes, then 4 candidates are displayed per page. If you passed 11 key codes, then 11 candidates would be displayed. By default the key codes are mapped using the keyboard layout whose source id is com.apple.keylayout.US. The default layout can be replaced by calling setSelectionKeysKeylayout (see below). The default selection keys are the digits 1 through 9, or in terms of key codes: 18-21,23,22, 26, 28, 25.

SetSelectionKeys calls the underlying SetSelectionKeys.

func (*Candidates) SetSelectionKeysKeylayout

func (x *Candidates) SetSelectionKeysKeylayout(layout unsafe.Pointer)

@method @abstract Sets the key layout that is used to map virtual key codes to characters.

SetSelectionKeysKeylayout calls the underlying SetSelectionKeysKeylayout.

func (*Candidates) Show

func (x *Candidates) Show(locationHint uint)

@method @abstract If a candidate window type has been provided, show the candidate window. The caller provides a location hint that is used to position the window. Input methods call this method when it is appropriate, during text conversion, to display a list of candidates.

Show calls the underlying Show.

func (*Candidates) ShowAnnotation

func (x *Candidates) ShowAnnotation(annotationString *foundation.NSAttributedString)

@method @abstract Displays an annotation window whose contents are the annotationString. @discussion An annotation is additional text that explains or somehow adds to the candidate string in a candidate window. Annotations are displayed in a small borderless window that is aligned with the current candidate panel. An input method calls showAnnotation: when the method [IMKInputController candidateSelectionChanged:] is called, and the candidateString has annotations.

ShowAnnotation calls the underlying ShowAnnotation.

func (*Candidates) ShowCandidates

func (x *Candidates) ShowCandidates()

@method @abstract Show the candidate window. @discussion This simply shows the candidates. No effort is made to position the candidate. The caller should move the candidate window to an appropriate location prior to showing.

ShowCandidates calls the underlying ShowCandidates.

func (*Candidates) ShowChild

func (x *Candidates) ShowChild()

@method @abstract If the current selection has a child IMKCandidates object that will be shown. @discussion If there is a failure in showing the child this method will throw an exception.

ShowChild calls the underlying ShowChild.

func (*Candidates) ShowSublistSubListDelegate

func (x *Candidates) ShowSublistSubListDelegate(candidates *foundation.NSArray[objc.ID], delegate objc.ID)

ShowSublistSubListDelegate calls the underlying ShowSublistSubListDelegate.

func (*Candidates) Unwrap

func (x *Candidates) Unwrap() *raw.IMKCandidates

Unwrap returns the underlying raw.IMKCandidates.

func (*Candidates) UpdateCandidates

func (x *Candidates) UpdateCandidates()

@method @abstract Call this method to update the candidates displayed in the candidate window. @discussion Calling this method will result in a call being made to the IMKInputController's candidates method. Note that the candidate list will be updated, but the window's visible state will not change; that is to say, if the window is hidden it will remain hidden, and vice versa.

UpdateCandidates calls the underlying UpdateCandidates.

type Candidatesable

type Candidatesable interface {
	Unwrap() *raw.IMKCandidates
	PanelType() uint
	SetPanelType(panelType uint)
	Show(locationHint uint)
	Hide()
	IsVisible() bool
	UpdateCandidates()
	ShowAnnotation(annotationString *foundation.NSAttributedString)
	ShowSublistSubListDelegate(candidates *foundation.NSArray[objc.ID], delegate objc.ID)
	CandidateFrame() corefoundation.CGRect
	SetSelectionKeys(keyCodes *foundation.NSArray[objc.ID])
	SelectionKeys() *foundation.NSArray[objc.ID]
	SetSelectionKeysKeylayout(layout unsafe.Pointer)
	SelectionKeysKeylayout() unsafe.Pointer
	SetAttributes(attributes *foundation.NSDictionary[objc.ID, objc.ID])
	Attributes() *foundation.NSDictionary[objc.ID, objc.ID]
	SetDismissesAutomatically(flag bool)
	DismissesAutomatically() bool
	SelectedCandidate() int
	SetCandidateFrameTopLeft(point corefoundation.CGPoint)
	ShowChild()
	HideChild()
	AttachChildToCandidateType(child *raw.IMKCandidates, candidateIdentifier int, theType uint)
	DetachChild(candidateIdentifier int)
	SetCandidateData(candidatesArray *foundation.NSArray[objc.ID])
	SelectCandidateWithIdentifier(candidateIdentifier int) bool
	SelectCandidate(candidateIdentifier int)
	ShowCandidates()
	CandidateStringIdentifier(candidateString objc.ID) int
	SelectedCandidateString() *foundation.NSAttributedString
	CandidateIdentifierAtLineNumber(lineNumber int) int
	LineNumberForCandidateWithIdentifier(candidateIdentifier int) int
	ClearSelection()
}

Candidatesable is the interface implemented by Candidates, for mocking and DI.

type InputController

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

@class IMKInputController @abstract The basic class that controls input on the input method side. @discussion IMKInputController implements fully implements the protocols defined above. Typically a developer does not override this class, but provides a delegate object that implements the methods that developer is interested in. The IMKInputController versions of the protocol methods check if the delegate object implements a method, and call the delegate version if it exists. The IMKServer class which is allocated in an input method's main function creates a controller class for each input session created by a client application. Therefore for every input session there is a corresponding IMKInputController.

InputController wraps raw.IMKInputController with a fluent Go API.

func InputControllerFromID

func InputControllerFromID(id objc.ID) *InputController

InputControllerFromID adopts an existing object pointer as a InputController (nil for 0).

func NewInputControllerWithServerDelegateClient

func NewInputControllerWithServerDelegateClient(server *raw.IMKServer, delegate objc.ID, inputClient objc.ID) *InputController

@method @abstract Initializes the controller class setting the delegate. The inputClient parameter is the client side object that will be sending messages to the controller via the IMKServer. The client object always conforms to the IMKTextInput protocol. Methods in the protocols that are implemented by the delegate object always include a client parameter. Methods in the IMKInputController class do not take a client. This is because the client is stored as an ivar in the IMKInputController.

NewInputControllerWithServerDelegateClient creates a new InputController.

func (*InputController) AnnotationSelectedForCandidate

func (x *InputController) AnnotationSelectedForCandidate(annotationString *foundation.NSAttributedString, candidateString *foundation.NSAttributedString)

@method @abstract Called when a user has selected a annotation in a candidate window. @discussion When a candidate window is displayed and the user selects an annotation the selected annotation is sent to the input controller via this method. The currently selected candidateString is also sent to the input method.

AnnotationSelectedForCandidate calls the underlying AnnotationSelectedForCandidate.

func (*InputController) CancelComposition

func (x *InputController) CancelComposition()

@method @abstract Stops the current composition and replaces marked text with the original text. @discussion Calls the method originalString to obtain the original text and sends that to the client via a call to IMKInputSession protocol method insertText:

CancelComposition calls the underlying CancelComposition.

func (*InputController) CandidateSelected

func (x *InputController) CandidateSelected(candidateString *foundation.NSAttributedString)

@method @abstract Called when a new candidate has been finally selected. @discussion The candidate parameter is the users final choice from the candidate window. The candidate window will have been closed before this method is called.

CandidateSelected calls the underlying CandidateSelected.

func (*InputController) CandidateSelectionChanged

func (x *InputController) CandidateSelectionChanged(candidateString *foundation.NSAttributedString)

@method @abstract Informs an input controller that the current candidate selection in the candidate window has changed. @discussion The candidate parameter is the candidate string that the selection changed to. Note this method is called to indicate that the user is moving around in the candidate window. The candidate object is not a final selection.

CandidateSelectionChanged calls the underlying CandidateSelectionChanged.

func (*InputController) Client

func (x *InputController) Client() objc.ID

@method @abstract Returns this controller's client object. @discussion The client object will conform to the IMKTextInput protocol. The returned object is an autoreleased object.

Client calls the underlying Client.

func (*InputController) CompositionAttributesAtRange

func (x *InputController) CompositionAttributesAtRange(range_ foundation.NSRange) *foundation.NSMutableDictionary[objc.ID, objc.ID]

@method @abstract Called to obtain a dictionary of text attributes. @discussion The default implementation returns an empty dictionary. You should override this method if your input method wants to provide font or glyphInformation. The returned object should be an autoreleased object.

CompositionAttributesAtRange calls the underlying CompositionAttributesAtRange.

func (*InputController) Delegate

func (x *InputController) Delegate() objc.ID

@method - (id)delegate; @abstract Returns the input controller's delegate object. The returned id is an autoreleased object.

Delegate calls the underlying Delegate.

func (*InputController) DoCommandBySelectorCommandDictionary

func (x *InputController) DoCommandBySelectorCommandDictionary(aSelector objc.SEL, infoDictionary *foundation.NSDictionary[objc.ID, objc.ID])

@method @abstract Called to pass commands that are not generated as part of the text input. @discussion The default implementation checks if the controller object (i.e. self) responds to the selector. If that is true the message performSelector:withObject is sent to the controller class. The object parameter in that case is the infoDictionary. This method is called when a user selects a command item from the text input menu. To support this an input method merely needs to provide actions for each menu item that will be placed in the menu. i.e. -(void)menuAction:(id)sender Note that the sender in this instance will be the infoDictionary. The dictionary contains two values: kIMKCommandMenuItemName NSMenuItem -- the NSMenuItem that was selected kIMKCommandClientName id<IMKTextInput, NSObject> - the current client

DoCommandBySelectorCommandDictionary calls the underlying DoCommandBySelectorCommandDictionary.

func (*InputController) HidePalettes

func (x *InputController) HidePalettes()

@method @abstract Called to inform an input method that any visible UI should be closed.

HidePalettes calls the underlying HidePalettes.

func (*InputController) ID

func (x *InputController) ID() objc.ID

ID returns the underlying Objective-C object pointer (objc.ID), for passing to C APIs that take an object or CFTypeRef pointer.

func (*InputController) InputControllerWillClose

func (x *InputController) InputControllerWillClose()

@method @abstract Called to notify an input controller that it is about to be closed.

InputControllerWillClose calls the underlying InputControllerWillClose.

func (*InputController) MarkForStyleAtRange

func (x *InputController) MarkForStyleAtRange(style int, range_ foundation.NSRange) *foundation.NSDictionary[objc.ID, objc.ID]

@method @abstract Returns a dictionary of text attributes that can be used to mark a range of an attributed string that is going to be sent to a client. @discussion This utility function can be called by input methods to mark each range (i.e. clause ) of marked text. The style parameter should be one of the following values: kTSMHiliteSelectedRawText, kTSMHiliteConvertedText or kTSMHiliteSelectedConvertedText. See AERegistry.h for the definition of these values. The default implementation begins by calling compositionAttributesAtRange: to obtain extra attributes that an input method wants to include such as font or glyph information. Then the appropriate underline and underline color information is added to the attributes dictionary for the style parameter. Finally the style value is added as dictionary value. The key for the style value is NSMarkedClauseSegment. The returned object should be an autoreleased object.

MarkForStyleAtRange calls the underlying MarkForStyleAtRange.

func (*InputController) Menu

func (x *InputController) Menu() *appkit.NSMenu

@method @abstract Returns a menu of input method specific commands. @discussion This method is called whenever the menu needs to be drawn so that input methods can update the menu to reflect their current state. The returned NSMenu is an autoreleased object.

Menu calls the underlying Menu.

func (*InputController) ReplacementRange

func (x *InputController) ReplacementRange() foundation.NSRange

@method @abstract Returns the range in the client document that text should replace. @discussion This method is called by updateComposition to obtain the range in the client's document where markedText should be placed. The default implementation returns an NSRange whose location and length are NSNotFound. That indicates that the marked text should be placed at the current insertion point. Input methods that wish to insert marked text somewhere other than at the current insertion point should override this method. An example of an input method that might override this method would be one replaced words with synonyms. That input method would watch for certain words and when one of those words was seen it would be replaced by marked text that was a synonym of the word.

ReplacementRange calls the underlying ReplacementRange.

func (*InputController) SelectionRange

func (x *InputController) SelectionRange() foundation.NSRange

@method @abstract Returns where the selection should be placed inside markedText. @discussion This method is called by updateComposition: to obtain the selection range for markedText. The default implementation sets the selection range at the end of the marked text.

SelectionRange calls the underlying SelectionRange.

func (*InputController) Server

func (x *InputController) Server() *Server

@method @abstract Return the server object which is managing this input controller. The returned IMKServer is an autoreleased object.

Server calls the underlying Server.

func (*InputController) SetDelegate

func (x *InputController) SetDelegate(newDelegate objc.ID)

@method @abstract Set the input controller's delegate object.

SetDelegate calls the underlying SetDelegate.

func (*InputController) Unwrap

func (x *InputController) Unwrap() *raw.IMKInputController

Unwrap returns the underlying raw.IMKInputController.

func (*InputController) UpdateComposition

func (x *InputController) UpdateComposition()

@method @abstract Called to inform the controller that the composition has changed. @discussion This method will call the protocol method composedString: to obtain the current composition. The current composition will be sent to the client by a call to the method setMarkedText:

UpdateComposition calls the underlying UpdateComposition.

type InputControllerable

type InputControllerable interface {
	Unwrap() *raw.IMKInputController
	UpdateComposition()
	CancelComposition()
	CompositionAttributesAtRange(range_ foundation.NSRange) *foundation.NSMutableDictionary[objc.ID, objc.ID]
	SelectionRange() foundation.NSRange
	ReplacementRange() foundation.NSRange
	MarkForStyleAtRange(style int, range_ foundation.NSRange) *foundation.NSDictionary[objc.ID, objc.ID]
	DoCommandBySelectorCommandDictionary(aSelector objc.SEL, infoDictionary *foundation.NSDictionary[objc.ID, objc.ID])
	HidePalettes()
	Menu() *appkit.NSMenu
	Delegate() objc.ID
	SetDelegate(newDelegate objc.ID)
	Server() *Server
	Client() objc.ID
	InputControllerWillClose()
	AnnotationSelectedForCandidate(annotationString *foundation.NSAttributedString, candidateString *foundation.NSAttributedString)
	CandidateSelectionChanged(candidateString *foundation.NSAttributedString)
	CandidateSelected(candidateString *foundation.NSAttributedString)
}

InputControllerable is the interface implemented by InputController, for mocking and DI.

type Server

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

@class IMKServer @abstract This class manages input sessions. @discussion An input method should create one and only one of these objects. An IMKServer creates an NSConnection that can be connected to by input clients. After a connection has been made an IMKServer manages communication between the client and the input method. For each communication session the IMKServer will create an IMKInputController class as well as delegate classes for that controller. Each controller object then serves as a proxy for the input session on the client side. This means that input methods do not have to concern themselves with managing client sessions. A given controller will only receive communication from a single session. IMKServer's also will manage a basic candidate window for an input method. See IMKCandidates.h to understand how to create a candidate window and associate the candidate window with the IMKServer object.

Server wraps raw.IMKServer with a fluent Go API.

func NewServerWithNameBundleIdentifier

func NewServerWithNameBundleIdentifier(name string, bundleIdentifier string) *Server

@method @abstract Create a IMKServer from information in the bundle's Info.plist. @discussion This method will look into the info.plist for a controller class and delegate class. The class names will be loaded, no classes will be instantiated. Additionally, an NSConnection will be allocated and registered with the name parameter.

NewServerWithNameBundleIdentifier creates a new Server.

func NewServerWithNameControllerClassDelegateClass

func NewServerWithNameControllerClassDelegateClass(name string, controllerClassID objc.Class, delegateClassID objc.Class) *Server

@method @abstract Creates an IMKServer using the parameters. @discussion This method creates an IMKServer object without attempting to examine the bundle instead the class names provided as parameters are used to create input controller objects and delegate objects.

NewServerWithNameControllerClassDelegateClass creates a new Server.

func ServerFromID

func ServerFromID(id objc.ID) *Server

ServerFromID adopts an existing object pointer as a Server (nil for 0).

func (*Server) Bundle

func (x *Server) Bundle() *foundation.NSBundle

@method @abstract Returns an NSBundle for the input method. @discussion If the IMKServer contains a bundle identifier the NSBundle is created from that. Otherwise, the bundle is created for the main bundle. The returned NSBundle is an autoreleased object.

Bundle calls the underlying Bundle.

func (*Server) ID

func (x *Server) ID() objc.ID

ID returns the underlying Objective-C object pointer (objc.ID), for passing to C APIs that take an object or CFTypeRef pointer.

func (*Server) LastKeyEventWasDeadKey

func (x *Server) LastKeyEventWasDeadKey() bool

@method @abstract Returns a BOOL indicating whether or not the last key press was a dead key.

LastKeyEventWasDeadKey calls the underlying LastKeyEventWasDeadKey.

func (*Server) PaletteWillTerminate

func (x *Server) PaletteWillTerminate() bool

@method @abstract Call this before terminating a palette IM. @discussion Palettes need to be able to terminate. When this method is called the IMKServer will notify each client of the palette that the palette is about to terminate. The palette can terminate safely if a value of YES is returned. If the caller of this method is not an input method of type palette an exception will be thrown. If the method returns NO the palette should not terminate.

PaletteWillTerminate calls the underlying PaletteWillTerminate.

func (*Server) Unwrap

func (x *Server) Unwrap() *raw.IMKServer

Unwrap returns the underlying raw.IMKServer.

type Serverable

type Serverable interface {
	Unwrap() *raw.IMKServer
	Bundle() *foundation.NSBundle
	PaletteWillTerminate() bool
	LastKeyEventWasDeadKey() bool
}

Serverable is the interface implemented by Server, for mocking and DI.

Jump to

Keyboard shortcuts

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