Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
X11:terminals
nst
nst_config.cxx
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nst_config.cxx of Package nst
// C++ #include <functional> // nst #include "nst.hxx" #include "WindowSystem.hxx" /* * the implementation of these are placed in this separate file since they * need data structures that would cause circular dependencies when included * in the config header */ namespace nst::config { static_assert(COLS > 1); static_assert(ROWS > 1); /// Internal mouse shortcuts. /** * Beware that overloading Button1 will disable the selection behaviour. **/ std::vector<MouseShortcut> get_mouse_shortcuts(Nst &nst) { auto &tty = nst.tty(); auto &wsys = nst.wsys(); auto &term = nst.term(); auto ttysend = [&](const std::string_view s) { tty.write(s, TTY::MayEcho{true}); }; using xpp::Button; auto scrollHistoryUp = [&term, ttysend](bool shift) { // on the alt screen we inject special escape sequences that // are used by programs like less and vim for scrolling. if (term.onAltScreen()) { ttysend("\031"); } else { if (shift) term.scrollHistoryUpByPage(0.5); else term.scrollHistoryUpByLines(+5); } }; auto scrollHistoryDown = [&term, ttysend](bool shift) { // see above if (term.onAltScreen()) { ttysend("\005"); } else { if (shift) term.scrollHistoryDownByPage(0.5); else term.scrollHistoryDownByLines(+5); } }; return { // mask button function release MouseShortcut{ Mask{Mod::ANY}, Button::BUTTON2, std::bind(&WindowSystem::pasteSelection, &wsys), true, StopScrolling{true}}, // change font size similar to how it works in web browsers MouseShortcut{ Mask{Mod::CONTROL}, Button::BUTTON4, std::bind(&WindowSystem::zoomFont, &wsys, +1), false }, MouseShortcut{ Mask{Mod::CONTROL}, Button::BUTTON5, std::bind(&WindowSystem::zoomFont, &wsys, -1), false }, // these generate sequences used by less/vi for scrolling MouseShortcut{ Mask{Mod::SHIFT}, Button::BUTTON4, std::bind(scrollHistoryUp, true), false }, MouseShortcut{ Mask{Mod::SHIFT}, Button::BUTTON5, std::bind(scrollHistoryDown, true), false }, // regular scrolling via mouse wheel MouseShortcut{ Mask{Mod::ANY}, Button::BUTTON4, std::bind(scrollHistoryUp, false), false }, MouseShortcut{ Mask{Mod::ANY}, Button::BUTTON5, std::bind(scrollHistoryDown, false), false }, }; } /// Internal keyboard shortcuts. std::vector<KbdShortcut> get_kbd_shortcuts(Nst &nst) { //constexpr auto MODKEY = Mod1Mask; constexpr xpp::InputMask TERMMOD{Mod::CONTROL, Mod::SHIFT}; auto &tty = nst.tty(); auto &wsys = nst.wsys(); auto &term = nst.term(); auto selPaste = std::bind(&WindowSystem::pasteSelection, &wsys); auto togglePrinter = [&]() { term.setPrintMode(!term.isPrintMode()); }; auto printScreen = [&]() { term.dump(); }; auto printSel = [&]() { nst.selection().dump(); }; return { // mask keysym function { Mask{Mod::ANY}, KeyID::BREAK, std::bind(&TTY::sendBreak, &tty) }, { Mask{Mod::CONTROL}, KeyID::PRINT, togglePrinter }, { Mask{Mod::SHIFT}, KeyID::PRINT, printScreen }, { Mask{Mod::ANY}, KeyID::PRINT, printSel }, { Mask{Mod::SHIFT, Mod::MOD1}, KeyID::PRIOR, std::bind(&WindowSystem::zoomFont, &wsys, +1), "font_zoom_in" }, { Mask{Mod::SHIFT, Mod::MOD1}, KeyID::NEXT, std::bind(&WindowSystem::zoomFont, &wsys, -1), "font_zoom_out" }, { Mask{Mod::SHIFT, Mod::MOD1}, KeyID::HOME, std::bind(&WindowSystem::resetFont, &wsys), "font_zoom_reset" }, { TERMMOD, KeyID::C, std::bind(&WindowSystem::copyToClipboard, &wsys), "copy_to_clipboard" }, { TERMMOD, KeyID::V, std::bind(&WindowSystem::pasteClipboard, &wsys), "paste_clipboard", StopScrolling{true} }, { TERMMOD, KeyID::Y, selPaste, "paste_selection", StopScrolling{true} }, { Mask{Mod::SHIFT}, KeyID::INSERT, selPaste, "", StopScrolling{true} }, { TERMMOD, KeyID::NUM_LOCK, std::bind(&WindowSystem::toggleNumlock, &wsys) }, { Mask{Mod::SHIFT}, KeyID::PRIOR, std::bind(&Term::scrollHistoryUpByLines, &term, +10), "scroll_history_up_slow" }, { Mask{Mod::SHIFT}, KeyID::NEXT, std::bind(&Term::scrollHistoryDownByLines, &term, +10), "scroll_history_down_slow" }, { TERMMOD, KeyID::PRIOR, std::bind(&Term::scrollHistoryUpByPage, &term, +0.5), "scroll_history_up_fast" }, { TERMMOD, KeyID::NEXT, std::bind(&Term::scrollHistoryDownByPage, &term, +0.5), "scroll_history_down_fast" }, { TERMMOD, KeyID::HOME, std::bind(&Term::scrollHistoryUpMax, &term), "scroll_history_up_max" }, { TERMMOD, KeyID::END, std::bind(&Term::stopScrolling, &term), "stop_scrolling" }, { TERMMOD, KeyID::B, std::bind(&Nst::pipeBufferToExternalCommand, &nst), "open_buffer_in_editor" }, { Mask{}, KeyID::F11, std::bind(&WindowSystem::toggleFullScreen, &wsys), "toggle_fullscreen" }, { TERMMOD, KeyID::KP_DIVIDE, std::bind(&WindowSystem::invertColors, &wsys), "invert_colors" } }; } } // ns nst::config
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor