added f9 terminal

This commit is contained in:
Radek Davidek 2026-01-15 10:07:02 +01:00
parent 69afa0c738
commit ac13e6504f

View File

@ -240,7 +240,7 @@ public class MainWindow extends JFrame {
* Create button panel (like Total Commander) * Create button panel (like Total Commander)
*/ */
private void createButtonPanel() { private void createButtonPanel() {
buttonPanel = new JPanel(new GridLayout(1, 8, 5, 5)); buttonPanel = new JPanel(new GridLayout(1, 9, 5, 5));
buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JButton btnView = new JButton("F3 View"); JButton btnView = new JButton("F3 View");
@ -261,6 +261,9 @@ public class MainWindow extends JFrame {
JButton btnDelete = new JButton("F8 Delete"); JButton btnDelete = new JButton("F8 Delete");
btnDelete.addActionListener(e -> deleteFiles()); btnDelete.addActionListener(e -> deleteFiles());
JButton btnTerminal = new JButton("F9 Terminal");
btnTerminal.addActionListener(e -> openTerminal());
JButton btnRename = new JButton("Shift+F6 Rename"); JButton btnRename = new JButton("Shift+F6 Rename");
btnRename.addActionListener(e -> renameFile()); btnRename.addActionListener(e -> renameFile());
@ -273,6 +276,7 @@ public class MainWindow extends JFrame {
buttonPanel.add(btnMove); buttonPanel.add(btnMove);
buttonPanel.add(btnNewDir); buttonPanel.add(btnNewDir);
buttonPanel.add(btnDelete); buttonPanel.add(btnDelete);
buttonPanel.add(btnTerminal);
buttonPanel.add(btnRename); buttonPanel.add(btnRename);
buttonPanel.add(btnExit); buttonPanel.add(btnExit);
} }
@ -482,6 +486,11 @@ public class MainWindow extends JFrame {
KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0), KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0),
JComponent.WHEN_IN_FOCUSED_WINDOW); JComponent.WHEN_IN_FOCUSED_WINDOW);
// F9 - Open terminal
rootPane.registerKeyboardAction(e -> openTerminal(),
KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0),
JComponent.WHEN_IN_FOCUSED_WINDOW);
// Delete key - global delete binding (also added per-table) // Delete key - global delete binding (also added per-table)
rootPane.registerKeyboardAction(e -> deleteFiles(), rootPane.registerKeyboardAction(e -> deleteFiles(),
KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
@ -1038,6 +1047,60 @@ public class MainWindow extends JFrame {
} }
} }
/**
* Open terminal in the current directory
*/
private void openTerminal() {
File currentDir = activePanel.getCurrentDirectory();
if (currentDir == null) {
currentDir = new File(System.getProperty("user.home"));
}
try {
String osName = System.getProperty("os.name").toLowerCase();
ProcessBuilder pb;
if (osName.contains("win")) {
// Windows
pb = new ProcessBuilder("cmd.exe", "/c", "start", "cmd.exe");
} else if (osName.contains("mac")) {
// macOS
pb = new ProcessBuilder("open", "-a", "Terminal", currentDir.getAbsolutePath());
} else {
// Linux and other Unix-like systems
// Try common terminal emulators
String[] terminals = {"gnome-terminal", "xterm", "konsole", "xfce4-terminal", "mate-terminal"};
pb = null;
for (String terminal : terminals) {
try {
Process p = Runtime.getRuntime().exec(new String[]{"which", terminal});
if (p.waitFor() == 0) {
pb = new ProcessBuilder(terminal);
break;
}
} catch (Exception e) {
// Try next terminal
}
}
if (pb == null) {
// Fallback to xterm if nothing else works
pb = new ProcessBuilder("xterm");
}
}
pb.directory(currentDir);
pb.start();
} catch (Exception e) {
JOptionPane.showMessageDialog(this,
"Chyba při otevírání terminálu: " + e.getMessage(),
"Chyba",
JOptionPane.ERROR_MESSAGE);
}
}
/** /**
* Show About dialog * Show About dialog
*/ */
@ -1053,7 +1116,8 @@ public class MainWindow extends JFrame {
"F6 - Move\n" + "F6 - Move\n" +
"F7 - New directory\n" + "F7 - New directory\n" +
"F8 - Delete\n" + "F8 - Delete\n" +
"F9 / Shift+F6 - Rename\n" + "F9 - Open terminal\n" +
"Shift+F6 - Rename\n" +
"TAB - Switch panel\n" + "TAB - Switch panel\n" +
"Ctrl+F - Search\n" + "Ctrl+F - Search\n" +
"Alt+O - Settings\n" + "Alt+O - Settings\n" +