Hi Max,

AFAIR, the Session should contain the width. Let me check.

Regards
JB

On 12/07/2016 07:16 PM, Max Spring wrote:
Is there a way to get the actual jline terminal object in a Karaf command?
I want to format the command output depending on the terminal width.
I'm on Ubuntu 16.04, Java 1.8.0_60-x64, and Karaf 3.0.5.

This one

  package org.example;

  import jline.TerminalFactory;
  import org.apache.karaf.shell.commands.Command;
  import org.apache.karaf.shell.console.OsgiCommandSupport;

  @Command(scope = "example", name = "term-wdith", description = "get
the terminal width")
  public class TermWidthCmd extends OsgiCommandSupport{

      protected Object doExecute() throws Exception {
          int w = TerminalFactory.get().getTerminalWidth();

          return null;
      }
  }

gives:

| 2016-12-07 10:10:17,443 | ERROR | l for user karaf |
ShellUtil                        | 27 - org.apache.karaf.shell.console -
3.0.5 | Exception caught while executing command
| java.lang.IncompatibleClassChangeError: Found interface
jline.Terminal, but class was expected
|     at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:11)
|     at
org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)

|     at
org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)

|     at
org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)

|     at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
|     at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
|     at
org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
|     at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
|     at
org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
|     at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
|     at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
|     at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
|     at
org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)

|     at
org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)

|     at
org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)

|     at java.security.AccessController.doPrivileged(Native
Method)[:1.8.0_60]
|     at
org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]

|     at
org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]


The 2nd approach

  package org.example;

  import jline.NoInterruptUnixTerminal;
  import jline.Terminal;
  import org.apache.karaf.shell.commands.Command;
  import org.apache.karaf.shell.console.OsgiCommandSupport;

  @Command(scope = "example", name = "term-wdith", description = "get
the terminal width")
  public class TermWidthCmd extends OsgiCommandSupport{

      protected Object doExecute() throws Exception {
          Terminal term = session != null ? (Terminal)
session.get(".jline.terminal") : null;
          NoInterruptUnixTerminal uterm = (NoInterruptUnixTerminal)term;
          int w = term.getTerminalWidth();

          return null;
      }
  }

basically gives the same exception:

| 2016-12-07 10:09:11,964 | ERROR | l for user karaf |
ShellUtil                        | 27 - org.apache.karaf.shell.console -
3.0.5 | Exception caught while executing command
| java.lang.IncompatibleClassChangeError: Found interface
jline.Terminal, but class was expected
|     at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:14)
|     at
org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)

|     at
org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)

|     at
org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)

|     at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
|     at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
|     at
org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
|     at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
|     at
org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
|     at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
|     at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
|     at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
|     at
org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)

|     at
org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)

|     at
org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)

|     at java.security.AccessController.doPrivileged(Native
Method)[:1.8.0_60]
|     at
org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]

|     at
org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]


What am I missing?

Thanks!
-Max


--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to