{"id":552,"date":"2013-05-22T23:37:08","date_gmt":"2013-05-22T21:37:08","guid":{"rendered":"http:\/\/www.blackhats.es\/wordpress\/?p=552"},"modified":"2022-08-20T18:25:37","modified_gmt":"2022-08-20T16:25:37","slug":"slime-avanzado","status":"publish","type":"post","link":"https:\/\/www.blackhats.es\/wordpress\/?p=552","title":{"rendered":"SLIME avanzado"},"content":{"rendered":"<p>Algunas funcionalidades y usos de SLIME no es tan basico como las opciones que comentabamos en posts anteriores. Ademas de SLDB que comentabamos en el post anterior, existen muchas otras opciones que hacen de SLIME un gran modo para trabajar en nuestro entorno GNU\/emacs.<\/p>\n<p><strong><span style=\"color: #ff6600;\">SLIME Selector<\/span><\/strong><\/p>\n<p>El comando <strong>slime-selector<\/strong> es empleado para cambiar de forma rapida entre buffers importantes: REPL, SLDB, el codigo fuente Lisp donde hackeamos, etc. Una vez invocado el prompt, nos permite usar una letra especifica para indicar que buffer queremos mostrar:<\/p>\n<p style=\"padding-left: 30px;\"><strong>?<\/strong> : Muestra ayuda sobre los buffers disponibles de slime-selectors.<\/p>\n<p style=\"padding-left: 30px;\"><strong>r<\/strong> : El buffer REPL para la conexion SLIME actual.<\/p>\n<p style=\"padding-left: 30px;\"><strong>d<\/strong> : El buffer SLDB empleado mas recientemente activado para la conexion actual.<\/p>\n<p style=\"padding-left: 30px;\"><strong>l<\/strong> : El buffer de codigo empleando lisp-mode usado mas recientemente.<\/p>\n<p style=\"padding-left: 30px;\"><strong>s<\/strong> : Buffer *slime-scratch*.<\/p>\n<p style=\"padding-left: 30px;\"><strong>c<\/strong> : Buffer de conexion Lisp.<\/p>\n<p style=\"padding-left: 30px;\"><strong>n<\/strong> : Ciclo hacia la siguiente conexion Lisp.<\/p>\n<p style=\"padding-left: 30px;\"><strong>t<\/strong> : SLIME threads buffer.<\/p>\n<p><strong><span style=\"color: #ff6600;\">SLIME Macroexpansion<\/span><\/strong><\/p>\n<p>Con los buffers de SLIME existen comandos extra empleados especificamente para la expansion de macros.<\/p>\n<p style=\"padding-left: 30px;\"><strong>C-c C-m<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-macroexpand-1-inplace<\/span>&#8216; ; Como slime-macroexpand-1 pero en la forma original es reemplazado con la expansion.<\/p>\n<p style=\"padding-left: 30px;\"><strong>g<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-macroexpand-1-inplace<\/span>&#8216; : La ultima expansion de macros es realizada de nuevo, los contenidos actuales del buffer de la expansion de macros son reemplazados con la nueva expansion.<\/p>\n<p style=\"padding-left: 30px;\"><strong>q<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-temp-buffer-quit<\/span>&#8216; ; Cierra el buffer de expansion.<\/p>\n<p style=\"padding-left: 30px;\"><strong>C-_<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-macroexpand-undo<\/span>&#8216; ; Deshace la ultima operacion de expansion de macros.<\/p>\n<div id=\":20e\"><strong><span style=\"color: #ff6600;\">Multiples conexiones con SLIME<\/span><\/strong><\/div>\n<div><\/div>\n<div>SLIME es capaz de conectar a multiples procesos Lisp al mismo tiempo. Cuando el comando <strong>M-x slime<\/strong> es invocado con argumentos de prefijo, se ofrecera un proceso Lisp adicional si actualmente uno esta siendo ejecutado. Esto resulta conveniente, pero requiere el conocimiento suficiente y estar seguro de que los comandos SLIME son ejecutados en el sistema Lisp que deseamos. Por lo tanto, algunos buffers estaran asociados a procesos Lisp especificos. Cada conexion Lisp tendra eso si, su propio buffer REPL, y todas las expresiones introducidas o comandos SLIME seran invocados en este buffer y enviados a la conexion asociada. Otros buffers creados por SLIME estaran asociados a las conexiones que originaron dicho buffer, incluyendo por ejemplo buffers SLDB, resultado de listados de apropos, etc. Estos buffers son el resultado de alguna interaccion con los procesos Lisp, por loque los comandos en ellos seran siempre enviados al mismo proceso. Ademas, cabe resaltar que comandos ejecutados en otras partes, como los buffers de codigo que empleen slime-mode, estaran siempre asociados a la conexion por defecto; usualmente esta sera la conexion establecida mas recientemente, aunque esto puede ser reasignado mediante el buffer \u00abconnection list\u00bb:<\/div>\n<div><\/div>\n<div style=\"padding-left: 30px;\"><strong>C-c C-x c<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-list-connections<\/span>&#8216; ; Muestra el listado de buffers de las conexiones establecidas (es equivalente a pulsar <strong>c<\/strong> desde el SLIME selector).<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>C-c C-x n<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-cycle-connections<\/span>&#8216; ; Cambia las conexiones Lisp actuales moviendose por todas las conexiones (es equivalente a pulsar <strong>n<\/strong> desde SLIME selector)<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>C-c C-x t<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-list-threads<\/span>&#8216; ; Muestra el listado de threads actuales (es equivalente a pulsar <strong>t<\/strong> desde SLIME selector).<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div>El buffer mostrado mediante slime-list-connections nos dara un sumario de una linea por conexion. Dicho sumario muestra la lista de conexiones mediante un numero de serie, el nombre de la implementacion Lisp, asi como otros detalles del proceso Lisp. La conexion actual por defecto es indicada mediante un asterisco.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>RET<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-goto-connection<\/span>&#8216; ; Hace pop del buffer REPL de la conexion en el punto actual.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>d<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-connection-list-make-default<\/span>&#8216; ; Crea una conexion en el punto actual para la conexion por defecto. Esto sera usado para comandos en los buffers de codigo con slime-mode.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>g<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-update-connection-list<\/span>&#8216; ; Actualiza la lista de conexiones en el buffer.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>q<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-temp-buffer-quit<\/span>&#8216; ; Sale de la lista de conexiones (elimina el buffer y reestablece la configuracion de ventanas).<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>R<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-restart-connection-at-point<\/span>&#8216; ; Reinicia el proceso Lisp para la conexion en el punto actual.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>(sin keybinding asociada)<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-connect<\/span>&#8216; ; Conecta a un servidor ejecutando Swank.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>(sin keybinding asociada)<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-disconnect<\/span>&#8216; ; Desconecta todas las conexiones.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px;\"><strong>(sin keybinding asociada)<\/strong> : &#8216;<span style=\"color: #0000ff;\">slime-abort-connection<\/span>&#8216; ; Aborta el intento de conexion actual.<\/div>\n<div style=\"padding-left: 30px;\"><\/div>\n<div style=\"padding-left: 30px; text-align: center;\"><a href=\"https:\/\/www.blackhats.es\/wordpress\/?attachment_id=553\" rel=\"attachment wp-att-553\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-553\" alt=\"Selection_003\" src=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/Selection_003.png\" width=\"702\" height=\"867\" srcset=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/Selection_003.png 702w, https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/Selection_003-242x300.png 242w\" sizes=\"(max-width: 702px) 100vw, 702px\" \/><\/a><\/div>\n<div style=\"padding-left: 30px; text-align: center;\"><\/div>\n<div style=\"padding-left: 30px; text-align: center;\">SLIME empleando multiples conexiones a sistemas Lisp, listando las conexiones, threads y eventos.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Algunas funcionalidades y usos de SLIME no es tan basico como las opciones que comentabamos en posts anteriores. Ademas de SLDB que comentabamos en el post anterior, existen muchas otras opciones que hacen de SLIME un gran modo para trabajar en nuestro entorno GNU\/emacs. SLIME Selector El comando slime-selector es empleado para cambiar de forma [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[297],"tags":[248,69,67,66,269,71,303,302,301,304],"class_list":["post-552","post","type-post","status-publish","format-standard","hentry","category-advanced","tag-cl","tag-common-lisp","tag-elisp","tag-lisp","tag-mode","tag-slime","tag-slime-connections","tag-slime-macroexpansion","tag-slime-selector","tag-slme-multiple-connections"],"_links":{"self":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/552"}],"collection":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=552"}],"version-history":[{"count":4,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/552\/revisions"}],"predecessor-version":[{"id":555,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/552\/revisions\/555"}],"wp:attachment":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}