{"id":31,"date":"2008-10-02T02:22:56","date_gmt":"2008-10-02T00:22:56","guid":{"rendered":"http:\/\/www.blackhats.es\/wordpress\/?p=31"},"modified":"2022-08-20T18:26:24","modified_gmt":"2022-08-20T16:26:24","slug":"macros","status":"publish","type":"post","link":"https:\/\/www.blackhats.es\/wordpress\/?p=31","title":{"rendered":"Macros"},"content":{"rendered":"<p>Emacs, como su propio nombre indica es un <strong>E<\/strong>ditor de <strong>MAC<\/strong>ro<strong>S<\/strong>. Existen ocasiones en las que realizamos una tarea de forma repetitiva, es ah\u00ed cuando necesitamos hacer uso de las macros, eso s\u00ed, en el momento que las macros no sean lo suficientemente potentes como para resolver dicha tarea, deberemos hacer uso de lisp, el cual, es mucho m\u00e1s potente.<\/p>\n<p><strong>C-x (<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-start-macro<\/span>&#8216;; inicia una macro.<br \/>\n<strong>C-x )<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-end-macro<\/span>&#8216;; finaliza una macro.<br \/>\n<strong>C-x e<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-end-and-call-macro<\/span>&#8216;; ejecuta la \u00faltima macro definida. Presionando e repite la macro.<\/p>\n<p><strong>F3<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-start-macro-or-insert-counter<\/span>&#8216;; inicia una macro. Si es presionado cuando se est\u00e1 definiendo una macro, inserta un contador.<br \/>\n<strong>F4<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-end-or-call-macro<\/span>&#8216;; finaliza una macro si est\u00e1 en progreso. Si no lo est\u00e1, invoca la \u00faltima macro.<\/p>\n<p>Dos formas de crear, guardar y ejecutar macros:<\/p>\n<p>1) Indicamos que queremos comenzar a crear una macro<\/p>\n<p style=\"padding-left: 30px;\"><strong> C-x (<\/strong><\/p>\n<p>2) Realizariamos una serie de tareas repetitivas<\/p>\n<p style=\"padding-left: 30px;\">Por ejemplo escribimos: <strong>1 TAB 2 TAB 3<\/strong><\/p>\n<p>3) Indicamos que queremos dar por finalizada la macro<\/p>\n<p style=\"padding-left: 30px;\"><strong> C-x )<\/strong><\/p>\n<p>4) Ejecutamos la macro tantas veces como necesitemos<\/p>\n<p style=\"padding-left: 30px;\"><strong>C-x e<\/strong><\/p>\n<p>Opci\u00f3n alternativa:<\/p>\n<p>1) Indicamos que queemos comenzar a crear la macro<\/p>\n<p style=\"padding-left: 30px;\"><strong>F3<\/strong><\/p>\n<p>2) Realizariamos una serie de tareas repetitivas<\/p>\n<p style=\"padding-left: 30px;\">Por ejemplo escribimos: <strong>1 TAB 2 TAB 3 <\/strong><\/p>\n<p>3) Indicamos que queremos dar por finalizada la macro<\/p>\n<p style=\"padding-left: 30px;\"><strong>F4<\/strong><\/p>\n<p>4) Ejecutamos la macro tantas veces como necesitemos<\/p>\n<p style=\"padding-left: 30px;\"><strong>F4<\/strong><\/p>\n<p>La diferencia estriba, en que uno nos permite finalizar y ejecutar la macro directamente, o bien ejecutar una macro si esta ha sido definida.<\/p>\n<p>Otro ejemplo para ejecutar una macro de forma repetida sin ir repetici\u00f3n tras repetici\u00f3n, lo cual lo hace mucho m\u00e1s \u00fatil para muchas repeticiones:<\/p>\n<p>1) Creamos la macro<\/p>\n<p style=\"padding-left: 30px;\">Realizar los <strong>pasos del 1 al 3<\/strong> de cualquiera de las dos formas mostradas anteriormente.<\/p>\n<p>2) Le decimos el n\u00famero de repeticiones<\/p>\n<p style=\"padding-left: 30px;\">Es decir el \u00faltimo paso de cualquiera de los dos ejemplos anteriores le pasariamos el parametro 100<br \/>\n<strong> M-100 F4 <\/strong>o <strong>M-100 C-x e<\/strong><br \/>\nPor alguna extra\u00f1a raz\u00f3n para pasarle los parametros empleando la tecla <strong>meta <\/strong>no puedo realizarlo con la tecla <strong>Alt<\/strong>, sino que debo usar <strong>Esc y soltar<\/strong>.<\/p>\n<p>Adem\u00e1s con <strong>C-u C-x ( <\/strong>podremos a\u00f1adir nuevas tareas a la \u00faltima macro definida. Decir tambi\u00e9n podemos aplicar macros sobre regiones mediante <strong>M-x apply-macro-to-region-lines<\/strong>.<\/p>\n<p>M\u00e1s acciones con macros:<\/p>\n<p><strong>C-x C-k n<\/strong> : &#8216;name-last-kbd-macro&#8217;; nombra la \u00faltima macro creada. Esto es, que guardara en memoria la ultima macro creada por nosotros (se nos preguntara por el nombre de la macro).<br \/>\n<strong>(sin keystroke asociada)<\/strong> : &#8216;<span style=\"color: #0000ff;\">insert-kbd-macro<\/span>&#8216;; inserta una macro nombrada en un fichero, de esta forma podremos guardar los cambios y re-utilizar la macro en un futuro.<br \/>\n<strong>C-x q<\/strong> : &#8216;<span style=\"color: #0000ff;\">kbd-macro-query<\/span>&#8216;; inserta una petici\u00f3n en una definici\u00f3n de macro. <span style=\"color: #ff0000;\">[A EXPANDIR]<\/span><br \/>\n<strong>C-u C-x q<\/strong> : inserta una edici\u00f3n recursiva en una definici\u00f3n de macro. <span style=\"color: #ff0000;\">[A EXPANDIR]<\/span><br \/>\n<strong>C-M-c <\/strong>: &#8216;<span style=\"color: #0000ff;\">exit-recursive-edit<\/span>&#8216;; sale de una edici\u00f3n recursiva. <span style=\"color: #ff0000;\">[A EXPANDIR]<\/span><br \/>\n<strong>C-x C-k b<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-bind-to-key<\/span>&#8216;; Asocia una macro a un keystroke. <strong>C-x C-k [0-9A-Z]<\/strong> est\u00e1n reservadas.<br \/>\n<strong>C-x C-k SPC<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-step-edit-macro<\/span>&#8216;; edita una macro mientras se ejecuta paso a paso. En el modeline nos mostrara las distintas opciones entre ellas <strong>y<\/strong>, <strong>n<\/strong> y <strong>q<\/strong> (para si, no o salir).<br \/>\n<strong>C-x C-k l<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-edit-lossage<\/span>&#8216;; asocia los \u00faltimos 100 keystrokes en una macro.<br \/>\n<strong>C-x C-k e<\/strong> : &#8216;<span style=\"color: #0000ff;\">edit-kbd-macro<\/span>&#8216;; edita una macro. <strong>C-x e<\/strong> para la \u00faltima macro definida, <strong>M-x<\/strong> para una macro nombrada, <strong>C-h l<\/strong> para macros asociadas a una tecla.<br \/>\n<strong> C-x C-k &lt;CR&gt;<\/strong>: &#8216;<span style=\"color: #0000ff;\">kmacro-edit-macro<\/span>&#8216;; edita la \u00faltima macro.<br \/>\n<strong>C-x C-k C-e<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-edit-macro-repeat<\/span>&#8216;; edita la \u00faltima macro de nuevo.<\/p>\n<p>Al igual que existe un kill ring para aquellos elementos eliminados, existe un macro ring para aquellas macros creadas, al cual se acceder o alterar mediante los siguientes keystrokes:<\/p>\n<p><strong>C-x C-k C-t<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-swap-ring<\/span>&#8216;; transpone la \u00faltima macro con la anterior.<br \/>\n<strong>C-x C-k C-d<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-delete-ring-head<\/span>&#8216;; elimina la \u00faltima macro del macro ring.<br \/>\n<strong>C-x C-k C-p<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-cycle-ring-previous<\/span>&#8216;; salta a la macro anterior del macro ring.<br \/>\n<strong>C-x C-k C-n<\/strong> : &#8216;<span style=\"color: #0000ff;\">kmacro-cycle-ring-next<\/span>&#8216;; salta a la siguiente macro del macro ring.<br \/>\n<strong>C-x C-k r<\/strong> : &#8216;<span style=\"color: #0000ff;\">apply-macro-to-region-lines<\/span>&#8216;; aplica la macro a cada l\u00ednea de una regi\u00f3n.<\/p>\n<p>Con esto podemos ahorrar mucho tiempo y ser m\u00e1s productivos, sin embargo, cuando las macros no resuelven tareas complejas que requieren m\u00e1s potencia, debemos plantearnos hacer uso de lisp.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Emacs, como su propio nombre indica es un Editor de MACroS. Existen ocasiones en las que realizamos una tarea de forma repetitiva, es ah\u00ed cuando necesitamos hacer uso de las macros, eso s\u00ed, en el momento que las macros no sean lo suficientemente potentes como para resolver dicha tarea, deberemos hacer uso de lisp, el [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[40],"class_list":["post-31","post","type-post","status-publish","format-standard","hentry","category-basic","tag-emacs-macros"],"_links":{"self":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/31"}],"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=31"}],"version-history":[{"count":1,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/31\/revisions"}],"predecessor-version":[{"id":800,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/31\/revisions\/800"}],"wp:attachment":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}