linux mint контекстное меню

Linux mint контекстное меню

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

[Applet Factory]
Id=MintMenuAppletFactory
InProcess=false
Location=/usr/lib/linuxmint/mintMenu/mintMenu.py
Name=MintMenu Applet Factory
Description=Advanced Menu

[MintMenuApplet]
Name=mintMenu
Description=Advanced Menu
Icon=mintmenu
MateComponentId=OAFIID:MATE_MintMenuApplet;

import gi
gi.require_version(«Gtk», «2.0»)
gi.require_version(‘MatePanelApplet’, ‘4.0’)
from gi.repository import Gtk, GdkPixbuf, Gdk, GObject
from gi.repository import MatePanelApplet
from gi.repository import Gio

import sys
import os
import commands
import gettext
import traceback
import time
import gc
import ctypes
from ctypes import *
import xdg.Config
import keybinding
import pointerMonitor
import setproctitle

# Rename the process
setproctitle.setproctitle(‘mintmenu’)

# i18n
gettext.install(«mintmenu», «/usr/share/linuxmint/locale»)

NAME = _(«Menu»)
PATH = os.path.abspath( os.path.dirname( sys.argv[0] ) )

windowManager = os.getenv(«DESKTOP_SESSION»)
if not windowManager:
windowManager = «MATE»
xdg.Config.setWindowManager( windowManager.upper() )

from execute import *

class MainWindow( object ):
«»»This is the main class for the application»»»

def __init__( self, toggleButton, settings, keybinder, de ):

self.settings = settings
self.keybinder = keybinder
self.path = PATH
sys.path.append( os.path.join( self.path, «plugins») )

self.toggle = toggleButton
# Load UI file and extract widgets
builder = Gtk.Builder()
builder.add_from_file(os.path.join( self.path, «mintMenu.glade» ))
self.window = builder.get_object( «mainWindow» )
self.window.realize()
self.window.window.set_decorations(Gdk.WMDecoration.BORDER)
self.window.set_title(«»)
self.paneholder = builder.get_object( «paneholder» )
self.border = builder.get_object( «border» )

self.window.connect( «key-press-event», self.onKeyPress )
self.window.connect( «focus-in-event», self.onFocusIn )
self.loseFocusId = self.window.connect( «focus-out-event», self.onFocusOut )
self.loseFocusBlocked = False

plugindir = os.path.join( os.path.expanduser( «

» ), «.linuxmint/mintMenu/plugins» )
sys.path.append( plugindir )

self.panelSettings = Gio.Settings.new(«org.mate.panel»)
self.panelSettings.connect( «changed::tooltips-enabled», self.toggleTooltipsEnabled )

self.settings.connect( «changed::plugins-list», self.RegenPlugins )
self.settings.connect( «changed::start-with-favorites», self.toggleStartWithFavorites )
self.settings.connect( «changed::tooltips-enabled», self.toggleTooltipsEnabled )
self.settings.connect( «changed::use-custom-color», self.toggleUseCustomColor )
self.settings.connect( «changed::custom-border-color», self.toggleCustomBorderColor )
self.settings.connect( «changed::custom-heading-color», self.toggleCustomHeadingColor )
self.settings.connect( «changed::custom-color», self.toggleCustomBackgroundColor )
self.settings.connect( «changed::border-width», self.toggleBorderWidth )

self.tooltips = Gtk.Tooltips()
if self.globalEnableTooltips and self.enableTooltips:
self.tooltips.enable()
else:
self.tooltips.disable()

self.PopulatePlugins();
self.firstTime = True;

def on_window1_destroy (self, widget, data=None):
Gtk.main_quit()
sys.exit(0)

def wakePlugins( self ):
# Call each plugin and let them know we’re showing up
for plugin in self.plugins.values():
if hasattr( plugin, «wake» ):
plugin.wake()

def toggleTooltipsEnabled( self, settings, key, args = None):
if key == «tooltips-enabled»:
self.globalEnableTooltips = settings.get_boolean(key)
else:
self.enableTooltips = settings.get_boolean(key)

if self.globalEnableTooltips and self.enableTooltips:
self.tooltips.enable()
else:
self.tooltips.disable()

def toggleStartWithFavorites( self, settings, key, args = None ):
self.startWithFavorites = settings.get_boolean(key)

def toggleBorderWidth( self, settings, key, args = None ):
self.borderwidth = settings.get_int(key)
self.SetupMintMenuBorder()

def toggleUseCustomColor( self, settings, key, args = None ):
self.usecustomcolor = settings.get_boolean(key)
self.loadTheme()

