{"id":22482412,"url":"https://github.com/mara-li/obsidian-enhanced-copy","last_synced_at":"2026-02-09T22:01:27.298Z","repository":{"id":163114612,"uuid":"638071281","full_name":"Mara-Li/obsidian-enhanced-copy","owner":"Mara-Li","description":"A obsidian plugin that allows to copy in markdown in reading view or canvas read-only view, creating profile and transform the text during copy.","archived":false,"fork":false,"pushed_at":"2025-07-18T10:54:19.000Z","size":657,"stargazers_count":33,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-23T06:51:40.536Z","etag":null,"topics":["canvas","copy","obsidian","plugin","reading-view"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mara-Li.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG-LATEST.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-05-09T02:50:18.000Z","updated_at":"2025-10-17T22:52:29.000Z","dependencies_parsed_at":"2024-05-28T11:27:14.011Z","dependency_job_id":"de0bd98f-de0d-47d3-bb2f-997d43e9610f","html_url":"https://github.com/Mara-Li/obsidian-enhanced-copy","commit_stats":null,"previous_names":["lisandra-dev/obsidian-enhanced-copy","mara-li/obsidian-enhanced-copy"],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/Mara-Li/obsidian-enhanced-copy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mara-Li%2Fobsidian-enhanced-copy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mara-Li%2Fobsidian-enhanced-copy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mara-Li%2Fobsidian-enhanced-copy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mara-Li%2Fobsidian-enhanced-copy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mara-Li","download_url":"https://codeload.github.com/Mara-Li/obsidian-enhanced-copy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mara-Li%2Fobsidian-enhanced-copy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29283014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T21:57:15.303Z","status":"ssl_error","status_checked_at":"2026-02-09T21:57:11.537Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canvas","copy","obsidian","plugin","reading-view"],"created_at":"2024-12-06T16:24:45.098Z","updated_at":"2026-02-09T22:01:27.291Z","avatar_url":"https://github.com/Mara-Li.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Copy Reading In Markdown\n\nCopy a selection in reading view while keeping the markdown formatting\n\n## 🛠️ Usage\n\n- Select the text you want to copy\n- Open the command palette\n- Select `Copy selected text`\n\n\u003e [!NOTE]\n\u003e The goal is to replace the native copy function of Obsidian. You can set the command on \u003ckbd\u003eCTRL\u003c/kbd\u003e + \u003ckbd\u003eC\u003c/kbd\u003e (\u003ckbd\u003e⌘\u003c/kbd\u003e+\u003ckbd\u003eC\u003c/kbd\u003e on MacOS)\n\u003e Some selection doesn't work as in the native copy in Obsidian, but I didn't find a way to process the native copy function in the plugin.\n\n## ⚙️ Settings\n\nYou can adjust the way the content is copied in the settings.\n\nFirst, you need to set the view mode to use. You can choose between:\n\n- `reading`: Only the selected text in reading view will be edited\n- `editing` : Only the selected text in editing view will be edited\n- `all` : The selected text will be edited in both views\n\nYou can also choose to add a command for each copy-mode. It will create a command for :\n\n- Reading view (with checkCallback)\n- Editing view\n- Non markdown view (canvas, database-plugin...)\n\nFinally, you can to choose to override the default copy (from menu and the \u003ckbd\u003eCTRL\u003c/kbd\u003e/\u003ckbd\u003e⌘\u003c/kbd\u003e + \u003ckbd\u003eC\u003c/kbd\u003e). Pretty useful for mobile!\n\n\u003e [!Note]\n\u003e The default copy is disabled on canvas, so I advice you to use the command separator to set an hotkey/button for \"other\" view \u0026 use the default copy on markdown view (reading and LP/source mode).\n\nThe reading view and editing view have ~ the same settings, but you need to set them separately. It will allow having different copy settings for each view.\n\nYou can enable the overriding of native copy for each view, so it could be disabled for reading view and enabled for editing view (and vice versa).\n\n\u003e [!warning]\n\u003e If so, any change to the settings (including CSS file for RTF) will need Obsidian to be reloaded.\n\nYou can create \"profile\", that will add a command (after reloadig Obsidian), so you can create a profile for copying on Discord and use it sometimes.\n\n### Common settings\n\nThese settings are the same for both views. As they are separate for each view, if you want some edit in the two views, you need to set them twice.\nIt is done on purpose to prevent surprise when you use the plugin on editing view but don't want some changes.\n\n\u003e **Info**\n\u003e The button in the first tab \"copy\" will allow you to copy the settings for one view to the other.\n\n- You can change the aspect of the links:\n  - `Keep` : Don't change the link (so they will be in `[link](url)` format)\n  - `Remove all` : Remove all the links, and keep only the alias (so `[link](url)` will be `link`)\n  - `Remove only for internal links` : Remove only the internal links (so `[link](url)` will be `link` but `[link](https://example.com)` will be `[link](https://example.com)`)\n- Same, you can change the footnote settings:\n  - `Keep` : Don't change the footnote (so they will be in the strange format of Obsidian turndown: `footnote[[1]](#fn-1-xxx)`)\n  - `Remove all` : Remove all the footnotes, and keep only the alias (so `footnote[[1]](#fn-1-xxx)` will be `footnote`)\n  - `Format as [^1]`: Convert `footnote[[1]](#fn-1-xxx)` to `footnote[^1]`\n    These settings will also fix the \"markdown contents,\" aka the footnote at the end of the documents.\n    \u003e **Info**  \n    \u003e With the **format** option, if you copy multiple footnote, they will be `[^1]:` `[^2]:` etc..., not a numbered list!\n- Unconventional markdown:\n  - Highlight: Remove `==` around the highlighted text\n  - Fix callout:\n    - `Obsidian format` : Keep the same format\n    - `Type to strong` : Convert all in blockquote and transform the type to bold: `\u003e [!info]` will become `\u003e **Info**` (à la GitHub Callout)\n    - `Simple blockquote` : Remove type, keep title and convert to blockquote.\n- Other:\n  - Strict line breaks: Add two spaces at the end of each line\n- Regex replacement: You can add more replacement to the copy with the button that will open a modal. Note that the replacement will be done **after all other changes**.\n- Convert to HTML and copy as rich text: See [HTML](#html) section.\n\n### Not common settings\n#### Reading view\n\n- Space number : By default, turndown will convert tabulation to 4 spaces. You can change this size here.\n\n#### Editing view\n\n- Convert wikilinks to Markdown links: Convert `[[link]]` to `[link](link)`. Needed to convert the links (as in reading view).\n- Convert tabulation to space and choose the size\n\n## HTML\nYou can export the text into HTML format instead of Markdown, and also choose to export as \"Rich text\".\n\nThe rich text needs a proper CSS to works, so you can set the path to a CSS file in the settings. You can use the default one provided in the plugin, or create your own. Any file within obsidian (including `.obsidian`) can be used.\n\nIt is important that the CSS file includes all the styles for basic Markdown elements (like `h1`, `h2`, `strong`, `em`, `code`). You mustn't use any variable from Obsidian. \nThe default CSS is defined [here](./src/utils/loadCssForHtml.ts).\n\n\u003e [!tip] \n\u003e In reading view, the HTML is generated from the Markdown (using the Obsidian API).\n\n## 📝 Limitations\n\n- For a strange reason, the first line of a blockquote / list / callout is not selected totally properly as HTML. If you want to format only a part of this, you need to select the line before (or after). You can use \"invisible\" characters, `$~~$` for example.\n- Not support Mathjax copying (as you can't select them in reading view).\n- In reading view, already \"HTML writing\" are not copied as HTML (like `\u003cb\u003e…\u003c/b\u003e`). They are copied as Markdown, or only the text is copied (if not basic html). You can prevent this using the `data-type=\"html\"` attribute on the element. For example, `b data-type=\"html\"` will be copied as `\u003cb\u003e…\u003c/b\u003e`.\n- Selecting text with image will copy the name of the image. If you want to copy the image, you need to select the image itself (not the text).\n\n## 📥 Installation\n\n- [x] From Obsidian's community plugins\n- [x] Using BRAT with `https://github.com/Mara-Li/obsidian-enhanced-copy`\n- [x] From the release page:\n  - Download the latest release\n  - Unzip `obsidian-enhanced-copy.zip` in `.obsidian/plugins/` path\n  - In Obsidian settings, reload the plugin\n  - Enable the plugin\n\n## 🤖 Developing\n\nTo make changes to this plugin, first ensure you have the dependencies installed. First, don't forget that you need Node. The package manager used in the project is `pnpm` so you need to install it globally.\n\n```\nnpm i pnpm -g\npnpm install\n```\n\nTo start building the plugin with what mode enabled run the following command:\n\n```\npnpm run dev\n```\n\n\u003e **Note**  \n\u003e If you haven't already installed the hot-reload-plugin you'll be prompted to. You need to enable that plugin in your obsidian vault before hot-reloading will start. You might need to refresh your plugin list for it to show up.\n\u003e To start a release build run the following command:\n\n```\npnpm run build\n```\n\n\u003e **Note**  \n\u003e You can use the `.env` file with adding the key `VAULT_DEV` to specify the path to your Obsidian (development) vault. This will allow you to test your plugin without specify each times the path to the vault.\n\n### 📤 Export\n\nYou can use the `npm run export` command to export your plugin to your Obsidian Main Vault. To do that, you need the `.env` file with the following content:\n\n```dotenv\nVAULT=path/to/main/vault\nVAULT_DEV=path/to/dev/vault\n```\n\n### 🎼 Languages\n\n- [x] English\n- [x] French\n\nTo add a translation:\n\n- Fork the repository\n- Add the translation in the `src/i18n/locales` folder with the name of the language (ex: `fr.json`)\n- Copy the content of the [`en.json`](./src/i18n/locales/en.json) file in the new file\n- Translate the content\n- Create a pull request\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmara-li%2Fobsidian-enhanced-copy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmara-li%2Fobsidian-enhanced-copy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmara-li%2Fobsidian-enhanced-copy/lists"}