public static void moveTextLeftText(OutlinerCellRendererImpl textArea, JoeTree tree, OutlineLayoutManager layout) {
		Node currentNode = textArea.node;
		
		int start = textArea.getSelectionStart();
		int end = textArea.getSelectionEnd();
		String selected_text = textArea.getSelectedText();
		
		// Abort if no selection
		if (start == end) {
			return;
		}
		
		if (start == 0) {
			// Get Prev Node
			Node prevNode = tree.getPrevNode(currentNode);
			if (prevNode == null) {
				tree.setCursorPosition(tree.getCursorPosition()); // Makes sure we reset the mark
				return;
			}
		
			CompoundUndoableEdit undoable = new CompoundUndoableEdit(tree);
			
			// Cut text from current node
			String oldText = textArea.getText();
			String newText = oldText.substring(end, textArea.getText().length());
			
			UndoableEdit undoable_edit = new UndoableEdit(currentNode, oldText, newText, start, start, end, start);
			undoable.addPrimitive(undoable_edit);
			
			// Insert text into next node
			oldText = prevNode.getValue();
			newText = oldText + selected_text;
			
			UndoableEdit undoable_edit2 = new UndoableEdit(prevNode, oldText, newText, oldText.length(), oldText.length(), oldText.length(), newText.length());
			undoable.addPrimitive(undoable_edit2);

			// Add Undoable
			tree.getDocument().getUndoQueue().add(undoable);
			
			undoable.redo();
		} else {
			// Cut text and move one place to the right
			String oldText = textArea.getText();
			String newText = oldText.substring(0,start - 1) + selected_text + oldText.substring(start - 1, start) + oldText.substring(end,oldText.length());
			
			UndoableEdit undoable = new UndoableEdit(currentNode, oldText, newText, start, start - 1, end, end - 1);
			tree.getDocument().getUndoQueue().add(undoable);
			
			// Record the EditingNode, Mark and CursorPosition
			textArea.setText(newText);
			textArea.setSelectionStart(start - 1);
			textArea.setSelectionEnd(end - 1);
			tree.setEditingNode(currentNode);
			tree.setCursorMarkPosition(start + 1);
			tree.setCursorPosition(end - 1, false);
			tree.getDocument().setPreferredCaretPosition(end - 1);

	
			// Redraw and Set Focus if this node is currently offscreen
			if (!currentNode.isVisible()) {
				layout.draw(currentNode,OutlineLayoutManager.TEXT);
			}
		}
	}