FreeMind
- フリーのマインドマップ作成ソフト  -

訳注)一部に未訳箇所があります。[Rev.0.1]

FreeMind

ホームページ

ファイル操作

新規マップ

Ctrl+N

マップを開く

Ctrl+O

保存

Ctrl+S

名前を付けて保存

Ctrl+Shift+S

印刷

Ctrl+P

閉じる

Ctrl+W

終了

Ctrl+Q

前のマップへ

Alt+Shift+LEFT

次のマップへ

Alt+Shift+RIGHT

HTMLにエクスポート

Ctrl+E

枝をHTMLにエクスポート

Ctrl+H

枝を新規ファイルにエクスポート

Alt+Shift+A

履歴の最新ファイルを開く

Ctrl+Shift+W

編集

Find        - Ctrl+F

Find next   - Ctrl+G

Cut         - Ctrl+X

Copy        - Ctrl+C

Copy single - Ctrl+Shift+C

Paste       - Ctrl+V

MindMap mode - Alt+1

Browse mode  - Alt+2

File mode    - Alt+3

ノード書式

Italicize                 - Ctrl+I

Bold                      - Ctrl+B

Cloud                     - Ctrl+Shift+B

Change node color         - Alt+Shift+F

Blend node color          - Alt+Shift+B

Change node edge color    - Alt+Shift+E

Increase node font size   - Ctrl+'+'

decrease node font size   - Ctrl+'-'

ナビゲーション

Go to root  - ESCAPEMove up     - UPMove down   - DOWNMove left   - LEFTMove right  - RIGHTFollow link - Ctrl+ENTERZoom out    - Alt+UPZoom in     - Alt+DOWN

ノードの移動

Move node up              - Ctrl+UPMove node down            - Ctrl+DOWNMove node left            - Ctrl+LEFTMove node right           - Ctrl+RIGHT

ノードの追加

Add sibling node   - ENTERAdd child node     - INSERTAdd sibling before - Shift+ENTERAdd new parent     - Shift+INSERT

ノードの編集

Edit selected node        - F2Edit long node            - Alt+ENTERJoin nodes                - Ctrl+JToggle folded             - SPACEToggle children folded    - Ctrl+SPACESet link by filechooser   - Ctrl+Shift+KSet link by text entry    - Ctrl+KSet image by filechooser  - Alt+K

ウェブサイトへのFreeMind

アプレットのインストール

訳注)

FreeMind 0.9.0ではインストール済みのため、訳出しません。

FreeMindアプレットの使い方

バージョン0.6.5における

インターフェイスの変更点

訳注)FreeMind 0.9.0より古いバージョンの情報については訳出しません。

訳注)FreeMind 0.9.0より古いバージョンの情報のため訳出しません。

訳注)FreeMind 0.8.0以前の情報のため、訳出しません。最新の日本語翻訳者は、Googleコード「FreeMind日本語化 <http://code.google.com/p/freemind-ja-localization/>」を参照。

Ctrl + Fで検索。

Ctrl + G で次を検索。

マップ全体を検索するには、Escを押してから検索。

→でノードを展開。

改行つきの短い複数行ノード

Line,

and second,

and yet another will do,

so what do you think of that?

リッチテキストノード

アプリケーション

楽しさ

FreeMind

L*tus

このノードにはノートが付いています。「表示」メニューで画面下部に表示して使います。ノートは完全に隠れているので、マインドマップに使えるスペースを減らすことができます。長文の入力にはマインドマップをきれいにしたままテキストを入力する最も良い方法です。

訳注)日本語環境では動作しません。

訳注)日本語環境では動作しません。

メールアドレスにリンクするには、次のように設定します。

mailto:info@freemind.asia

メールアドレスに件名をつけてリンクするには、次のように設定します。

mailto:info@freemind.asia?subject=FreeMindのヘルプドキュメントについて

訳注)FreeMind 0.9.0日本語環境では動作しません。2つのノードを選んでCtrl+Lをお薦めします。

A new search and replace dialog enables to quickly search for text   fragments and to replace them.

Its functionality includes

  • Find as you type: when you start to specify your search text, it   starts to reduce the amount of displayed nodes. It searches for the   text inside the nodes text only (attached notes are currently not   searched).
  • Sortable node list: the main table is sortable by each criterion. Even   by Icon. Thus, it is easy to find all nodes with attached note for   example. Or to sort them by creation date to get the latest changes to   the map!
  • Cursor support: moving down moves from the search field to the replace   field and then into the list.
  • Node Path display: if you select a line, its path from the root of the   map is displayed below.
  • Direct access: if you press enter inside the table, the mind map   displays the selected node (menu item "select" and "select and close").
  • Replace: it is possible to replace all occurences or only the nodes   belonging to the selected lines.
  • Export: new striking possibility. Select some nodes and export them to   a new mindmap. This makes it easy to generate a todo list from a   hierachical mind map. For example, if you mark every todo item with   the bell sign, then simply sort this list by icon and mark those   containing the bell. Then press "export" and you get all these nodes   as single nodes in a new map.

訳注)Mac OS X 10.6 Leopardでも動作します。

訳注)この機能を使うには、メモ帳(ノートパッド)のようなHTML機能のないテキストエディタからペーストする必要があります。

訳注)「HTMLをペーストするとプレーンテキストとしてペーストされます。さらに、HTML中のリンクは、リンクつきの新しい子ノードとしてペーストされます。」

という意味ですが、FreeMind 0.9.0でHTMLをペーストするとHTMLテキストでペーストされるため、この説明は古いFreeMindのものかもしれません。

訳注)FreeMind 0.9.0では、このようにペーストされないため、訳出しません。

カーソルを上下左右に移動するには、矢印キー。

最初の兄ノードに移動するには、PageUp。

訳注)最初の兄ノードを選んでいる場合は、親の階層の最初の兄ノードに移動します。

最後の弟ノードに移動するには、PageDown。

訳注)最後の弟ノードを選んでいる場合は、親の階層の最後の弟ノードに移動します。

ルートノードに移動するには、Escape。

Internet Explorerのお気に入りをFreeMindにインポートするには、「ファイル」メニューの「インポート」の「エクスプローラのお気に入り」。「お気に入り」を保存したフォルダへのパスを入力する画面が表示されたら、ディスク上の「お気に入り」という名前のフォルダを選択します。Windows 2000ではパスは「C:\Documents and Settings\<ユーザー名>\お気に入り」です。

WordやOutlookとの連携

メールリンクに件名を含めることもできます。

HTMLによるノード内の

リッチテキスト利用

HTML Example

There are several items:

  • Item one
  • Item two

And we have boldface or italics. Underlined a strike-through as well. We can have table:

Cell1

Cell2

Cell3

Cell4.

?e can have various foreground colors.

他者との同時編集時の

ファイルロック機能

バージョン0.9.0の新機能

The new editor supports text formatting in nodes and notes (the little window at the bottom of the frame).

It is stored as (X)HTML inside the nodes and can be thus exported to HTML very efficiently.

The notes do now directly belong to the main window. Even if it is not visible a tooltip indicates the content.

Using Filters the current mindmap can be reduced to nodes satisfying certain criteria. For example, if you only want to see every node containing "TODO", then you have to press on the filter symbol (the funnel beside the zoom box), the filter toolbar appears, choose "edit" and add the condition that the node content contains "TODO". Then select the filter in the filter toolbar. Now, only the filtered nodes and its ancestors are displayed unless you choose "No filtering" in the toolbar.

Using the settings "Show ancestors" and "Show descendants" you can influence the apperance of the parent and child nodes that are connected with the nodes being filtered.

There are many different criteria filters can be based on such as a set of selected nodes, a specific icon and some attributes.

Attributes are additional meta information in the form of text pairs attached to nodes.

Thus, criteria like Context->Home or Context->Job can be expressed. Later a filter limits the display only to certain contexts.

Moreover, Groovy scripts are currently stored within attributes.

It is possible to see all currently open maps at a glance.

This kind of navigation was already published in 0.8.0. But now, you can use other directions as well.

It is now possible to move nodes left and right. They come closer to root or move as new subnodes of the node above. The nodes can even change the side of root with this navigation. You can use it by the control+left and control+right keys.

Patterns are very useful helpers to get a consistent layout of your map. You can perform various format changes with one keystroke.

The pattern editor is opened using F11 and presents all currently defined patterns.

The following basic actions are available:

  • You can move the pattern(s) up&down using drag and drop.
  • You can add a new pattern via the action menu.
  • You can create a pattern from the selected nodes. If only one node is selected, its format changes in comparison to an unformatted node build a new pattern. If you have selected several nodes, the format changes that are common to all selected nodes are gathered in a new pattern. For example, if you have a bold node with yellow background and an italic node with the same background color, the newly created pattern would consist of the yellow background change.
  • You can apply patterns to the currently selected nodes and finally,
  • you can remove patterns.

The patterns are stored in the patterns.xml file in your <user directory>/.freemind/ directory and are reloaded the next time you use freemind. The patterns are not part of the maps.

Inside the patterns, there is a left and right hand side. On the right hand side, the format changes are displayed. On the left side there is a plus or minus or empty box. They mean the following:

  • Plus: indicates that the format on the left is applied.
  • Minus: forces the corresponding format to be reverted to the standard value.
  • Empty: No change.

A novelity is the possibility to associate a script to a pattern. Thus, patterns can now change much more than the pure format changes. For example, you can put macros inside the patterns that change the selected or more nodes at once. This functionality can't be overestimated as it opens complete new automatism capabilities to FreeMind.

Inside the preferences there is the possibility to change the layout of the automatic layout functionality.

Thus, you can change the color and appearance of each level. For example, the used color green is difficult to be read with a beamer. Now, you can change the color to dark green.

Observe, that changes to the specification doesn't change the layout of the map directly. You have to close and reopen the map, first.

Currently, these format specifications are stored in the preferences of the current user and not inside the map. Thus, on a different system, the automatic layout of a map may look different. This will be changed in the next release of FreeMind.

For advanced users it is even possible to change the number of levels. Change something in the preferences of the automatic layout. Now, the format specification is stored in the user preferences. Open the file <user_directory>/.freemind/auto.properties and search for the line automaticLayout_level, and duplicate the last <pattern name=...>...</pattern> entry. Now, you have one level more.

A new search and replace dialog enables to quickly search for text fragments and to replace them.

Its functionality includes

  • Find as you type: when you start to specify your search text, it starts to reduce the amount of displayed nodes. It searches for the text inside the nodes text only (attached notes are currently not searched).
  • Sortable node list: the main table is sortable by each criterion. Even by Icon. Thus, it is easy to find all nodes with attached note for example. Or to sort them by creation date to get the latest changes to the map!
  • Cursor support: moving down moves from the search field to the replace field and then into the list.
  • Node Path display: if you select a line, its path from the root of the map is displayed below.
  • Direct access: if you press enter inside the table, the mind map displays the selected node (menu item "select" and "select and close").
  • Replace: it is possible to replace all occurences or only the nodes belonging to the selected lines.
  • Export: new striking possibility. Select some nodes and export them to a new mindmap. This makes it easy to generate a todo list from a hierachical mind map. For example, if you mark every todo item with the bell sign, then simply sort this list by icon and mark those containing the bell. Then press "export" and you get all these nodes as single nodes in a new map.

Some key strokes makes the handling of icons even more easier. If you hold the SHIFT key while pressing on an icon on the left toolbar, all other icons are removed and this icon is the only one after the action. This is for example useful for changing the priority of a node.

Another feature comes with pressing CTRL while choosing an icon. It causes this type of icon to be removed one by one. Suppose you have a node with the icons (1)(2)(1)(3) and you press CTRL-1 you get (1)(2)(3). This is useful as with the normal remove methods, only the last icon can be removed.

Flash and Java applet export can be used to bring mindmaps into the internet.

The difference between the two is, that the Java applet looks exactly like the map on the screen, but needs longer to be loaded.

The flash application is very fast and has some different features built in. But it has a different look and feel.

FreeMind can now be scripted by using Groovy scripts. Groovy is a very easy to use scripting language best integrating into FreeMind.

There are two possibilities to use scripts:

  1. Choose the script editor to easily add, change and test your scripts. Technically, scripts are attached to a node via an attribute starting with "script" (like "script1") that contains the script. Every time you choose "Evaluate" from the tools menu, all scripts attached to nodes are executed.
  2. Create or change a pattern and press the script button. The script editor appears and your script will be associated to a pattern. Every time you apply the pattern to some nodes, the script is executed for that nodes automatically. Thus, you can have the scripts with keyboard shortcuts as the patterns are accessible via shortcuts.

Every script is at evaluation time started with two predefined java objects coming from the map:

  • node is the current node. It is a freemind.modes.MindMapNode. This node can be used to retrieve information about the contents, its children or its formatting. Don't use the setter to change the node. Use the following instead:
  • c is the current controller. It is a freemind.modes.mindmapmode.MindMapController. This controller should     be used to change information. For example, if you want to change the nodes text or if you want to add children. The methods that can be used are sumarized in freemind.modes.mindmapmode.actions.MindMapActions.

There are two automatisms regarding the effect of a script:

  1. If a script starts with "=", the result of the script is taken to be the new nodes text. Example script1: =17+4. If executed, the node the script is associated to will be changed to 21.
  2. If a script starts with letters (digits and '_') only and then a "=" sign, like "sum=17+4", the result is taken to be a (possibly new) attribute named "sum" in this case with the content 21.

For more examples consult our little scripting guide below or our web pages.

A last word on security: before scripts is evaluated for the first time in FreeMind, the user is asked whether or not he allows it. The answer can be stored for every script but observe that a malicious script is able to perform every action on your computer that your users rights allow up to delete all files or send them to pirates.ru. This said, be careful and don't allow scripts when you don't know that the author is trusted. Finally, scripts are never evaluated automatically in FreeMind for these reasons. Thus, you can open a map without problems and have a look at the scripts it contains.

If your scripts want to change some map data (which they commonly want to) they should rely on the methods provided by the MindMapController c.

These methods are summarized and partially documented in the class "MindMapActions":

http://freemind.cvs.sourceforge.net/freemind/freemind/freemind/modes/mindmapmode/actions/MindMapActions.java?view=log&pathrev=fm_060405_integration

The listeners mentioned below (ie. NodeSelectionListener and NodeLifetimeListener) can be registered and found in the class "ModeController" (also c):

http://freemind.cvs.sourceforge.net/freemind/freemind/freemind/modes/ModeController.java?view=log&pathrev=fm_060405_integration

Here we present some snippets of useful Groovy code that can be used as parts of your scripts. More scripts can be found on our web sites.

  • Change the node text:
    =17+4
    (Explanation: if a script starts with "=", the result of the script is taken as the new nodes text.)
  • Change an attributes value:
    attribute_name=17+4
    (Explanation: if a script starts with a name and then directly a "=" sign, its result is associated to this attribute which is created if not already present.)
  • Read and change the nodes text:
    c.setNodeText(node, node.getText() + "_CHANGED");
  • Read an attribute
    def value = node.getAttribute("key"); // value is of type String.

  • Create or change attributes: the following method checks whether or not an attribute with the same key exists and replaces it. Otherwise a new attribute is created and added.
    c.editAttribute(node, "key", "new value");
  • Remove an attribute by name:
    c.editAttribute(node, "key", null);
    This method returns the former index of the attribute, or -1 if the key wasn't found.
  • Traverse all children
    def it = node.childrenUnfolded();
    while(it.hasNext()) {
    def child = it.next();
    }
  • Traverse all children and its children recursively. The following examples prints the content of every node including its childs
    def stack = new java.util.Stack();
    stack.push(node);
    while(stack.size()>0) {
    def current =stack.pop();
    print current.getShortText(c) + ", ";
    stack.addAll(current.getChildren());
    }


  • Real world example: nodes may have an attribute "work" that specifies the work needed for the specific work package (e.g. in days). This script computes the sum of all work packages such that each node gets an attribute "sum" containing the amount of work needed for all descendants. This script, if executed via Alt+F8, automatically applies to the root of the map. But, every time, you change the values, you have to reexecute this script.

    def calcWork(child) {
    	def sum = 0;
    	def it = child.childrenUnfolded(); 
    	while(it.hasNext()) { 
    		def child2 = it.next(); 
    		sum += calcWork(child2);
    		def w = child2.getAttribute("work");
    		if(w != null)
    			sum += Integer.parseInt( w);
    	}
    	if(sum>0)
    		c.editAttribute(child, "sum", (String) sum);
    	return sum;
    }
    
    calcWork(c.getRootNode());
  • A very advanced example: the last script is integrated into a listener that detects node changes, so the sums are always recreated when a node is changed. This script introduces a new element in scripting: the "cookies". It is a usual HashMap where scripts can store values that they need the next time, they are executed. For every map, there is a new cookie map, such that cookies are map local. Moreover, they are not stored persistently and are lost after termination of FreeMind or after closing a map. In this example, they serve as a static variable in which it is stored whether or not the script was already executed and which listener was used in order to deregister the old one first.
    class MyNodeListener implements freemind.modes.ModeController.NodeSelectionListener {
    	freemind.modes.mindmapmode.MindMapController c;
            MyNodeListener(freemind.modes.mindmapmode.MindMapController con) {
    		this.c = con;
    		}
    
    		/** 
             * Sent, if a node is changed
             * */
            void onUpdateNodeHook(freemind.modes.MindMapNode node){		
    			calcWork(c.getRootNode());
    		};
    
            /** Is sent when a node is selected.
             */
            void onSelectHook(freemind.view.mindmapview.NodeView node){};
            /**
             * Is sent when a node is deselected.
             */
            void onDeselectHook(freemind.view.mindmapview.NodeView node){};
    
    		/**
    		 * Is issued before a node is saved (eg. to save its notes, too, even if the notes is currently edited).
    		 */
    		void onSaveNode(freemind.modes.MindMapNode node){};
    
    def calcWork(child) {
    	def sum = 0;
    	def it = child.childrenUnfolded(); 
    	while(it.hasNext()) { 
    		def child2 = it.next(); 
    		sum += calcWork(child2);
    		def w = child2.getAttribute("work");
    		if(w != null)
    			sum += Integer.parseInt( w);
    	}
    	if(sum>0)
    		c.editAttribute(child, "sum", (String) sum);
    	return sum;
    }
    
    }
    
    def cookieKey = "work_update_listener";
    if(cookies.get(cookieKey) != null) {
    	c.deregisterNodeSelectionListener(cookies.get(cookieKey));
    }
    def newListener = new MyNodeListener(c);
    cookies.put(cookieKey, newListener);
    c.registerNodeSelectionListener(newListener);
          
  • A sorting example: Currently we provide a function that sorts all children by name, but if you want to sort them by their icons for example, you can use the following script (or change it, if you have different sorting criteria):
    import java.awt.datatransfer.Transferable;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.TreeSet;
    import java.util.Vector;
    import freemind.modes.MindMapNode;
    
    	class IconComparator implements java.util.Comparator {
    			int compare(java.lang.Object pArg0, java.lang.Object pArg1) {
    				if (pArg0 instanceof MindMapNode) {
    					MindMapNode node1 = (MindMapNode) pArg0;
    					if (pArg1 instanceof MindMapNode) {
    						MindMapNode node2 = (MindMapNode) pArg1;
    						String iconText1 = getIconText(node1);
    						String iconText2 = getIconText(node2);
    						//print "comparing" + iconText1 + " with " + iconText2 + "\n";
    						return iconText1.compareToIgnoreCase(iconText2);
    					}
    				}
    				return 0;
    			}
    		def getIconText(MindMapNode n) {
    			if(n.getIcons() == null || n.getIcons().size()==0) 
    				return "";
    			def retString = "";
    			def it = n.getIcons().iterator();
    			while(it.hasNext()) {
    				retString +=it.next().getName()+", ";
    			}
    			return retString;
    		}
    	}
    
    
    		// we want to sort the children of the node:
    	 	Vector children = new Vector();
    		// put in all children of the node
    		children.addAll(node.getChildren());
    		// sort them
    		java.util.Collections.sort(children, new IconComparator());
    		//print "The set has " + children.size() + " entries\n";
    		// now, as it is sorted. we cut the children
    		def it2 = children.iterator();
    		while (it2.hasNext()) {
    			MindMapNode child = (MindMapNode) it2.next();
    			Vector childList = new Vector();
    			childList.add(child);
    			Transferable cut = c.cut(childList);
    			// paste directly again causes that the node is added as the last one.
    			c.paste(cut, node);
    		}
    		c.select(c.getNodeView(node));
  • A presentation script. Everytime you select a node, all other nodes are closed and this node is expanded by one. Just give it a try..
    class MyNodeListener implements freemind.modes.ModeController.NodeSelectionListener {
    	freemind.modes.mindmapmode.MindMapController c;
            MyNodeListener(freemind.modes.mindmapmode.MindMapController con) {
    		this.c = con;
    		}
    
    		/** 
             * Sent, if a node is changed
             * */
            void onUpdateNodeHook(freemind.modes.MindMapNode node){		
    		};
    
            /** Is sent when a node is selected.
             */
            void onSelectHook(freemind.view.mindmapview.NodeView node){
    			if(c.getSelecteds().size()>1)
    				return;
    			// unfold node:
    			c.setFolded(node.getModel(), false);
    			// fold every child:
                    def it2 = node.getModel().childrenUnfolded().iterator();
                    while (it2.hasNext()) {
                            def child = it2.next();
    				  c.setFolded(child, true);
    			}
    			// close everything else:
    			foldEverybody(node.getModel().getParent(),node.getModel());
    		};
            /**
             * Is sent when a node is deselected.
             */
            void onDeselectHook(freemind.view.mindmapview.NodeView node){};
    
    		/**
    		 * Is issued before a node is saved (eg. to save its notes, too, even if the notes is currently edited).
    		 */
    		void onSaveNode(freemind.modes.MindMapNode node){};
    def foldEverybody(child, exception) {
    		if(child == null || child.isRoot())
    			return;
            def it = child.childrenUnfolded();
            while(it.hasNext()) {
                    def child2 = it.next();
    			if(child2 != exception) {
    				c.setFolded(child2, true);
    			}
            }
    	if(!child.getParent().isRoot())
    		foldEverybody(child.getParent(), exception.getParent());
    }
    
    
    }
    
    def cookieKey = "presentation_listener";
    if(cookies.get(cookieKey) != null) {
    	c.deregisterNodeSelectionListener(cookies.get(cookieKey));
    }
    def newListener = new MyNodeListener(c);
    cookies.put(cookieKey, newListener);
    c.registerNodeSelectionListener(newListener);

Once, you've created or found some interesting scripts, you probably want to get a FreeMind menu item with an own shortcut to execute the script.

To do this, save the script to a file and edit "ScriptingEngine.xml" inside the FreeMind script directory inside your installation.

You'll find a template for a script action that is commented out (ie. surrounded by <!-- ... -->). Uncomment the template and fill out the following bold places:

      <plugin_action
      name="GroovyGroovy"
      documentation="this is my first installed groovy script."
      label="plugins/GroovyScript1"
      base="freemind.extensions.ModeControllerHookAdapter"
      class_name="plugins.script.ScriptingEngine">
      <plugin_mode class_name="freemind.modes.mindmapmode"/>
      <plugin_menu location="menu_bar/extras/first/scripting/groovy1"/>
      <plugin_property name="ScriptLocation" value="/home/foltin/test.groovy"/>
      </plugin_action>
    

The most important change is the location of the script. Moreover, if you have several scripts you want to install, the labels and the menu_location must be unique.

If you now restart FreeMind you get a new menu item (in this example in the "Extras" menu) that carries out your script. Observe, that the "node" variable points to the root node.

If you want to have a keyboard short cut for the new script, you have to add the bold line into the entry in ScriptingEngine.xml like:

      <plugin_action
      name="GroovyGroovy"
      documentation="this is my first installed groovy script."
      label="plugins/GroovyScript1"
      key_stroke="control shift M" 
      base="freemind.extensions.ModeControllerHookAdapter"
      class_name="plugins.script.ScriptingEngine">
      <plugin_mode class_name="freemind.modes.mindmapmode"/>
      <plugin_menu location="menu_bar/extras/first/scripting/groovy1"/>
      <plugin_property name="ScriptLocation" value="/home/foltin/test.groovy"/>
      </plugin_action>