mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:57:34 +00:00
FileManager: Add Open in Terminal on folder context menu
This commit is contained in:
parent
47e1d5c05e
commit
86a4d0694f
3 changed files with 42 additions and 12 deletions
|
@ -26,6 +26,23 @@
|
|||
|
||||
namespace FileManager {
|
||||
|
||||
void spawn_terminal(String const& directory)
|
||||
{
|
||||
posix_spawn_file_actions_t spawn_actions;
|
||||
posix_spawn_file_actions_init(&spawn_actions);
|
||||
posix_spawn_file_actions_addchdir(&spawn_actions, directory.characters());
|
||||
|
||||
pid_t pid;
|
||||
const char* argv[] = { "Terminal", nullptr };
|
||||
if ((errno = posix_spawn(&pid, "/bin/Terminal", &spawn_actions, nullptr, const_cast<char**>(argv), environ))) {
|
||||
perror("posix_spawn");
|
||||
} else {
|
||||
if (disown(pid) < 0)
|
||||
perror("disown");
|
||||
}
|
||||
posix_spawn_file_actions_destroy(&spawn_actions);
|
||||
}
|
||||
|
||||
enum class FileOperation {
|
||||
Copy,
|
||||
};
|
||||
|
@ -570,18 +587,7 @@ void DirectoryView::setup_actions()
|
|||
});
|
||||
|
||||
m_open_terminal_action = GUI::Action::create("Open &Terminal Here", Gfx::Bitmap::load_from_file("/res/icons/16x16/app-terminal.png"), [&](auto&) {
|
||||
posix_spawn_file_actions_t spawn_actions;
|
||||
posix_spawn_file_actions_init(&spawn_actions);
|
||||
posix_spawn_file_actions_addchdir(&spawn_actions, path().characters());
|
||||
pid_t pid;
|
||||
const char* argv[] = { "Terminal", nullptr };
|
||||
if ((errno = posix_spawn(&pid, "/bin/Terminal", &spawn_actions, nullptr, const_cast<char**>(argv), environ))) {
|
||||
perror("posix_spawn");
|
||||
} else {
|
||||
if (disown(pid) < 0)
|
||||
perror("disown");
|
||||
}
|
||||
posix_spawn_file_actions_destroy(&spawn_actions);
|
||||
spawn_terminal(path());
|
||||
});
|
||||
|
||||
m_delete_action = GUI::CommonActions::make_delete_action([this](auto&) { do_delete(true); }, window());
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
|
||||
namespace FileManager {
|
||||
|
||||
void spawn_terminal(String const& directory);
|
||||
|
||||
class LauncherHandler : public RefCounted<LauncherHandler> {
|
||||
public:
|
||||
LauncherHandler(const NonnullRefPtr<Desktop::Launcher::Details>& details)
|
||||
|
|
|
@ -699,6 +699,26 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
|
|||
},
|
||||
window);
|
||||
|
||||
auto open_in_new_terminal_action
|
||||
= GUI::Action::create(
|
||||
"Open in &Terminal",
|
||||
{},
|
||||
Gfx::Bitmap::load_from_file("/res/icons/16x16/app-terminal.png"),
|
||||
[&](GUI::Action const& action) {
|
||||
Vector<String> paths;
|
||||
if (action.activator() == tree_view_directory_context_menu)
|
||||
paths = tree_view_selected_file_paths();
|
||||
else
|
||||
paths = directory_view.selected_file_paths();
|
||||
|
||||
for (auto& path : paths) {
|
||||
if (Core::File::is_directory(path)) {
|
||||
spawn_terminal(path);
|
||||
}
|
||||
}
|
||||
},
|
||||
window);
|
||||
|
||||
auto shortcut_action
|
||||
= GUI::Action::create(
|
||||
"Create Desktop &Shortcut",
|
||||
|
@ -1015,6 +1035,7 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
|
|||
};
|
||||
|
||||
directory_context_menu->add_action(open_in_new_window_action);
|
||||
directory_context_menu->add_action(open_in_new_terminal_action);
|
||||
directory_context_menu->add_action(copy_action);
|
||||
directory_context_menu->add_action(cut_action);
|
||||
directory_context_menu->add_action(folder_specific_paste_action);
|
||||
|
@ -1033,6 +1054,7 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
|
|||
directory_view_context_menu->add_action(properties_action);
|
||||
|
||||
tree_view_directory_context_menu->add_action(open_in_new_window_action);
|
||||
tree_view_directory_context_menu->add_action(open_in_new_terminal_action);
|
||||
tree_view_directory_context_menu->add_action(copy_action);
|
||||
tree_view_directory_context_menu->add_action(cut_action);
|
||||
tree_view_directory_context_menu->add_action(paste_action);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue