Вы можете обернуть зависимые от type
операции в вспомогательные функции, которые хранятся в таблицах поиска, снабженных клавишами type
, например:
std::map makeAMap;
makeAMap[NUMBER] = []() -> A* { return new B; };
makeAMap[STRING] = []() -> A* { return new C; };
...
std::map getFuncMap;
getFuncMap[NUMBER] = [](A *item){ static_cast(item)->get(); };
getFuncMap[STRING] = [](A *item){ static_cast(item)->get(); };
...
A* item = makeAMap[type]();
...
item->common();
getFuncMap[type](item);
Live Demo [115 ]
Если вы запустите gnome-терминал, например, «gnome-terminal --working-directory = myfolder», он начнется с рабочего каталога в ~ / myfolder. так что вы можете добавить новую запись в ваше меню, чтобы использовать эту команду вместо другой.
Я сделал так - с помощью скрипта: откройте 3 вкладки в одном и том же размере окна 170x40, каждая «вкладка» начинается в разных каталогах.
gnome-terminal --geometry = 170x40 --working-directory = myfolder1 \
- вкладка --working-directory = myfolder2 \
- вкладка - рабочий каталог = myfolder3
Из GNOME Terminal - Начало работы :
Вы также можете указать команду, которая запускается автоматически при запуске GNOME Terminal в профиле.
Если папка имеет сложный путь, то есть не просто ~/myfolder
, вы можете создать символическую ссылку на нее в вашем домашнем каталоге, чтобы вы могли быстро к ней добраться. Вы также можете установить переменную окружения CDPATH
, чтобы bash сообщал о необходимости поиска в списке каталогов при вводе cd myfolder
.
Существует опция --working-directory
для указания каталога запуска терминала (без краткой формы опций).
Основной подход для открытия терминала в /some/dir
- это
gnome-terminal --working-directory=/some/dir
, но есть ловушка ...
Предполагая, что мы хотим запустить терминал в каталоге ~/dir
.
Это не работает:
gnome-terminal --working-directory=~/dir
Команда выглядит отлично в соответствии с синтаксисом опции, но терминал запускается в домашнем каталоге.
Это потому, что он не расширяет тильду (~
), по непонятным причинам - см. Ниже.
Эти работы:
gnome-terminal --working-directory=/home/auser/dir
gnome-terminal --working-directory=$HOME/dir
gnome-terminal --working-directory ~/dir
Обратите внимание, что в последнем варианте нет =
. Из-за этого ~
находится в начале слова оболочки, и поэтому управляется расширением тильды.
Проблема в том, что ~
расширяется не везде, а только в определенных местах. Один из них находится в переменных назначениях, как directory=~/dir
. Это нормально, ~
расширяется до $HOME
, но --working-directory=~/dir
не расширяется ~
, потому что это не переменное присваивание, это только выглядит очень похоже. [Тысяча сто двадцать семь]
Чтобы открыть в моем нужном каталоге от имени пользователя root, я запустил:
gnome-terminal --working-directory=/home/my-project/ -x bash -c "sudo su"
Я впечатлен комментарием Нейла Мэйхью и ответом Фолькера Зигеля . Я попытался не только установить каталог по умолчанию для gnome-terminal , но и сохранить привычное поведение среды рабочего стола (я использую Linux Mint 17.1 Cinnamon , GNOME Terminal) 3.6.2 , возможно, это также может быть применено для других DE-конгенерированных Gnome). Итак, позвольте мне положить мои два цента.
Добавление cd ~/myfolder
в самом конце ~/.bashrc
делает работу. Но, как уже упоминалось, это повлияет на каждую интерактивную оболочку. Более того, если вы откроете какой-нибудь каталог в файловом менеджере ( Nemo или Nautilus или что-то в этом роде) и откроете оттуда контекстное меню (например, щелкните правой кнопкой мыши и затем выберите ] Открыть в Терминале ) Новый экземпляр gnome-терминал будет запущен в ~/myfolder
независимо от папки, которая была загружена в файловый менеджер. Даже если вы запустите gnome-terminal --working-directory=/some/other/folder
явно, он все равно откроется ~/myfolder
. Кажется, что подход с .bashrc
непригоден.
gnome-terminal --working-directory=myfolder
работает нормально, но только если вы используете настраиваемый пункт меню в вашем DE (или настраиваемый ярлык на рабочем столе), который запускает терминал с этим параметром. Если вы хотите запустить gnome-терминал из командной строки или из мини-лаунчера (нажмите Alt kbd> + F2 kbd>), вы должны ввести параметр каждый раз. В любом случае, этот подход более или менее применим.
Как gnome-терминал определяет, какую папку открыть? Когда --working-directory
не указан, он открывает текущий рабочий каталог (например, $PWD
), в противном случае он открывает каталог, указанный явно.
Я нашел следующее решение.
Создайте файл с именем gnome-terminal
в папке ~/bin
. Он будет действовать как ярлык, но отовсюду (меню «Пуск», мини-панель запуска, другой экземпляр терминала и т. Д.), Потому что ~/bin
уже находится в $PATH
(по крайней мере, в Linux Mint ...). Сделайте этот файл исполняемым. Затем добавьте следующее содержимое в скрипт:
#!/bin/bash
home_directory=~
if [ "$PWD" == "$home_directory" ]; then
# When 'gnome-terminal' was ran from either
# - start menu
# - mini-launcher
# ...
# parent directory is set to $HOME.
#
# We respect original command line arguments.
# For example, when terminal is ran from another
# terminal instance and '--working-directory' is
# specified explicitly we should left it as it is.
# If there are two '--working-directory' switches
# in the command line 'gnome-terminal' will pick up
# the last one.
#
# Also we use full path to executable here in order
# to prevent recursive calling of 'gnome-terminal' from
# '~/bin'.
/usr/bin/gnome-terminal --working-directory=/ "$@"
else
# 'gnome-terminal' was from another directory.
# We don't change anything.
/usr/bin/gnome-terminal "$@"
fi
Если вы запустите gnome-терминал из меню Пуск, вы увидите, что текущая папка в новом терминале - /
(вы можете использовать любая папка, например, ~/myfolder
, потому что наша пользовательская оболочка представляет собой Bash-скрипт, поэтому расширение оболочки работает нормально).
Если вы обращаетесь к Открыть в Терминале в файловом менеджере, вы получите текущий каталог в новом терминале.
Если вы запустите gnome-terminal с явным параметром --working-directory
(возможно, из существующего экземпляра терминала), новый экземпляр терминала будет открыт в указанной вами директории.
Добавьте следующее в свою ~ / .bashrc
cd ~ / myfolder
Вы можете использовать расширение nautilus-open-terminal. Это позволяет щелкнуть правой кнопкой мыши на папке в nautilus и открыть окно терминала с этой папкой в качестве рабочего каталога.
Вы также можете запустить терминал обычным способом, набрать "cd " и перетащить значок папки из nautilus в окно. Это вставит путь к папке в командную строку, после чего вы напечатаете return для перехода в этот каталог. То же самое можно проделать с обычными файлами, чтобы вставить путь к ним и выполнить команды.