def toggleCustomBorderColor( self, settings, key, args = None ):
self.custombordercolor = settings.get_string(key)
self.SetupMintMenuBorder()

def toggleCustomBackgroundColor( self, settings, key, args = None):
self.customcolor = settings.get_string(key)
self.SetPaneColors( self.panesToColor )

def toggleCustomHeadingColor( self, settings, key, args = None ):
self.customheadingcolor = settings.get_string(key)
self.SetHeadingStyle( self.headingsToColor )

def getSetGSettingEntries( self ):
self.dottedfile = os.path.join( self.path, «dotted.png»)

self.pluginlist = self.settings.get_strv( «plugins-list» )
self.usecustomcolor = self.settings.get_boolean( «use-custom-color» )
self.customcolor = self.settings.get_string( «custom-color» )
self.customheadingcolor = self.settings.get_string( «custom-heading-color» )
self.custombordercolor = self.settings.get_string( «custom-border-color» )
self.borderwidth = self.settings.get_int( «border-width» )
self.offset = self.settings.get_int( «offset» )
self.enableTooltips = self.settings.get_boolean( «tooltips-enabled» )
self.startWithFavorites = self.settings.get_boolean( «start-with-favorites» )

self.globalEnableTooltips = self.panelSettings.get_boolean( «tooltips-enabled» )

def SetupMintMenuBorder( self, defaultStyle = None ):
if self.usecustomcolor:
self.window.modify_bg( Gtk.StateType.NORMAL, Gdk.color_parse( self.custombordercolor ) )
elif defaultStyle is not None:
self.window.modify_bg( Gtk.StateType.NORMAL, defaultStyle.lookup_color(‘bg_color’)[1] )
self.border.set_padding( self.borderwidth, self.borderwidth, self.borderwidth, self.borderwidth )

def PopulatePlugins( self ):
self.panesToColor = [ ]
self.headingsToColor = [ ]
start = time.time()
PluginPane = Gtk.EventBox()
PluginPane.show()
PaneLadder = Gtk.VBox( False, 0 )
PluginPane.add( PaneLadder )
ImageBox = Gtk.EventBox()
ImageBox.show()
self.panesToColor.extend( [ PluginPane, ImageBox ] )

seperatorImage = GdkPixbuf.Pixbuf.new_from_file( self.dottedfile )

for plugin in self.pluginlist:
if plugin in self.plugins:
print u»Duplicate plugin in list: «, plugin
continue

if not MyPlugin.icon:
MyPlugin.icon = «mate-logo-icon.png»

#if hasattr( MyPlugin, «hideseparator» ) and not MyPlugin.hideseparator:
# Image1 = Gtk.Image()
# Image1.set_from_pixbuf( seperatorImage )
# if not ImageBox.get_child():
# ImageBox.add( Image1 )
# Image1.show()

#print u»Loading plugin ‘» + plugin + «‘ : sucessful»
except Exception, e:
MyPlugin = Gtk.EventBox() #Fake class for MyPlugin
MyPlugin.heading = _(«Couldn’t load plugin:») + » » + plugin
MyPlugin.content_holder = Gtk.EventBox()

# create traceback
info = sys.exc_info()

errorLabel = Gtk.Label( «\n».join(traceback.format_exception( info[0], info[1], info[2] )).replace(«\\n», «\n») )
errorLabel.set_selectable( True )
errorLabel.set_line_wrap( True )
errorLabel.set_alignment( 0.0, 0.0 )
errorLabel.set_padding( 5, 5 )
errorLabel.show()

MyPlugin.content_holder.add( errorLabel )
MyPlugin.add( MyPlugin.content_holder )
MyPlugin.width = 270
MyPlugin.icon = ‘mate-logo-icon.png’
print u»Unable to load » + plugin + » plugin :-(«

self.panesToColor.append( MyPlugin.content_holder )
MyPlugin.content_holder.show()

heading.add( Align1 )
heading.show()
VBox1.pack_start( heading, False, False, 0 )
VBox1.show()
#Add plugin to Plugin Box under heading button
MyPlugin.content_holder.reparent( VBox1 )

if MyPlugin.window:
MyPlugin.window.destroy()

error = _(«Couldn’t initialize plugin») + » » + plugin + » : » + «\n».join(traceback.format_exception( info[0], info[1], info[2] )).replace(«\\n», «\n»)
msgDlg = Gtk.MessageDialog( None, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, error )
msgDlg.run();
msgDlg.destroy();

else:
self.paneholder.pack_start( ImageBox, False, False, 0 )
self.paneholder.pack_start( PluginPane, False, False, 0 )
PluginPane = Gtk.EventBox()
PaneLadder = Gtk.VBox( False, 0 )
PluginPane.add( PaneLadder )
ImageBox = Gtk.EventBox()
self.panesToColor.extend( [ PluginPane, ImageBox ] )
ImageBox.show()
PluginPane.show_all()

if self.plugins and hasattr( MyPlugin, ‘hideseparator’ ) and not MyPlugin.hideseparator:
Image1 = Gtk.Image()
Image1.set_from_pixbuf( seperatorImage )
Image1.show()
#ImageBox.add( Image1 )

Align1 = Gtk.Alignment.new(0, 0, 0, 0)
Align1.set_padding( 0, 0, 6, 6 )
Align1.add(Image1)
ImageBox.add(Align1)
ImageBox.show_all()

# A little hacky but works
def getDefaultStyle( self ):
widget = Gtk.EventBox()
widget.show()
return Gtk.rc_get_style(widget)

def loadTheme( self ):
defaultStyle = self.getDefaultStyle()
self.SetPaneColors( self.panesToColor, defaultStyle )
self.SetupMintMenuBorder( defaultStyle )
self.SetHeadingStyle( self.headingsToColor )

def SetPaneColors( self, items, defaultStyle = None ):
if self.usecustomcolor:
for item in items:
item.modify_bg( Gtk.StateType.NORMAL, Gdk.color_parse( self.customcolor ) )
# TODO: Changing background color isn’t working for pixmaps! The following does not work:
item.get_style().bg_pixmap[Gtk.StateType.NORMAL] = None
elif defaultStyle is not None:
for item in items:
item.modify_bg( Gtk.StateType.NORMAL, defaultStyle.lookup_color(‘bg_color’)[1] )
item.get_style().bg_pixmap[Gtk.StateType.NORMAL] = defaultStyle.bg_pixmap[Gtk.StateType.NORMAL]

def SetHeadingStyle( self, items ):
if self.usecustomcolor:
color = self.customheadingcolor
else:
color = None

for item in items:
item.set_use_markup(True)
text = item.get_text()
if color == None:
markup = ‘ %s ‘ % (text)
else:
markup = ‘ %s ‘ % (color, text)
item.set_markup( markup )

def setTooltip( self, widget, tip, tipPrivate = None ):
self.tooltips.set_tip( widget, tip, tipPrivate )

def RegenPlugins( self, *args, **kargs ):
#print
#print u»Reloading Plugins. »
for item in self.paneholder:
item.destroy()

for plugin in self.plugins.values():
if hasattr( plugin, «destroy» ):
plugin.destroy()

try:
del plugin
except:
pass

try:
del self.plugins
except:
pass

self.getSetGSettingEntries()
self.PopulatePlugins()
self.loadTheme()

#print NAME+u» reloaded»

def onKeyPress( self, widget, event ):
if event.keyval == Gdk.KEY_Escape:
self.hide()
return True
return False

def show( self ):
self.window.present()

# Hack for opacity not showing on first composited draw
if self.firstTime:
self.firstTime = False
self.window.set_opacity(1.0)

for plugin in self.plugins.values():
if hasattr( plugin, «onShowMenu» ):
plugin.onShowMenu()

if ( «applications» in self.plugins ) and ( hasattr( self.plugins[«applications»], «focusSearchEntry» ) ):
if (self.startWithFavorites):
self.plugins[«applications»].changeTab(0)
self.plugins[«applications»].focusSearchEntry()

def hide( self ):
for plugin in self.plugins.values():
if hasattr( plugin, «onHideMenu» ):
plugin.onHideMenu()

def onFocusIn( self, *args ):
if self.loseFocusBlocked:
self.window.handler_unblock( self.loseFocusId )
self.loseFocusBlocked = False

def onFocusOut( self, *args):
if self.window.get_visible():
self.hide()
return False

def stopHiding( self ):
if not self.loseFocusBlocked:
self.window.handler_block( self.loseFocusId )
self.loseFocusBlocked = True

class MenuWin( object ):
def __init__( self, applet, iid ):
self.applet = applet
self.detect_desktop_environment()
self.settings = Gio.Settings.new(«com.linuxmint.mintmenu»)
self.keybinder = keybinding.GlobalKeyBinding()
self.settings.connect( «changed::applet-text», self.reloadSettings )
self.settings.connect( «changed::theme-name», self.changeTheme )
self.settings.connect( «changed::hot-key», self.reloadSettings )
self.settings.connect( «changed::applet-icon», self.reloadSettings )
self.settings.connect( «changed::hide-applet-icon», self.reloadSettings )
self.settings.connect( «changed::applet-icon-size», self.reloadSettings )
self.settings.connect( «changed::hot-key», self.hotkeyChanged )
self.loadSettings()

self.mate_settings = Gio.Settings.new(«org.mate.interface»)
self.mate_settings.connect( «changed::gtk-theme», self.changeTheme )

self.applet.set_flags( MatePanelApplet.AppletFlags.EXPAND_MINOR )
self.applet.connect( «button-press-event», self.showMenu )
self.applet.connect( «change-orient», self.changeOrientation )
self.applet.connect(«enter-notify-event», self.enter_notify)
self.applet.connect(«leave-notify-event», self.leave_notify)

self.mainwin = MainWindow( self.button_box, self.settings, self.keybinder, self.de )
self.mainwin.window.connect( «map-event», self.onWindowMap )
self.mainwin.window.connect( «unmap-event», self.onWindowUnmap )
self.mainwin.window.connect( «realize», self.onRealize )
self.mainwin.window.connect( «size-allocate», lambda *args: self.positionMenu() )

self.mainwin.window.set_name(«mintmenu») # Name used in Gtk RC files
self.applyTheme()
self.mainwin.loadTheme()

if self.mainwin.icon:
Gtk.Window.set_default_icon_name( self.mainwin.icon )

self.pointerMonitor = pointerMonitor.PointerMonitor()
self.pointerMonitor.connect(«activate», self.onPointerOutside)

def onWindowMap( self, *args ):
self.applet.set_state( Gtk.StateType.SELECTED )
self.keybinder.set_focus_window( self.mainwin.window.window )
#self.pointerMonitor.grabPointer()
return False

def onWindowUnmap( self, *args ):
self.applet.set_state( Gtk.StateType.NORMAL )
self.keybinder.set_focus_window()
#self.pointerMonitor.ungrabPointer()
return False

def onRealize( self, *args):
self.pointerMonitor.addWindowToMonitor( self.mainwin.window.window )
self.pointerMonitor.addWindowToMonitor( self.applet.window )
self.pointerMonitor.start()
return False

def onPointerOutside(self, *args):
self.mainwin.hide()
return True

def onBindingPress(self, binder):
self.toggleMenu()
return True

def enter_notify(self, applet, event):
self.do_image(self.buttonIcon, True)

def leave_notify(self, applet, event):
# Hack for mate-panel-test-applets focus issue (this can be commented)
if event.state & Gdk.ModifierType.BUTTON1_MASK and applet.state & Gtk.StateType.SELECTED:
if event.x >= 0 and event.y >= 0 and event.x «, «Lars-Peter Clausen «] )
about.set_translator_credits((«translator-credits») )
#about.set_copyright( _(«Based on USP from S.Chanderbally») )
about.set_logo( GdkPixbuf.Pixbuf.new_from_file(«/usr/lib/linuxmint/mintMenu/icon.svg») )
about.connect( «response», lambda dialog, r: dialog.destroy() )
about.show()

def showPreferences( self, action, userdata = None ):
# Execute( «mateconf-editor /apps/mintMenu» )
Execute( os.path.join( PATH, «mintMenuConfig.py» ) )

def showMenuEditor( self, action, userdata = None ):
Execute( «mozo» )

def showMenu( self, widget=None, event=None ):
if event == None or event.button == 1:
self.toggleMenu()
# show right click menu
elif event.button == 3:
self.create_menu()
# allow middle click and drag
elif event.button == 2:
self.mainwin.hide()

def toggleMenu( self ):
if self.applet.state & Gtk.StateType.SELECTED:
self.mainwin.hide()
else:
self.positionMenu()
self.mainwin.show()
self.wakePlugins()

def wakePlugins( self ):
self.mainwin.wakePlugins()

def positionMenu( self ):
# Get our own dimensions & position
ourWidth = self.mainwin.window.get_size()[0]
ourHeight = self.mainwin.window.get_size()[1] + self.mainwin.offset

x = c_int()
y = c_int()
# Get the dimensions/position of the widgetToAlignWith
gdk.gdk_window_get_origin.argtypes = [c_void_p, c_void_p, c_void_p]
gdk.gdk_window_get_origin(hash(self.applet.window), byref(x), byref(y))
entryX = x.value
entryY = y.value

entryWidth, entryHeight = self.applet.get_allocation().width, self.applet.get_allocation().height
entryHeight = entryHeight + self.mainwin.offset

Источник

Linux Mint и его Cinnamon. Очерки применителя. Часть 3a

Алексей Федорчук aka Alv

Рабочие среды, они же десктопы, не случайно называются также средами интегрированными: кроме средств самообеспечения (оконный менеджер, менеджер сессий и так далее) и самоконфигурирования, они в обязательном порядке включают в себя более или менее обширный набор пользовательских приложений. Из которых важнейшими являются файловый менеджер, эмулятор терминала и текстовый редактор.

Файловый менеджер Nemo

Файловый менеджер среди базовых приложений занимает центральное положение: он является сердцем интегрированной рабочей среды, причём любой (даже Windows — кое-кому памятны разборки о неразрывной связи её Windows Explorer’ом). Без него она хотя и может существовать (как показали примеры «выпиливания» того же Explorer’а), но существование это лишается смысла (что, собственно, и продемонстрировали некогда «выпиливатели»).

Сказанное применимо и к Nemo в Cinnamon, причём в превосходной степени. Ибо он, в сущности, является единственным штатным приложением этой среды: прочие представители «малого джентльменского набора», из которых в ней присутствуют GNOME-терминал и текстовый редактор Gedit, выдернуты из GNOME и легко заменяются любыми аналогами, основанными на Gtk, что я покажу в дальнейшем, в очерках о приложениях. И только Nemo стоит свою вахту бессменно, потому что заменить его некем. Да и незачем — это уже давно очень хороший файловый менеджер, а в последней своей версии, 2.4 (той самой, что входит в состав Mint Rebecca) он стал ещё лучше.

Обзор возможностей

И так, представляю героя нынешнего очерка: файловый менеджер Nemo. Вместе со всей средой Cinnamon он ответвился от GNOME с его Nautilus’ом на стадии версии 3.4, до того, как последний стал стремительно терять свою функциональность и настраиваемость. Поэтому Nemo сохранил исходные возможности Nautilus’а, а после отказа Cinnamon (в версии 2.0) от связи с кодовой базой GNOME 3, ещё и приумножил их.

По умолчанию, при первом запуске, Nemo выглядит весьма непритязательно — примерно так:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

То есть, казалось бы, Nautilus как Nautilus — визуальное отличие разве что в эмблемах на пиктограммах каталогов. Кстати, вплоть до версии 2.2 включительно Nemo под этим именем и фигурировал — и в главном меню Cinnamon, и во всплывающей подсказке при наведении на пиктограмму панели управления. Лишь в версии 2.4 он освободился от тяжкого наследния, и нынче и там, и там написано просто Файлы (Files в оригинальной локализации).

Однако на деле Nemo оказывается не так прост. То, что он поддерживает вкладки — само собой разумеется, кто их нынче не поддерживает, даже Thunar. Однако далее: графическая строка адреса лёгким нажатием на загогулину справа от неё превращается в текстовую — и остаётся таковой в последующих сеансах, если не «опиктограммить» её обратно.

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Назначение любой пиктограммы легко определяется по всплывающей подсказке.

Саму строку главного меню можно скрыть через меню же: в пункте Вид снять отметку с подпункта Menubar. После этого строку меню можно быстро делать видимой и скрывать заново либо нажатием клавиши Alt, либо правым кликом мыши на панели инструментов или строке состояния. И так — до тех пор, пока не сделать строку меню видимой постоянно — тем же образом, что она была скрыта, то есть через меню:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Впрочем, я в постоянно видимом меню необходимости не вижу: большую часть обыденных действий можно (и проще) выполнять через пиктограммы панели инструментов или через контекстное меню по правому клику мыши. А меню вызывать только при необходимости — например, для пополнения списка закладок боковой панели (см. ниже).

Вид контекстного меню различается в зависимости от того, где именно кликнуть. Если на пустом поле основного окна Nemo — в нём будут пункты создания каталога, файла или ярлыка запуска приложения, открытия в терминале, открытия Nemo с правами администратора, сортировки, показа и скрытия dot-файлов, вставки из буфера, масштабирования пиктограмм; последнее можно сделать и ползунком на строке состояния.

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

При щелчке на пиктограмме одиночного файла пункты Открыть в Терминале и Открыть как Администратор, естественно, пропадают. Зато появляются пункты открытия с помощью приложения по умолчанию и «запасных» приложений для данного типа файлов (в примере на скриншоте ниже — для HTML-файлов), вырезания, «дублирования», создания симлинка и так далее:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Среди «далее» отмечу безвозвратное удаление и сжатие, что для единичного файла означает именно сжатие каким-либо компрессором из доступных в системе, понятие тут архивирования смысла не имеет, хотя по умолчанию предлагается именно архив:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

При щелчке на пиктограмме каталога пункты контекстного меню первого и второго случая как бы суммируются. Но к ним ещё присоединяются пункты открытия (на месте, в новом окне, в новой вкладке), настройки общего доступа, а также цветовая палитра, позволяющая окрасить пиктограмму каждого каталога в свой цвет (из числа предопределённых темой).

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Во всех трёх случаях контекстное меню завершается пунктом Свойства, содежимое которого тоже различается в зависимости от места клика. В частности, для одиночного файла имеется вкладка Открыть с помощью, в которой можно переопределить приложение по умолчанию, связанное с данным типом файлов:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Любопытна вкладка Эмблемы, впервые появившаяся в версии Nemo 2.4. Именно с её помощью можно к пиктограмме каждого каталога и файла, зависимости от их содержимого, миниатюрное изображение из заданного набора:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Правда, делать это придётся вручную и по одному объекту.

В итоге описанных выше действий по модификации внешности Nemo, в моей системе он приобрёл следующий вид:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

В боковой панели окна Nemo выводится список закладок — каталогов файловой системы с быстрым доступом, который можно пополнять произвольным образом, и «посторонних» (то есть автоматически не монтируемых) носителей, как внутренних, так и внешних. Из контекстного меню по правому клику они могут быть открыты в текущей вкладке, новой вкладке или новом окне:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Для «сторонних» носителей предусмотрены также пункты монтирования (без открытия) и отмонтирования:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Исключение — «квазисистемные» закладки (Файловая система, Домашний каталог, Рабочий стол, Корзина) — для них эти функции недоступны.

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

На мой взгляд, совмещение «многовкладочности» и «двухпанельности» — явный перебор. Но в ряде случаев временное включение второй панели (а это можно сделать быстро — клавишей F3) бывает полезным — например, при работе с облачными хранилищами.

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Круг поисков можно сузить, задав второй критерий — тип файла (в примере изображение PNG):

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Кроме таких абстрактных типов, как документ, музыка, презентация и так далее, более конкретно тип файла можно выбрать из длиннющего списка, вызываемого выбором пункта Другой тип:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Теоретически критериев поиска можно задать сколько угодно, только комбинировать можно только значения двух их вариантов — местоположения и типа файлов, так что больше двух критериев практического смысла не имеют.

Иначе говоря, Nemo предоставляет большинство возможностей, которые мы вправе ожидать от современного «продвинутого» файлового менеджера. Если, конечно, вслед за разработчиками GNOME не считать признаком «современности» и «продвинутости» отсуствие возможностей…

Перепробовав немалое число программ этого рода, могу со всей ответственностью утверждать, что по функциональности и настраиваемости Nemo уступает только старому Konqueror’у и современному Dolphin’у из KDE, да и то немного. В частности, в нём (мне) очень не хватает встроенного терминального окна — но это, пожалуй, единственное, чего на самом деле недостаёт. Тем более, что в принципе эта проблема решаема, как будет показано в следующем разделе.

Nemo и его терминал

Пакет плагина nemo-terminal находится в официальном репозитории Mint, и потому ныне устанавливается стандартным образом, без всяких неожиданностей:

После чего требуется «жёсткий» выход из Nemo, например, командой в терминале:

Запущенный в следующий раз, Nemo будет уже с терминальным окошком в верхней части рабочей области вполне уродливого вида:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Горячей клавишей F4 его можно скрыть с глаз долой и вызывать по необходимости. А чтобы терминальное окно не мозолило глаза при каждом запуске, достаточно убрать его клавишей F4 и повторить команду

И при следующем запуске Nemo окно его будет девственно чисто — о наличии терминала можно узнать, только опять нажав клавишу F4.

Никаких настроек для терминала не обнаруживается. Можно только мышью изменить высоту терминального окна — но лишь для запущенного экземпляра Nemo, при повторном его запуске оно опять будет восстановлено в исходном размере.

Командная оболочка в окне nemo-terminal — теоретически login shell данного пользователя, то есть в моём случае Zsh. По кранйней мере, об этом говорил вывод команды

Но это был очень странный Zsh. В частности, он игнорировал все настройки в

он выдавал ошибки буквально в каждой строке.

