Como usar o console python Rhythmbox

13

Talvez isso seja óbvio e eu esteja sentindo falta dele, ou talvez alguém já tenha escrito um ótimo guia e meu (aparentemente exaustivo) Google não esteja conseguindo ativá-lo, mas não consigo descobrir por toda a minha vida como obter o maldito console python em rhythmbox para fazer qualquer coisa!

Eu o habilitei no menu do plug-in e abri-o usando Ferramentas-> Console Python.

Imprime

You can access the main window through the 'shell' variable :
<rb.Shell object at 0xa6cdd24 (RBShell at 0xa14e000)>
>>> 

Mas qualquer coisa que eu digitar no prompt não faz nada ! Eu tentei help, tentei exit(), tentei print "hello world", nada faz nada!

Todas essas coisas funcionam, é claro, em um console python normal. Eu não tenho idéia do que diabos está a diferença aqui! Devo fazer algo diferente de pressionar enter?

TJ Ellis
fonte
Eu apenas sabia "rhythmbox-client -h" do terminal. +1 por tomar conhecimento deste plug-in.
Rojan 04/09/10

Respostas:

8

O Guia de Redação dos Plug-ins do Rhythmbox possui vários exemplos de comandos que você pode usar no console do Python para controlar a reprodução e modificar o Rhythmbox:

  • A pausa

    shell.props.shell_player.playpause()
  • Pare

    shell.props.shell_player.stop()
  • Próxima faixa

    shell.props.shell_player.do_next()
  • Adicionar uma música à fila do Play

    shell.add_to_queue("file://awsome_song.ogg")
  • Exibir uma visualização

    import gst
    goom = gst.element_factory_make ("goom")
    sink = gst.element_factory_make ("ximagesink")
    colour = gst.element_factory_make ("ffmpegcolorspace")
    b = gst.Bin()
    b.add (goom, colour, sink)
    b.add_pad(gst.GhostPad("sink", goom.get_pad("sink")))
    goom.link(colour)
    colour.link(sink)
    shell.get_player().props.player.add_tee(b)
ændrük
fonte
Isso é útil e, na verdade, eu o encontrei anteriormente, no entanto, o que estou procurando é como realmente usar o console. É como um console python comum; digite um comando e pressione enter? Nesse caso, o meu está quebrado. Quando digito um comando e pressiono enter, ele cria uma nova linha, sem executar a linha de código. Desde que eu saiba que está quebrado, posso procurar ajuda para consertá-lo; Eu só queria ter certeza que eu não estava fazendo algo estúpido (e não poderia encontrar qualquer uso documentado do mesmo!)
TJ Ellis
Isso realmente parece que algo está quebrado. No rhythmbox-0.12.8-0ubuntu7 sem nenhum outro plug-in habilitado, o console funciona como um console Python comum, por exemplo, digite print "hello world"e pressione Enter. Ainda não vejo esse problema relatado em nenhum outro lugar, portanto, considere abrir um novo bug no rastreador de erros do Rhythmbox .
ændrük
1
obrigado! agora que sei que está quebrado, vou bisbilhotar um pouco mais e registrar um bug.
TJ Ellis
Observe que, pelo menos a partir do Ubuntu Trusty tahr 14.04, o rhythmbox incorpora o python 3.4.0. Portanto, o comando 'print "hello world"' é um erro de sintaxe;) Em vez disso, use a nova função de impressão Python 3: 'print ("hello world")'
nealmcb
Observe que alguns desses exemplos não funcionam mais no Trusty. Veja algumas dicas sobre o que fazer em vez de shell.add_to_queue () aqui - embora pareça muito mais complicado, infelizmente: mail.gnome.org/archives/rhythmbox-devel/2011-Abril/…
nealmcb
6

Como em qualquer objeto Python, você pode descobrir muito sobre isso usando o método dir (). Isso lhe dará um bom lugar para começar.

You can access the main window through the 'shell' variable :
<rb.Shell object at 0x9e9675c (RBShell at 0x987b018)>
>>> dir(rb.Shell)
['__class__', '__cmp__', '__copy__', '__deepcopy__', '__delattr__', '__dict__',
'__doc__', '__format__', '__gdoc__', '__getattribute__', '__gobject_init__', 
'__grefcount__', '__gtype__', '__hash__', '__init__', '__module__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'add_to_queue', 'add_uri', 'add_widget', 'append_source',
'chain', 'connect', 'connect_after', 'connect_object', 'connect_object_after',
'disconnect', 'disconnect_by_func', 'do_notify', 'emit', 'emit_stop_by_name',
'freeze_notify', 'get_data', 'get_party_mode', 'get_player',
'get_playlist_manager', 'get_properties', 'get_property',
'get_source_by_entry_type', 'get_ui_manager', 'guess_source_for_uri', 
'handler_block', 'handler_block_by_func', 'handler_disconnect',
'handler_is_connected','handler_unblock', 'handler_unblock_by_func', 'load_uri',
'notebook_set_page', 'notify', 'notify_custom', 'present', 'props',
'register_entry_type_for_source', 'remove_from_queue', 'remove_widget',
'set_data', 'set_properties', 'set_property', 'stop_emission', 'thaw_notify',
'toggle_visibility', 'weak_ref']

Você pode direcionar () qualquer uma das propriedades de aparência interessante, como 'get_player', talvez.

Outro bom lugar para procurar é se você vir um atributo __doc__ no objeto.

>>> print rb.Shell.__doc__
Object RBShell

Signals from RBShell:
  visibility-changed (gboolean)
  visibility-changing (gboolean, gboolean) -> gboolean
  create-song-info (RBSongInfo, gboolean)
  removable-media-scan-finished ()
  notify-playing-entry (gboolean)
  notify-custom (guint, gchararray, gchararray, GdkPixbuf, gboolean)

Properties from RBShell:
  no-registration -> gboolean: no-registration
    Whether or not to register
  no-update -> gboolean: no-update
    Whether or not to update the library
  dry-run -> gboolean: dry-run
    Whether or not this is a dry run
  rhythmdb-file -> gchararray: rhythmdb-file
    The RhythmDB file to use
  playlists-file -> gchararray: playlists-file
    The playlists file to use
  selected-source -> RBSource: selected-source
    Source which is currently selected
  db -> RhythmDB: RhythmDB
    RhythmDB object
  ui-manager -> GtkUIManager: GtkUIManager
    GtkUIManager object
  clipboard -> RBShellClipboard: RBShellClipboard
    RBShellClipboard object
  playlist-manager -> RBPlaylistManager: RBPlaylistManager
    RBPlaylistManager object
  removable-media-manager -> RBRemovableMediaManager: RBRemovableMediaManager
    RBRemovableMediaManager object
  shell-player -> RBShellPlayer: RBShellPlayer
    RBShellPlayer object
  window -> GtkWindow: GtkWindow
    GtkWindow object
  prefs -> RBShellPreferences: RBShellPreferences
    RBShellPreferences object
  queue-source -> RBPlayQueueSource: queue-source
    Queue source
  library-source -> RBLibrarySource: library-source
    Library source
  sourcelist-model -> RBSourceListModel: sourcelist-model
    RBSourcelistModel
  sourcelist -> RBSourceList: sourcelist
    RBSourcelist
  source-header -> RBSourceHeader: source header widget
    RBSourceHeader
  visibility -> gboolean: visibility
    Current window visibility

Signals from GObject:
  notify (GParam)
brousch
fonte
Isso é útil, se eu conseguir que o console do gorram funcione! como é, se eu digitar, por exemplo, dir(rb.Shell)e pressionar enter, ele adiciona uma quebra de linha e não faz nada ... Seu shell funcionou OOB? Eu tenho a instalação padrão do rhythmbox no Ubuntu 10.04 .... Não consigo pensar em nada que eu mudei que quebraria o shell. Meu console python normal (fora do rb) funciona muito bem ...
TJ Ellis
Hm, sim, meu shell funciona bem sem modificações.
brousch 30/09/10
3

Caramba, acabei de descobrir qual era o problema (2,5 anos depois) - por algum motivo, minha tecla "enter" mapeia dois eventos-chave diferentes, dependendo de o numlock estar ativado ou desativado. Quando o numlock está ativado, ele retorna KP_ENTERe, quando o numlock está desativado, ele retorna Return. Eu sempre tenho o numlock ativado, porque prefiro digitar números com o teclado.

Infelizmente, o console python no Rhythmbox reconhece apenas Returnexecutar um comando - o KP_ENTERevento apenas entra em uma quebra de linha ...

Mas, solução fácil, basta desativar o numlock ao usar o console. Eu encontrei esse problema em alguns outros aplicativos (geralmente jogos), então vou procurar uma solução melhor a longo prazo (talvez forçando os dois a mapear de Returnalguma forma) ...

TJ Ellis
fonte
1
Caso alguém tenha esse problema, encontrei uma solução a longo prazo: xmodmap -pke > ~/.Xmodmap para criar um layout personalizado, no final desse arquivo, adicione uma linha keysym KP_Enter = Return e execute xmodmap ~/.Xmodmappara ativar o novo layout personalizado para esta sessão. Para tornar a execução automática para o futuro, adicione o seguinte a ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis
maldição comentários e sua falta de quebras de linha! a ifinstrução adicionada às .xinitrcnecessidades precisa ter quebras de linha thenantes e depois fi.
TJ Ellis
Por que você não usa a returntecla em vez da tecla do numlock enter?
Timo
Eu estava usando a tecla "Enter" principal, não a do teclado numérico; por alguma razão, ter o numlock ativado / desativado também fez a diferença.
TJ Ellis
CentOS 6.7, mas com o anaconda python, a tecla Enter no NumberPad teve um efeito ligeiramente diferente da tecla Enter no teclado principal. O NumLock não teve efeito. O teclado principal Enter retornaria o prompt '>>>', mas o NumberPad Enter retornaria uma linha vazia.
RJT