You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.9 KiB

#pragma once
#include "dispatcher.hpp"
#include "mutex.hpp"
#include "process.hpp"
#include "source_base.hpp"
#include <boost/filesystem.hpp>
#include <functional>
#include <gtkmm.h>
#include <iostream>
#include <tuple>
class Terminal : public Source::SearchView {
Terminal();
public:
static Terminal &get() {
static Terminal singleton;
return singleton;
}
int process(const std::string &command, const boost::filesystem::path &path = "", bool use_pipes = true);
int process(std::istream &stdin_stream, std::ostream &stdout_stream, const std::string &command, const boost::filesystem::path &path = "", std::ostream *stderr_stream = nullptr);
void async_process(const std::string &command, const boost::filesystem::path &path = "", const std::function<void(int exit_status)> &callback = nullptr, bool quiet = false);
void kill_last_async_process(bool force = false);
void kill_async_processes(bool force = false);
size_t print(const std::string &message, bool bold = false);
void async_print(const std::string &message, bool bold = false);
void async_print(size_t line_nr, const std::string &message);
10 years ago
void configure();
void clear();
protected:
bool on_motion_notify_event(GdkEventMotion *motion_event) override;
bool on_button_press_event(GdkEventButton *button_event) override;
bool on_key_press_event(GdkEventKey *event) override;
private:
Dispatcher dispatcher;
Glib::RefPtr<Gtk::TextTag> bold_tag;
Glib::RefPtr<Gtk::TextTag> link_tag;
Glib::RefPtr<Gdk::Cursor> link_mouse_cursor;
Glib::RefPtr<Gdk::Cursor> default_mouse_cursor;
size_t deleted_lines = 0;
std::tuple<size_t, size_t, std::string, std::string, std::string> find_link(const std::string &line);
void apply_link_tags(const Gtk::TextIter &start_iter, const Gtk::TextIter &end_iter);
Mutex processes_mutex;
std::vector<std::shared_ptr<TinyProcessLib::Process>> processes GUARDED_BY(processes_mutex);
Glib::ustring stdin_buffer;
};