kungsgeten / org-brain Goto Github PK
View Code? Open in Web Editor NEWOrg-mode wiki + concept-mapping
License: MIT License
Org-mode wiki + concept-mapping
License: MIT License
When using org-brain-add-child
and choosing a file which have a title, and org-brain-file-entries-use-title
is t
, the child will not be added to the existing file, but to a new file named to the title instead.
Maybe I was doing something wrong, but it appears if there are no org files in org-brain-path (empty directory in my case), then it prompts for "Entry" and no matter what, you get:
"Wrong type argument: stringp, nil"
What do you think about having org-brain-visualize
go to the entry at point, if it's an org-brain entry or file? If it's not an org-brain entry or file, then it can open up the menu to pick an entry to visualize. I often want to see who the parents and friends are for an entry that I am reading, so it would be nice to be able to jump to the visualization for it right from the entry. This behavior could be the default behavior or another configuration setting.
Hi!
I have some links in an org file managed by org-brain, these links points to an info page and Emacs help(like C-h f
functions pages).
When I try to visualize with org-brain-visualize
it doesn't work. However, I can see some children nodes when trying to enter through its parent.
The message returned by Emacs when trying to display the diagram and summary:
org-brain-insert-resource-button: Wrong type argument: char-or-string-p, (link (:type "info" :path "emacs#Directory" :format plain :raw-link "info:emacs#Directory" :application nil ...))
This is de diagram:
PINNED: main
/ emacs
informática / lenguajes
|
Vemacs
wanderlust org-mode
-----------------------------------------------
-
This is some of the file contents:
* Variables Por Archivo o Directorio
- Por directorio :: [[info:emacs#Directory%20Variables][info:emacs#Directory Variables]]
- Por archivo :: [[info:emacs#Specifying%20File%20Variables][info:emacs#Specifying File Variables]]
[...]
- Arriba
- [[help::add-file-local-variable-prop-line]]
Sino le indicás cuál es el valor, agrega el actual.
- [[help::delete-file-local-variable-prop-line]]
[...]
* Brainchildren :brainchildren:
- [[brain:wanderlust][wanderlust]]
- [[brain:org-mode][org-mode]]
Hi! First of all, thank you for such an amazing package. I really appreciate the idea behind it in that it's future proof: plain text files, no database, it's easy to both integrate and remove the package from one's note taking workflow.
Concept maps are a great compromise between hierarchy and tags: they are more flexible than hierarchical structures and less verbose than tags (which are also hard to maintain). However, current filesystems are hierarchical by nature and any attempts to fit complex data to it fall apart inevitably. This is especially true for note taking (e.g. "should I put Cryptocurrencies to Finances folder or to Software Engineering one?"). I believe that this problem is solvable with your package. How hard would it be to generate folder structure based on org-brain
concept map and put notes' symlinks to it? Imagine I have a flat folder with a bunch of interlinked notes. We can create a topmost folder for a given parent node, create a symlink to the node's file inside it (e.g. index.org
), put all child nodes in there as well (or create a similar subfolder in case the child has its own childs). Jump thoughts can be put into a separate directory near child files and folders. This way it would be easy to explore the notes database using any file manager of choice and perform bulk changes on the files (or just copy them with cp -Lr
).
This is just an idea, nothing that I consider "must have". The only thing I'm missing now is some kind of review process for my notes, but I guess it's out of scope of the project.
There is a tutorial video on YouTube based on an out-of-date version of org-brain, and the tutorial will at first be quite confusing.
Nice concept. Works well and interesting.
Would be interesting to allow customization of :
Hi,
As discussed at https://www.reddit.com/r/emacs/comments/630j3q/orgbrain_now_on_melpa/dfreedh/
Rather than using many small Org files, I use a few large ones, so if I were to use org-brain, I would need it to work by linked nodes/headings instead of linked files.
Is this possible or feasible? I realize it might require a major refactoring. :)
I'm really happy that org-brain can handle spaces in titles, but there is a small issue in commands like org-brain-add-child
etc., where if I add a new child "Computer Games", then the tag "#+BRAIN_CHILDREN: Computer Games" (with space) is added. This means that two nodes are shown "Computer" and "Games" although only one file is created "Computer Games.org" (which is correct).
Manually changing "#+BRAIN_CHILDREN: Computer Games" to "#+BRAIN_CHILDREN: Computer%20 Games" fixes the display issue.
Could we have all org-brain-add-*
commands automatically replace spaces in all nodes so that the tags are correct?
Thank you very much!
hello,
i want to delete a linked resource, but cannot find the right command.
Is it possible?
Regards
Poul
org-brain-text
should work for file entries as well as headline entries.
I am quite excited about org-brain.
Why choose to spread a concept per file? I would want a concept per top-level headline, all in one file.
For three reasons:
Like org-brain-headline-to-file
, but the other way around.
I have some very long entry titles that are formulated as questions. Would it be possible to wrap the boxes in the visualize buffer so that the box is a certain width and it can have several lines of text? Of course visual-line-mode works for the whole buffer, but that breaks the concept map layout.
Edit: Related Reddit discussion: https://www.reddit.com/r/emacs/comments/4rxj4j/how_to_create_large_multiline_buttons_in_a_buffer/
Multiline buttons may not be possible.
Will it be possible to export all node/relationship into one/several tab-delimited file like:
Node.txt: {NodeID, NodeTitle, NodeResources(optional)}
Relationship.txt: {NodeID, ParentID, ChildID, FriendID}
The schema can change as long as structure and title information is preserved.
If that's possible, maybe I can explore to write a web-page based visualizer using D3.js (http://bl.ocks.org/robschmuecker/7880033).
It seems that org-brain is able to detect automatically the links inside the of the notes (which is a super cool feature). However, I like to use auto-fill
mode to wrap the lines at 79 characters, so sometimes I have line breaks in those links. For example, in this note:
I get this result when using org-brain-visualize
:
I'm not sure if this is the desired behavior for the resources, but I think it looks a bit off. Is this a problem my configuration or it is actually an org-brain
bug/feature?
only visualize part of the representation at a time, it's difficult to use in real life
the file format seems changed a lot? Is there any easy way to convert my old org-brain files to the new format?
It seems I can only get Friends to do auto-complete... nothing is ever allowed for Children/parents.
Am I doing something wrong, or does that not work?
Thanks!
When adding a new child or parent, the query could parse the input on say ";" to create more than one nodes in one go. E.g. activating adding new child and typing "Cat ; Dog ; Mouse" would add all three child nodes.
I am using org-brain through spacemacs, so I hope this is not spacemacs specific. 🙂
If I use org-brain-visualize
while editing a file, that is part of the "org-brain", the HELM-dialog shows me also emacs lock file (e.g. .#ideas
). Is there a way to prevent this? 😃
Hi,
Since changes for version 0.4, the org-brain-visualize doesn't autoload anymore. Can we fix that?
It's resulting in spacemacs fail to call org-brain-visualize via keyboard binding for the first time in a new session. I have to explicitly load org-brain.
Also, thanks for this neat package.
The Brain has one more type of links beyond child, parent - jump links. These link nodes that are related but not in a child/parent relation. E.g.: "hot" and "cold" are related in this way, or "Barack Obama" and "Michelle Obama".
It would be great to have this type too. (I think it could be done simly copying the "child" infrastructure and renaming it to e.g. "related", having :brainrelade: tags and headers. Nicer way would be to generalized the child functions to have a child/related switch)
Thanks!
It is now possible to use org-insert-link (bound to C-c C-l by default) in an org-brain entry, in order to link to children (brain-child:), parents (brain-parent:), and friends (brain-friend:).
org-brain-create-relationships-from-links should maybe be updated to take into account the new possible links
In readme,
(eval-after-load 'evil
(evil-set-initial-state 'org-brain-visualize-mode 'emacs))
But eval-after-load
is a function, its second argument will be run when we called.
Use with-eval-after-load
to instead which is a macro or change the second args into string, symbol or lambda expression.
At least, on my mac is it.
Instead of the file name, we should probably display the file entry's title when completing entries (when running M-x org-brain-visualize
for instance.
I've been trying to figure this out, but my lisp-fu is weak.
I use org-crypt
to encrypt my org files with GPG. This results in a file extension of .org.gpg.
I have org-brain-files-extension
set to "org.gpg".
If I create a new file via org-brain-open
then emacs does the right thing when I save the new file, and encrypts it. E.g., if I create a new brain file called 'index' then it is saved as 'index.org.gpg', and encrypted.
org-brain uses file-name-sans-extension
in org-brain-parth-entry-name
to remove filename extensions when listing them for org-brain-open
(and other places), but that function only removes the ".gpg" part of the path.
So when I use org-brain-open
after creating and saving some files, the file list looks like:
index.org
somethingelse.org
And so on. If I try to open one of those files than a filename of, for example, "index.org.org.gpg" is assigned to a new, empty, buffer.
I am having trouble getting the pointers in org-brain-visualize
to align properly. I have tried this with several versions of Emacs (macports binaries 25.2.1 as well as savannah emacs compiled from scratch). But same issue. Here are a couple of screenshots:
This one looks okay though:
and here is the init.el
file I'm using:
;;;----- Startup --------------------------------;
;;; Add src directories to path
(add-to-list 'load-path "~/.emacs.d/lisp")
;;; Add the melpa package archives
(require 'package)
(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
("marmalade" . "https://marmalade-repo.org/packages/")
("melpa" . "https://melpa.org/packages/")))
;;; Add packages to load-path
(package-initialize)
;;;----- Org-mode -------------------------------;
;;; Add upgraded org-mode to load path
(add-to-list 'load-path "~/.emacs.d/lisp/org-9.0.6/lisp")
(add-to-list 'load-path "~/.emacs.d/lisp/org-9.0.6/contrib/lisp" t)
;;; Set default org-directory
(setq org-directory "~/org")
;;; Activate org-mode
(require 'org)
;;;----- Org-Brain ----------------------;
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages (quote (org-brain))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
I must first say that I think org-brain is potentially just what I need. I have a little bash script that captures the text I highlight to a file called capture.org . My plan was then to refile the captured stuff into org-brain but it isn't obvious how it should be done. I found somewhere that it could be done with some elisp but that it would be slow. My question is: is there a way to refile headlines into org-brain using the org-brain interface?
Due to the fact that the system can become quite slow with an high nuber of nodes I usually do not give an ID to every header in an org file. Anyway It would be usefull to be able to see these headers in the "text" field of their parent (which has got an Id) in org brain visualize.
it would be great to have a function for renaming an org-brain file which renames the file and changes all Brainchildrens accordingly.
missing (interactive) ?
It would be great to be able to export org-brain relationship properties as links in HTML, PDF, or ODT exports. Maybe the related links could be listed under subheadings like "related" or "see also," depending on the kind of relationship.
Another option for exporting that could be specified is to convert them to #+INCLUDE links before exporting, which would include the body of the entry being linked instead of just a link.
Hi :)
thanks for the great package 👍
In my *Messages*
buffer I see:
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
Loading /Users/me/Dropbox/org-brain/.org-brain-data.el (source)...done
Mark set [4 times]
and keeps printing. It's pretty annoying since it writes it to minibuffer and when I use it (minibuffer) it is getting override with one of that message above and I have to C-g
in order to continue my work with minibuffer. It happens once per 3-5 seconds. I can't understand what is the trigger. There is trigger for sure since it doesn't happen initially...
What I've found is org-brain--vis-pinned
function is trying to load data file. Sure I can pass another parameter to load
function to avoid Loading...done
message but it doesn't seems like a solution.
It would be great to know why is this loop is running... moreover I don't know how to remove Mark set
message which is triggered by one of save-excursion
calls.
Could you please help me understand and fix this issue?
(please forgive me, as I'm not a heavy elisp'er)
Looking at the code, it appears to me that when you are creating a new child/whatever node it is being written to the buffer directly without using any of the org-mode hooks/functionality.
I have an org-mode hook that writes a date property when I capture an item. I would love to somehow have this run when I create a new child or whatever.
i.e.:
(add-hook 'org-capture-before-finalize-hook 'add-property-with-date-captured)
I'm not sure if there is already a way to do this that I'm not seeing, or maybe there would be a way for org-brain to create a node via org instead of manually?
Or something else :-)
Thank you for your work on this project. I am hopeful that we can improve its
performance. I am retrofitting, so to speak, my collection of org files into the
org-brain way of doing things. Running org-brain-visualize on a small file with
only 3 subtrees, each small, takes quite a long time. [Aside: I have
approximately 700 org files in my org directory.] I ran M-x elp-instrument-package RET org-brain and then M-x elp-results and discovered the following
Function name | Call Count | Elapsed Time | Average Time |
---|---|---|---|
org-brain-visualize | 1 | 33.7054 | 33.7054 |
org-brain-parents | 1 | 18.14708 | 18.14708 |
org-brain-keywords | 397 | 15.416008000 | 0.0388312544 |
org-brain-pins | 1 | 14.345758 | 14.345758 |
org-brain-title | 25 | 1.1664720000 | 0.0466588800 |
org-brain-insert-visualize-button | 12 | 0.5735349999 | 0.0477945833 |
org-brain-files | 3 | 0.2527109999 | 0.0842369999 |
org-brain-path-entry-name | 1116 | 0.0291099999 | 2.608...e-05 |
org-brain-entry-path | 401 | 0.0151009999 | 3.765...e-05 |
org-brain-resources | 1 | 0.014433 | 0.014433 |
org-brain-children | 1 | 0.010491 | 0.010491 |
org-brain-visualize-mode | 1 | 0.00368 | 0.00368 |
org-brain-insert-resource-button | 2 | 0.000214 | 0.000107 |
which shows, I think, that org-brain-parents, org-brain-children, and org-brain-pins are the
bottlenecks.
I forked the project and implemented/committed caching for org-brain files, children, and parents resulting in a 2x speed up. I'll try to get a pull request together soon, otherwise please just port the changes over. This update should help everyone, especially people with a large org file repo.
After the cache implementation, and a cache miss which initiates building of the cache, we have much better numbers
Function name | Call Count | Elapsed Time | Average Time |
---|---|---|---|
org-brain-visualize | 1 | 15.835363 | 15.835363 |
org-brain-keywords | 401 | 15.787954999 | 0.0393714588 |
org-brain-pins | 1 | 14.634235 | 14.634235 |
org-brain-title | 27 | 1.1756829999 | 0.0435438148 |
org-brain-insert-visualize-button | 13 | 0.5837049999 | 0.0449003846 |
org-brain-entry-path | 404 | 0.0253169999 | 6.266...e-05 |
org-brain-files | 1 | 0.020009 | 0.020009 |
org-brain-path-entry-name | 374 | 0.0194809999 | 5.208...e-05 |
org-brain-resources | 1 | 0.01172 | 0.01172 |
org-brain-visualize-mode | 1 | 0.001636 | 0.001636 |
org-brain-insert-resource-button | 2 | 0.000133 | 6.65e-05 |
org-brain-children | 1 | 2e-06 | 2e-06 |
org-brain-parents | 1 | 1e-06 | 1e-06 |
Now I've added the ability to pin through the org-brain-visualize interface,
bound to "P". Doing so allows consistent caching and validation of
org-brain-pins, which I have also now implemented. We now have an enormous
increase in speed:
Function name | Call Count | Elapsed Time | Average Time |
---|---|---|---|
org-brain-visualize | 1 | 1.018994 | 1.018994 |
org-brain-title | 28 | 0.8870419999 | 0.0316800714 |
org-brain-keywords | 28 | 0.8867950000 | 0.0316712500 |
org-brain-insert-visualize-button | 14 | 0.3781 | 0.0270071428 |
org-brain-resources | 1 | 0.008334 | 0.008334 |
org-brain-entry-path | 31 | 0.0016150000 | 5.209...e-05 |
org-brain-visualize-mode | 1 | 0.001558 | 0.001558 |
org-brain-insert-resource-button | 2 | 4.9e-05 | 2.45e-05 |
org-brain-parents | 1 | 3e-06 | 3e-06 |
org-brain-children | 1 | 3e-06 | 3e-06 |
org-brain-pins | 1 | 2e-06 | 2e-06 |
I think this is getting quite usable.
Cache invalidation happens at the correct times. If you make changes to pins or
brainchildren outside the org-brain-visualize interface, I've added M-x
org-brain-invalidate-all-caches. You shouldn't need to use that if you use the
org-brain-visualize interface/mode/keybindings though.
Hi
Thanks for sharing org-brain. It is a fantastic addition to org-mode that I use on almost daily basis.
Installed the latest version from Melpa and started to work on a org-brain file with a couple of child entries.
All org files are stored in ~/org/brain/
First time I created the org-brain file using the shortcut 'o' (org-brain-goto-current) opened the file in the split screen with the ID information.
After closing emacs and trying it again it with org-brain-visualize and trying to edit an entry (with shortcut 'o') it opened an empty file in the split screen.
When I open the created org files in emacs buffer first (so not using org-brain to select them) org-brain-goto-current does open the files with ID info.
So there is a workaround by manually opening all org files in emacs, but I assume org-brain should be able to find and open the child files with IDs automatically.
Using org-brain-update-id-locations resulted in "10 unique files scanned for IDs" but didn't solve the problem.
Include a command to rename file entries, so that the file still works as an entry across org-brain.
I'd like inserting brain:
links to automatically create a parent -> child relation a la backlinking ([where link is inserted] -> [where link points]).
Initially I thought this was the work of org-brain-insert-link.
But I can see how this would be unwanted behavior.
Is the right thing to create a function org-brain-insert-childlink
?
Is it reasonable to use buffer-file-name
and org-brain-new-child
?
It seems like it will be straightforward forward but i'm not yet up and running with org-brain
or elisp
and not sure where the dragons are. Any hints?
the original org file:
`#+BRAIN_CHILDREN: 9f9b95a6-439f-4332-8e9a-02c789a9b2ef
Test
a
:PROPERTIES:
:ID: 9f9b95a6-439f-4332-8e9a-02c789a9b2ef
:BRAIN_PARENTS: test
:END:
`
after visualize:
`PINNED:
test
a a `
directory-files-recursively: Opening directory: No such file or directory, c:/msys32/home/feng/org/brain
Hello.When I add the config which auto install 'org-brain' by the function 'package-install',my Emacs App can start up correct. But the Travis CI tell me 'The log length has exceeded the limit of 4 MB (this usually means that the test suite is raising the same exception over and over).'
Can you help me, thanks.
The log page: https://travis-ci.org/emuio/emacs.d/jobs/222531880
I accidentally made a note a friend of itself and noticed you could do the same thing with adding children and parents. It would be helpful to prevent the user from making these relationships.
need keybindings like delete child
or delete parent
After I activate brain-visualize, after some time (not immediately) it starts to steal focus from any other buffer after some time. I.e. no matter in which buffer am I, brain-visualize opens up and takes the point away from its current focus and puts it onto the central topic in the map.
Killing the visualize buffer doesn't help - it still returns and continues stealing focus. The only way out is to restart emacs (and not run brain-visualize)
I have no idea what could be the reason here. Do you have an idea what could be the issue here?
First of all, I really like the concept of org-brain very much, it is a great idea and I hope it will continue to evolve.
I have installed org-mode in spacemacs, however org-brain-visualize does not seem to work,
Symbol's function definition is void: aa2u
Creating a link seems to work at first, however, after a restart the link does not anymore, and it wants to create a new heading:
No match - create this as a new heading?
From your readme, the following is also not accepted in .spacemacs (emacs complains). It only works by inserting these lines into the brackets of (defun org-brain/init-org-brain () )
(use-package org-brain :ensure t
:init
(setq org-brain-path "directory/path/where-i-want-org-brain")
;; For Evil users
(eval-after-load 'evil
(evil-set-initial-state 'org-brain-visualize-mode 'emacs))
:config
(setq org-id-track-globally t)
(setq org-id-locations-file "~/.emacs.d/.org-id-locations")
(push '("b" "Brain" plain (function org-brain-goto-end)
"* %i%?" :empty-lines 1)
org-capture-templates)
(setq org-brain-visualize-default-choices 'all)
(setq org-brain-title-max-length 12))
May be, it was not installed correctly? ( dotspacemacs-additional-packages
in .spacemacs)
I rebind many keys org-brain in ryo (as you can see I'm a fan of your work :)).
Everything works except org-brain-visualize-back
. Here is an example what I do
(ryo-modal-major-mode-keys
'org-brain-visualize-mode
("e" org-brain-new-child)
("a" org-brain-visualize-back))
org-brain-new-child
works but not org-brain-visualize-back
(unknown function nil...)
Thank you!
After calling org-brain-visualize a new window opens with the found item. This window is deactivated by default. It should be activated.
When you invoke wdired
in a dired buffer, you can edit the displayed filenames directly in the buffer, and they will be renamed upon saving. Would be cool if org-brain could do the same.
I really would like to use org-brain as a mind-mapping tool for brainstorming (I believe this is crucial for all the people using the GTD system which are a consistent part of org-mode users) but the portion of the map which is currently visualized is too small (in my opinion) for this use... Is it possible to improve the visualization in order to be similar to other mind-mapping softwares like freemind...?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.