А в остальном, прекрасная маркиза, все функции терминала выполнялись исправно — то есть в нём можно было вводить всякие разные команды. При смене каталога в основной панели Nemo происходила смена его и в окне терминала:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

В терминальное окно можно было перетаскивать мышью каталоги и файлы. В первом случае это было эквивалентом команды cd — и тут уже с синхронизацией пути в командой строке и основной панели. Файлы же открывались в той программе, которая закреплена за ними по умолчанию: текстовые файлы — в текстовом редакторе, html-файлы — в браузере, файлы изображений — в графическом вьювере, и так далее.

Вписав туда (в любимом текстовом редакторе от лица администратора) после строки

Затем — «жёсткое» завершение работы Nemo5

И при следующем запуске этого файлового менеджера в его терминальном окне красуется Zsh именно в том виде, до которого я его доводил годами. Что любопытно — после описанной процедуры nemo-terminal стал реагировать и на ручные изменения своего конфига. В частности, высота окна его увеличилась с пяти умолчальных строк до десяти, которые я раньше тщетно пытался ему внушить:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

В общем, nemo-terminal не превращает Nemo в Dolphin, но в любом случае лучше хоть какой-то терминал, чем вообще никакого. Тем более, что работа над его совершенствованием будет продолжена. А пока его далёкий от эстетического совершенства вид можно скрывать, вызывая терминальное окно только при необходимости.

Некоторые расширения Nemo

Пакет nemo-terminal — не единственный из «расширителей» этого файлового менеджера (nemo-extensions). С полным их списком можно ознакомиться, например, с помошью конструкции примерно такого вида:

В которой следует не забыть про пробел после открывающей кавычки — иначе в выводе будет много лишнего. А так он сведётся к списку из примерно 30 строк:

Который, кстати, можно ещё сократить, отсортировав пакеты для ненужной архитектуры (в моём случае — для i386) довольно неуклюжей (лучше не придумал) конструкцией:

Большинство «расширителей», не установленных по умолчанию, как зависимости пакета nemo (например, nemo-emblems — это тоже «расширитель»), относятся ко всяким средствам разработки, а nemo-terminal мы только что установили собственноручно. Однако и среди оставшихся простой советский применитель может выискать кое-что для себя полезное.

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Ну вы меня поняли, ага?

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Первый, как это ни парадоксально, обеспечивает именно масштабирование картинок. А каким образом это может происходить — становится понятно при беглом вгляде на скриншот вызываемой им панели:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Точно так же, и столь же прозрачно, действует ротация, что видно на соответствующем скриншоте:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

К которому остаётся разве что добавить, что вращать изображения можно на 90 градусов посолонь и противусолонь, на 180 градусов, а также на произвольные углы с шагом в один градус.

И ещё: разумеется, масштабирование и вращение применимы и к единичному изображению. Однако наибольшую пользу они принесут в случае, когда надо сотни скриншотов вписать в формат web-страницы. Или массив отснятых фотографий перевести из портретной ориентации в альбомную (или наоборот). А для этих целей данный «расширитель» кажется мне очень востребованным.

Nemo и Dropbox

предлагается «вчистую» закрыть все, возможно, открытые экземпляры Nemo:

А вслед за тем запустить из главного меню Cinnamon программу, которая так и называется — Dropbox, находится в секции Интернет и вызывает для начала свой собственный инсталлятор:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

А затем вызывается панель её установщика:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Поскольку аккаунт Dropbox’а у меня существует с незапамятных времён (хотя я им почти не пользуюсь), ввожу свои учётные данные

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Жму кнопку Next и жду установления коннекта. После чего совершаю выбор типа установки. Рекомендуемый Typical создаст каталог для синхронизации с Dropbox’ом в моём домашнем. Это меня по некоторым причинам ни в коем случае не устраивает, поэтому приходится выбирать Advanced, хотя ничего такого авантажного мне не требуется. Так что следующим шагом выбираю подходящее место для каталога Dropbox :

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Далее по умолчанию предлагается синхронизировать все каталоги Dropbox’а. Это мне тоже ни к чему, поэтому меняю на каталоги по собственному выбору. В ответ программа хочет провести среди меня разъяснительную работу, объяснив, что такое каталоги вообще и каталог Dropbox в частности:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Отказываюсь, нажав кнопку Skip Tour. В ответ предлагается финишировать, открыв при это каталог Dropbox’а:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Все описанные события происходили на Ноутбучке, а настоящий текст сочинялся параллельно на большой машине. Так что собираю все сделанные скриншоты (те, что были приведены выше) и отправляю их в Drop’лако. Поскольку на большой машине описанныя процедура была проделана ещё раньше, скриншоты через посредство Drop’лака уже там. Дописываю последний абзац этого мини-очерка — и занимаюсь вставкой в него иллюстраций. Результат перед вами.

Nemo и Яндекс.Диск

Только что мы разобрались с ихним буржуазным облачным сервисом Dropbox’ом. Но ведь и мы не лыком шиты — у нас есть его собрат по поднебесному ремеслу, Яндекс.Диск, который подключается ничуть не сложнее. И даже проще, поскольку задача сводится к настройке подключения по WebDAV. Для чего нужно отправиться в боковую панель, найти там раздел Сеть, а в нём — закладку Сеть, на которой и щёлкнуть, чтобы получить вот такую картину:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Нажимается Enter. В появившейся панельке авторизации вводится пароль доступа к сервисам Яндекса:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

Всё — подключение свершилось. Теперь между локальными дисками и Яндекс.Диском можно взаимодействовать через Copy&Paste. А можно клавишей F3 включить двухпанельный режим:

linux mint контекстное меню. Смотреть фото linux mint контекстное меню. Смотреть картинку linux mint контекстное меню. Картинка про linux mint контекстное меню. Фото linux mint контекстное меню

И проникнуться его полезностью — файлы и каталоги можно просто таскать мышью туда и сюда.

11 комментариев к “ Linux Mint и его Cinnamon. Очерки применителя. Часть 3a ”

По поводу Yandex.Disk крайне рекомендую посмотреть в сторону его родного клиента + Yandex.Disk indicator (aka yd-tools: http://forum.ubuntu.ru/index.php?topic=241992.0 и PPA: https://launchpad.net/

slytomcat/+archive/ubuntu/ppa). Вместе всё это выглядит примерно так: http://itmages.ru/image/view/1630183/450c5321 в трее показывается индикатор статуса синхронизации. Так же добавляются сценарии для публикации и снятия с публикации файла/каталога. Это, конечно, не полноценные расширения как у Insync, Dropbox или MegaSync, но тоже достаточно удобно. Плюс, как мне показалось, по скорости значительно быстрее и безглючнее.

Добрый день!
Очень здорово вы пишете. Причем это воспринимается как чтение для души. Особенно приятно то, что вы описываете всякие полезные штучки, которые делают жизнь легче. Честно говоря благодаря Вашим статьям я начинаю погружаться в Линукс, хотя Линукс у меня стоит изначально и Винды собственно никогда не было. Однако я им пользуюсь на уровне Винды с иконками. Глубже вникнуть не получалось. Теперь с удовольствием читаю Ваши статьи где вы не жадничаете и делитесь секретами мастерства. Здорово, что можно тут же применять то, что вы описываете на своем компьютере. Мне помогает то, что у меня стоит родственная Циннамону система — Росинка 13, правда жаль, что не все совпадает.

Хорошая статья, спасибо. Только с яндексом проблемка небольшая. Мелкие файлы (фото, музыку) заливает в облако без проблем, а вот на файле 3.5 гига споткнулся. Одно из двух ядер ЦП грузится на 100%, комп начинает тормозить и сетевой монитор показывает полнейшую тишину. Лечится это только перезагрузкой. Коннектился с яндексом как описано тут: https://help.yandex.ru/disk/webdav/webdav-linux.xml С Dropbox’ом таких проблем не наблюдалось?

Подскажите, пожалуйста, может в курсе, какие параметры/переменные в кофиг файлах отвечают за цвет боковой панели nemo в дефолтных темах Mint. В целом темы нравяться, но чёрный цвет сайдбара совсем не устраивает…

Увы, не в курсе.
У меня она серая 🙂

В принципе, конечно можно подобрать тему на просторах глобальных, но пока подберёшь под себя запаришься)). Подумал легче подогнать дефолтную тему под себя, ан нет — и тут копать-не перекопать(

Подгонка темы в Cinnamon — занятие не то что очень сложное, но весьма кропотливое: http://alv.me/?p=8406#toc25
Однако дело в том, что смена темы в среде на Nemo не отражается, только на его иконке.
А от чего зависит цвет сайдбара в нём — не знаю, даже и не искал пока.

Здравствуйте! Возможно, я что то упустил, но из Nemo в YD войти не могу. Mint 17.2 x 64 Cinnamon ядро 4.1 stable.

Разобрался. В Вашей текстовке пропущено davs://username@webdav.yandex.ru/

Оставьте комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *