file:///
absolute links. Holding the Ctrl/Cmd
key will copy the files into your vault like it did previously.Ctrl/Cmd
+ /
.file:
or path:
operators.<iframe>
to embed even more sites that previously wouldn't show. This is done by patching the Content-Security-Policy
header containing frame-ancestors
that some websites use to prevent embedding.?
and *
. Keep in mind that if you synchronize your files with a Windows machine, those will not work.file:///
absolute paths to embed images and iframes from your local machine.Alt
to drop a file anywhere on a pane to open it there, rather than having to drop it in the header.obsidian://
protocol. Look for the function Plugin.registerObsidianProtocolHandler(action, handler)
.App.fileManager
to rename files and update links.Workspace.onLayoutReady(callback)
to have a callback run if and when the app's layout is ready. This replaces the previous patternif (workspace.layoutReady) {
callback();
} else {
workspace.on('layout-ready', callback);
}
.obsidian
folder was copied.Tab
after typing in the file name bar should also focus on the editor.%% comments go here %%
%%
is at the beginning of the line.data:
and https://
based web fonts.TextFileView
is now available for use. This class is an EditableFileView
that additionally takes care of saving/loading the file contents. If you wish to extend this view, you can simply hook up the functions that interfaces with your editor and the rest should be taken care of.debounce
function exposed for convenience.Plugin.registerMarkdownCodeBlockProcessor
helper that makes it easier to register a handler for a custom fenced code block, similar to mermaid
and query
embeds.<iframe>
to embed sites that previously wouldn't show. This is done by ignoring the X-Frame-Options
that some websites use to prevent embedding.favicon.ico
for Obsidian Publish.![[image.png]]
are now displayed inline instead of taking up a whole line by itself.Plugin.registerExtensions()
will now allow the app to recognize the file extension without requiring the user to turn on the "Detect all file extensions" option. In combination with Plugin.registerView()
, you can now create custom viewers or editors for any file type that we don't currently support.<style>
tags.#page=number
at the end. For example [[My file.pdf#page=3]]
. This also works for embedded PDFs. Typing #
while auto-completing a PDF file will automatically add #page=
for you.file-open
event is now fired in a debounced frame instead of synchronously running while the activeLeaf
is being set.layout-ready
event will now only fire once when the app finish loading the workspace, instead of also triggering when loading a different workspace.Ctrl/Cmd
click tags in the tag pane to toggle them as a search filter, instead of replacing the search query.tag:#mytag
will now always use case-insensitive mode, since tags are always insensitively matched. For case sensitive match, use a plain #mytag
query instead._
will now auto-complete properly.:
character no longer creates a Markdown link.obsidian://
URI no longer opens all previously opened vaults.#parent/child
nested tags will only have cm-hashtag-end
on the last piece of <span>
when spellchecker breaks the tag into multiple pieces.MarkdownRenderChild
has been properly exported.data-path
attribute to facilitate custom CSS targeting.#parent/child/subchild
.
tag:#parent
will now match #parent/child
.line:(...)
will perform the subquery on a line-by-line basis, rather than a file-by-file basis. For example, line:(foo bar)
will only match foo
and bar
if they're on the same line.block:(...)
will perform the subquery on a block-by-block basis. This is expensive computationally as it requires parsing each file, which means this is likely slower than other modes.section:(...)
will perform the subquery on a section-by-section basis. A section starts from a heading and ends before the next heading.Cmd+Shift+V
can now paste as plaintext on macOS, in addition to the previous Cmd+Shift+Option+V
(seriously, who came up with this default hotkey?).%20
now decode properly when navigating using the editor.Setting
and BaseComponent
now have a setDisabled
function that will disable its control. Disabling a setting will disable all of its components.Scope.registerKey
is now deprecated. It is replaced by Scope.register
.query
as the language, similar to how mermaid works. Note that this syntax does not work in Obsidian Publish.Ctrl/Cmd+Click
and Alt+Enter
for links in the editor.Shift
while dropping text will drop it in plaintext mode, similar to Ctrl/Cmd+Shift+V
to paste in plaintext mode.**
signs.WorkspaceItem.getRoot()
which returns one of Workspace.leftSplit
, Workspace.rightSplit
, or Workspace.rootSplit
. This can be used to distinguish whether a WorkspaceLeaf
is in the center area or the sidebars.Workspace.on('quit', callback: (tasks: Tasks) => any)
. This takes a callback with a Tasks
object. You can perform any cleanup tasks in here. For any async/promise-based cleanups, such as saving files, add your task to the execution queue using Tasks.add(async () => { ... })
or Tasks.addPromise(promise)
so that the app waits until your task is finished before quitting.MarkdownPostProcessorContext.addChild
for more details.[Display text](https://url)
instead of previously just the URL.Cmd+Option+F
to avoid clashing with the native hotkey for hide window.Alt+Click
, or multiple consecutive files using Shift+Click
.obsidian://
link the same way it's generated as "Copy obsidian url".Tab
will now insert spaces if Use tab to indent
is turned off.Plugin.registerCodeMirror(callback)
has been introduced to help plugins hook to CodeMirror instances that are already loaded, and also created in the future. This function is just a helper for Workspace.iterateCodeMirrors(callback)
then Workspace.on('codemirror', callback)
Workspace.iterateCodeMirrors(callback)
has been introduced to help plugins cleanup their CodeMirror events when the plugin unloads.App.on('codemirror', callback)
has been moved to Workspace.on('codemirror', callback)
. The old method will be deprecated and will now proxy to the new one. There is no more event system on App
.internal-link
for the node. The app will use the contents of the node as the link. Example: class A internal-link;
]]
when another link exists on the same line.1
.[[
auto-conversion from chinese characters 【【
.prepareQuery
, fuzzySearch
, renderMatches
, renderResults
, sortSearchResults
, are now available.Enter
to finish rename a file not working properly when using an IME.SuggestModal
and FuzzySuggestModal
are now available for use.