Portability | portable |
---|---|
Stability | experimental |
Maintainer | yi-devel@googlegroups.com |
Safe Haskell | None |
The Buffer
module defines monadic editing operations over one-dimensional
buffers, maintaining a current point.
- data FBuffer = forall syntax . FBuffer !(Mode syntax) !(BufferImpl syntax) !Attributes
- newtype BufferM a = BufferM {
- fromBufferM :: RWS Window [Update] FBuffer a
- type WinMarks = MarkSet Mark
- data MarkSet a = MarkSet {}
- bkey :: FBuffer -> BufferRef
- getMarks :: Window -> BufferM (Maybe WinMarks)
- runBuffer :: Window -> FBuffer -> BufferM a -> (a, FBuffer)
- runBufferFull :: Window -> FBuffer -> BufferM a -> (a, [Update], FBuffer)
- runBufferDummyWindow :: FBuffer -> BufferM a -> a
- curLn :: BufferM Int
- curCol :: BufferM Int
- colOf :: Point -> BufferM Int
- lineOf :: Point -> BufferM Int
- lineCountB :: BufferM Int
- sizeB :: BufferM Point
- pointB :: BufferM Point
- pointOfLineColB :: Int -> Int -> BufferM Point
- solPointB :: Point -> BufferM Point
- eolPointB :: Point -> BufferM Point
- markLines :: BufferM (MarkSet Int)
- moveTo :: Point -> BufferM ()
- moveToColB :: Int -> BufferM ()
- moveToLineColB :: Int -> Int -> BufferM ()
- lineMoveRel :: Int -> BufferM Int
- lineUp :: BufferM ()
- lineDown :: BufferM ()
- newB :: BufferRef -> BufferId -> YiString -> FBuffer
- data MarkValue = MarkValue {
- markPoint :: !Point
- markGravity :: !Direction
- data Overlay
- data OvlLayer
- mkOverlay :: OvlLayer -> Region -> StyleName -> Overlay
- gotoLn :: Int -> BufferM Int
- gotoLnFrom :: Int -> BufferM Int
- leftB :: BufferM ()
- rightB :: BufferM ()
- moveN :: Int -> BufferM ()
- leftN :: Int -> BufferM ()
- rightN :: Int -> BufferM ()
- insertN :: YiString -> BufferM ()
- insertNAt :: YiString -> Point -> BufferM ()
- insertB :: Char -> BufferM ()
- deleteN :: Int -> BufferM ()
- nelemsB :: Int -> Point -> BufferM YiString
- writeB :: Char -> BufferM ()
- writeN :: YiString -> BufferM ()
- newlineB :: BufferM ()
- deleteNAt :: Direction -> Int -> Point -> BufferM ()
- readB :: BufferM Char
- elemsB :: BufferM YiString
- undosA :: HasAttributes c => Lens' c URList
- undoB :: BufferM ()
- redoB :: BufferM ()
- getMarkB :: Maybe String -> BufferM Mark
- setMarkHereB :: BufferM Mark
- setNamedMarkHereB :: String -> BufferM ()
- mayGetMarkB :: String -> BufferM (Maybe Mark)
- getMarkValueB :: Mark -> BufferM MarkValue
- markPointA :: Mark -> Lens' FBuffer Point
- modifyMarkB :: Mark -> (MarkValue -> MarkValue) -> BufferM ()
- newMarkB :: MarkValue -> BufferM Mark
- deleteMarkB :: Mark -> BufferM ()
- setVisibleSelection :: Bool -> BufferM ()
- isUnchangedBuffer :: FBuffer -> Bool
- setAnyMode :: AnyMode -> BufferM ()
- setMode :: Mode syntax -> BufferM ()
- setMode0 :: forall syntax. Mode syntax -> FBuffer -> FBuffer
- modifyMode :: (forall syntax. Mode syntax -> Mode syntax) -> BufferM ()
- regexRegionB :: SearchExp -> Region -> BufferM [Region]
- regexB :: Direction -> SearchExp -> BufferM [Region]
- readAtB :: Point -> BufferM Char
- getModeLine :: [Text] -> BufferM Text
- getPercent :: Point -> Point -> Text
- setInserting :: Bool -> BufferM ()
- savingPrefCol :: BufferM a -> BufferM a
- forgetPreferCol :: BufferM ()
- movingToPrefCol :: BufferM a -> BufferM a
- preferColA :: HasAttributes c => Lens' c (Maybe Int)
- markSavedB :: UTCTime -> BufferM ()
- addOverlayB :: Overlay -> BufferM ()
- delOverlayB :: Overlay -> BufferM ()
- delOverlayLayerB :: OvlLayer -> BufferM ()
- savingExcursionB :: BufferM a -> BufferM a
- savingPointB :: BufferM a -> BufferM a
- savingPositionB :: BufferM a -> BufferM a
- pendingUpdatesA :: HasAttributes c => Lens' c [UIUpdate]
- highlightSelectionA :: Lens' FBuffer Bool
- rectangleSelectionA :: Lens' FBuffer Bool
- readOnlyA :: HasAttributes c => Lens' c Bool
- insertingA :: HasAttributes c => Lens' c Bool
- pointFollowsWindowA :: HasAttributes c => Lens' c (WindowRef -> Bool)
- revertPendingUpdatesB :: BufferM ()
- askWindow :: (Window -> a) -> BufferM a
- clearSyntax :: FBuffer -> FBuffer
- focusSyntax :: Map WindowRef Region -> FBuffer -> FBuffer
- data Mode syntax = Mode {
- modeName :: Text
- modeApplies :: FilePath -> YiString -> Bool
- modeHL :: ExtHL syntax
- modePrettify :: syntax -> BufferM ()
- modeKeymap :: KeymapSet -> KeymapSet
- modeIndent :: syntax -> IndentBehaviour -> BufferM ()
- modeAdjustBlock :: syntax -> Int -> BufferM ()
- modeFollow :: syntax -> Action
- modeIndentSettings :: IndentSettings
- modeToggleCommentSelection :: Maybe (BufferM ())
- modeGetStrokes :: syntax -> Point -> Point -> Point -> [Stroke]
- modeOnLoad :: BufferM ()
- modeModeLine :: [Text] -> BufferM Text
- modeGotoDeclaration :: BufferM ()
- modeNameA :: forall syntax. Lens' (Mode syntax) Text
- modeAppliesA :: forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
- modeHLA :: forall syntax. Lens' (Mode syntax) (ExtHL syntax)
- modePrettifyA :: forall syntax. Lens' (Mode syntax) (syntax -> BufferM ())
- modeKeymapA :: forall syntax. Lens' (Mode syntax) (KeymapSet -> KeymapSet)
- modeIndentA :: forall syntax. Lens' (Mode syntax) (syntax -> IndentBehaviour -> BufferM ())
- modeAdjustBlockA :: forall syntax. Lens' (Mode syntax) (syntax -> Int -> BufferM ())
- modeFollowA :: forall syntax. Lens' (Mode syntax) (syntax -> Action)
- modeIndentSettingsA :: forall syntax. Lens' (Mode syntax) IndentSettings
- modeToggleCommentSelectionA :: forall syntax. Lens' (Mode syntax) (Maybe (BufferM ()))
- modeGetStrokesA :: forall syntax. Lens' (Mode syntax) (syntax -> Point -> Point -> Point -> [Stroke])
- modeOnLoadA :: forall syntax. Lens' (Mode syntax) (BufferM ())
- modeModeLineA :: forall syntax. Lens' (Mode syntax) ([Text] -> BufferM Text)
- data AnyMode = forall syntax . AnyMode (Mode syntax)
- data IndentBehaviour
- data IndentSettings = IndentSettings {
- expandTabs :: Bool
- tabSize :: Int
- shiftWidth :: Int
- expandTabsA :: Lens' IndentSettings Bool
- tabSizeA :: Lens' IndentSettings Int
- shiftWidthA :: Lens' IndentSettings Int
- modeAlwaysApplies :: a -> b -> Bool
- modeNeverApplies :: a -> b -> Bool
- emptyMode :: Mode syntax
- withModeB :: (forall syntax. Mode syntax -> BufferM a) -> BufferM a
- withMode0 :: (forall syntax. Mode syntax -> a) -> FBuffer -> a
- onMode :: (forall syntax. Mode syntax -> Mode syntax) -> AnyMode -> AnyMode
- withSyntaxB :: (forall syntax. Mode syntax -> syntax -> a) -> BufferM a
- withSyntaxB' :: (forall syntax. Mode syntax -> syntax -> BufferM a) -> BufferM a
- keymapProcessA :: HasAttributes c => Lens' c KeymapProcess
- strokesRangesB :: Maybe SearchExp -> Region -> BufferM [[Stroke]]
- streamB :: Direction -> Point -> BufferM YiString
- indexedStreamB :: Direction -> Point -> BufferM [(Point, Char)]
- askMarks :: BufferM WinMarks
- pointAt :: BufferM a -> BufferM Point
- data SearchExp
- lastActiveWindowA :: HasAttributes c => Lens' c Window
- putBufferDyn :: (YiVariable a, MonadState FBuffer m, Functor m) => a -> m ()
- getBufferDyn :: (YiVariable a, MonadState FBuffer m, Functor m) => m a
- shortIdentString :: Int -> FBuffer -> Text
- identString :: FBuffer -> Text
- miniIdentString :: FBuffer -> Text
- identA :: HasAttributes c => Lens' c BufferId
- directoryContentA :: HasAttributes c => Lens' c Bool
- data BufferId
- = MemBuffer Text
- | FileBuffer FilePath
- file :: FBuffer -> Maybe FilePath
- lastSyncTimeA :: HasAttributes c => Lens' c UTCTime
- replaceCharB :: Char -> BufferM ()
- replaceCharWithBelowB :: BufferM ()
- replaceCharWithAboveB :: BufferM ()
- insertCharWithBelowB :: BufferM ()
- insertCharWithAboveB :: BufferM ()
- pointAfterCursorB :: Point -> BufferM Point
- destinationOfMoveB :: BufferM a -> BufferM Point
- withEveryLineB :: BufferM () -> BufferM ()
- startUpdateTransactionB :: BufferM ()
- commitUpdateTransactionB :: BufferM ()
- applyUpdate :: Update -> BufferM ()
- betweenB :: Point -> Point -> BufferM YiString
- decreaseFontSize :: Int -> BufferM ()
- increaseFontSize :: Int -> BufferM ()
- indentSettingsB :: BufferM IndentSettings
- fontsizeVariationA :: HasAttributes c => Lens' c Int
- encodingConverterNameA :: HasAttributes c => Lens' c (Maybe ConverterName)
Documentation
forall syntax . FBuffer !(Mode syntax) !(BufferImpl syntax) !Attributes |
The BufferM monad writes the updates performed.
Monad BufferM | |
Functor BufferM | |
Typeable1 BufferM | |
Applicative BufferM | |
MonadReader Window BufferM | |
MonadState FBuffer BufferM | |
MonadWriter [Update] BufferM | |
YiAction (BufferM x) x | |
MkSnippetCmd (SnippetCmd a) a |
runBuffer :: Window -> FBuffer -> BufferM a -> (a, FBuffer)Source
Execute a BufferM
value on a given buffer and window. The new state of
the buffer is returned alongside the result of the computation.
runBufferDummyWindow :: FBuffer -> BufferM a -> aSource
Execute a BufferM
value on a given buffer, using a dummy window. The new state of
the buffer is discarded.
Current column. Note that this is different from offset or number of chars from sol. (This takes into account tabs, unicode chars, etc.)
lineCountB :: BufferM IntSource
pointOfLineColB :: Int -> Int -> BufferM PointSource
moveToColB :: Int -> BufferM ()Source
moveToLineColB :: Int -> Int -> BufferM ()Source
lineMoveRel :: Int -> BufferM IntSource
Move point down by n
lines. n
can be negative.
Returns the actual difference in lines which we moved which
may be negative if the requested line difference is negative.
MarkValue | |
|
mkOverlay :: OvlLayer -> Region -> StyleName -> OverlaySource
Create an overlay for the style sty
between points s
and e
gotoLn :: Int -> BufferM IntSource
Go to line number n
. n
is indexed from 1. Returns the
actual line we went to (which may be not be the requested line,
if it was out of range)
gotoLnFrom :: Int -> BufferM IntSource
Go to line indexed from current point Returns the actual moved difference which of course may be negative if the requested difference was negative.
moveN :: Int -> BufferM ()Source
Move point by the given number of characters. A negative offset moves backwards a positive one forward.
insertN :: YiString -> BufferM ()Source
Insert the YiString
at current point, extending size of buffer
insertNAt :: YiString -> Point -> BufferM ()Source
Insert given YiString
at specified point, extending size of the
buffer.
insertB :: Char -> BufferM ()Source
Insert the char at current point, extending size of buffer
Implementation note: This just insertB
s a singleton
. This
seems sub-optimal because we should be able to do much better
without spewing chunks of size 1 everywhere. This approach is
necessary however so an Update
can be recorded. A possible
improvement for space would be to have ‘yi-rope’ package optimise
for appends with length 1.
deleteNAt :: Direction -> Int -> Point -> BufferM ()Source
deleteNAt n p
deletes n
characters forwards from position p
setNamedMarkHereB :: String -> BufferM ()Source
mayGetMarkB :: String -> BufferM (Maybe Mark)Source
deleteMarkB :: Mark -> BufferM ()Source
setVisibleSelection :: Bool -> BufferM ()Source
Highlight the selection
isUnchangedBuffer :: FBuffer -> BoolSource
setAnyMode :: AnyMode -> BufferM ()Source
Set the mode
modifyMode :: (forall syntax. Mode syntax -> Mode syntax) -> BufferM ()Source
Modify the mode
regexRegionB :: SearchExp -> Region -> BufferM [Region]Source
Return indices of strings in buffer matched by regex in the given region.
regexB :: Direction -> SearchExp -> BufferM [Region]Source
Return indices of next string in buffer matched by regex in the given direction
readAtB :: Point -> BufferM CharSource
Read the character at the given index This is an unsafe operation: character NUL is returned when out of bounds
getModeLine :: [Text] -> BufferM TextSource
Given a buffer, and some information update the modeline
N.B. the contents of modelines should be specified by user, and not hardcoded.
getPercent :: Point -> Point -> TextSource
Given a point, and the file size, gives us a percent string
setInserting :: Bool -> BufferM ()Source
savingPrefCol :: BufferM a -> BufferM aSource
forgetPreferCol :: BufferM ()Source
movingToPrefCol :: BufferM a -> BufferM aSource
preferColA :: HasAttributes c => Lens' c (Maybe Int)Source
markSavedB :: UTCTime -> BufferM ()Source
Mark the current point in the undo list as a saved state.
addOverlayB :: Overlay -> BufferM ()Source
Adds an overlay to the buffer
delOverlayB :: Overlay -> BufferM ()Source
Remove an existing overlay
delOverlayLayerB :: OvlLayer -> BufferM ()Source
savingExcursionB :: BufferM a -> BufferM aSource
perform a BufferM a
, and return to the current point. (by using a mark)
savingPointB :: BufferM a -> BufferM aSource
Perform an BufferM a
, and return to the current point.
savingPositionB :: BufferM a -> BufferM aSource
Perform an BufferM a
, and return to the current line and column
number. The difference between this and savingPointB
is that here
we attempt to return to the specific line and column number, rather
than a specific number of characters from the beginning of the
buffer.
In case the column is further away than EOL, the point is left at
EOL: moveToLineColB
is used internally.
pendingUpdatesA :: HasAttributes c => Lens' c [UIUpdate]Source
highlightSelectionA :: Lens' FBuffer BoolSource
rectangleSelectionA :: Lens' FBuffer BoolSource
insertingA :: HasAttributes c => Lens' c BoolSource
pointFollowsWindowA :: HasAttributes c => Lens' c (WindowRef -> Bool)Source
revertPendingUpdatesB :: BufferM ()Source
Revert all the pending updates; don't touch the point.
clearSyntax :: FBuffer -> FBufferSource
update the syntax information (clear the dirty flag)
A Mode customizes the Yi interface for editing a particular data format. It specifies when the mode should be used and controls file-specific syntax highlighting and command input, among other things.
Mode | |
|
Binary (Mode syntax) | Just stores the mode name. |
modeAppliesA :: forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)Source
modePrettifyA :: forall syntax. Lens' (Mode syntax) (syntax -> BufferM ())Source
modeIndentA :: forall syntax. Lens' (Mode syntax) (syntax -> IndentBehaviour -> BufferM ())Source
modeAdjustBlockA :: forall syntax. Lens' (Mode syntax) (syntax -> Int -> BufferM ())Source
modeFollowA :: forall syntax. Lens' (Mode syntax) (syntax -> Action)Source
modeIndentSettingsA :: forall syntax. Lens' (Mode syntax) IndentSettingsSource
modeToggleCommentSelectionA :: forall syntax. Lens' (Mode syntax) (Maybe (BufferM ()))Source
modeGetStrokesA :: forall syntax. Lens' (Mode syntax) (syntax -> Point -> Point -> Point -> [Stroke])Source
modeOnLoadA :: forall syntax. Lens' (Mode syntax) (BufferM ())Source
data IndentBehaviour Source
Used to specify the behaviour of the automatic indent command.
IncreaseCycle | Increase the indentation to the next higher indentation hint. If we are currently at the highest level of indentation then cycle back to the lowest. |
DecreaseCycle | Decrease the indentation to the next smaller indentation hint. If we are currently at the smallest level then cycle back to the largest |
IncreaseOnly | Increase the indentation to the next higher hint if no such hint exists do nothing. |
DecreaseOnly | Decrease the indentation to the next smaller indentation hint, if no such hint exists do nothing. |
Eq IndentBehaviour | |
Show IndentBehaviour |
data IndentSettings Source
Currently duplicates some of Vim's indent settings. Allowing a buffer to specify settings that are more dynamic, perhaps via closures, could be useful.
IndentSettings | |
|
Eq IndentSettings | |
Show IndentSettings | |
Typeable IndentSettings |
expandTabsA :: Lens' IndentSettings BoolSource
tabSizeA :: Lens' IndentSettings IntSource
shiftWidthA :: Lens' IndentSettings IntSource
modeAlwaysApplies :: a -> b -> BoolSource
Mode applies function that always returns True.
modeNeverApplies :: a -> b -> BoolSource
Mode applies function that always returns False.
withSyntaxB :: (forall syntax. Mode syntax -> syntax -> a) -> BufferM aSource
withSyntaxB' :: (forall syntax. Mode syntax -> syntax -> BufferM a) -> BufferM aSource
keymapProcessA :: HasAttributes c => Lens' c KeymapProcessSource
lastActiveWindowA :: HasAttributes c => Lens' c WindowSource
putBufferDyn :: (YiVariable a, MonadState FBuffer m, Functor m) => a -> m ()Source
Access to a value into the extensible state, keyed by its type.
This allows you to save inside a BufferM
monad, ie:
putBufferDyn updatedvalue
getBufferDyn :: (YiVariable a, MonadState FBuffer m, Functor m) => m aSource
Access to a value into the extensible state, keyed by its type.
This allows you to retrieve inside a BufferM
monad, ie:
value <- getBufferDyn
Gets a short identifier of a buffer. If we're given a MemBuffer
then just wraps the buffer name like so: *name*
. If we're given a
FileBuffer
, it drops the the number of characters specified.
>>>
shortIdentString 3 (MemBuffer "hello")
"*hello*">>>
shortIdentString 3 (FileBuffer "hello")
"lo"
identString :: FBuffer -> TextSource
Gets the buffer's identifier string, emphasising the MemBuffer
:
>>>
identString (MemBuffer "hello")
"*hello*">>>
identString (FileBuffer "hello")
"hello"
miniIdentString :: FBuffer -> TextSource
directoryContentA :: HasAttributes c => Lens' c BoolSource
lastSyncTimeA :: HasAttributes c => Lens' c UTCTimeSource
replaceCharB :: Char -> BufferM ()Source
destinationOfMoveB :: BufferM a -> BufferM PointSource
What would be the point after doing the given action? The argument must not modify the buffer.
withEveryLineB :: BufferM () -> BufferM ()Source
applyUpdate :: Update -> BufferM ()Source
Returns the contents of the buffer between the two points.
If the startPoint >= endPoint
, empty string is returned. If the
points are out of bounds, as much of the content as possible is
taken: you're not guaranteed to get endPoint - startPoint
characters.
decreaseFontSize :: Int -> BufferM ()Source
Decreases the font size in the buffer by specified number. What this number actually means depends on the front-end.
increaseFontSize :: Int -> BufferM ()Source
Increases the font size in the buffer by specified number. What this number actually means depends on the front-end.
indentSettingsB :: BufferM IndentSettingsSource
Gives the IndentSettings
for the current buffer.
fontsizeVariationA :: HasAttributes c => Lens' c IntSource
encodingConverterNameA :: HasAttributes c => Lens' c (Maybe ConverterName)Source